Ansible:自动化运维工具

  你需要在一台机器上yum install 一个包,这时候有一个需求,比如现在有5台机同时需要装apache这个包,那么100台呢,ssh上去就太慢了,这时候就借助到了ansible批量部署工具。

通过host inventory这个文件去管理需要批量部署的主机,它实现的就是ssh协议。

把公钥拷给需批量部署的主机。

Core Modules模块:核心模块,比如说cp、yum这些命令在ansuble里模块化了。

Custom Modules模块:自定义模块,但是得需要有编程语言技术。

Connection Plugins:连接插件。

playbooks:一个任务或条命令代表一个play,多个任务写在一个文件里。

工作原理

ansible加载hosts文件,通过免秘钥或配置文件参数来批量管理主机。

ansible优点:

上手简单,无需安装客户端

ansible无需客户端

配置简单、扩展性强

支持API自定义模块,可通过python扩展

幂等性:一种操作重复多次结果相同82分19

ansible安装

yum install epel-release

yum install ansible

如遇ansible下载不成功,是yum仓库的问题,把自己的移除,而后把C开头的文件都移除来,而后yum clean all ,再去下载即可。

ansible配置客户端

首先生成密钥

ssh-keygen

而后进入.shh这个文件,里面的id_rsa.pub文件就是公钥,id_rsa就是私钥。

利用scp发送给客户端

也可以

ssh-copy-id -i id_rsa.pub 客户端ip
vim /etc/ansible/hosts

这个就是host inventory文件

在这个文件里需要定义组:格式如下:

[组名自定义]

客户端ip ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=密码(这是通过配置文件免密登录)

ansible 组名 -m ping 这一步是ping组里所有机器,看是否ok(调用模块命令)

显示的changed:false是没有做出改变的意思

如果ping失败,请打开配置文件

修改#host_key_checking=False

把注释打开即可。

ansible常用命令

列出当前的核心模块

ansible-doc -l 

查看此模块用法

ansible-doc -s 模块名 

启动并发线程数,减少压力

ansible 组名 -f 

测试通信

ansible all -m ping

在组里的机器去创建用户

ansible 组名 –m user –a 'name=名字'

给组里的所有机器安装这个软件

ansible 组名 –m yum –a 'name=安装包名字 state=present'

卸载组里所有机器的这个安装包

ansible 组名 –m yum –a 'name=安装包名字 state=absent'

重启组里所有机器的这个安装包

ansible 组名 –m service –a 'name=服务名字 state=restarted'

拷贝当前文件到组里的机器

ansible 组名 –m copy –a 'src=/root/psu.py dest=/tmp'

拷贝当前文件到组里的机器的任意一台

ansible 组里机器的ip –m copy –a 'src=/root/psu.py dest=/tmp'

直接执行命令

ansible 组名 –m command  -a 'ls -ltr'

检测剧本是否有语法错误

ansible-playbook --syntax-check 文件名.yml  

模拟执行剧本

ansible-playbook  -C  文件名.yml   

palybooks核心部分

书写格式

vim 名字.yml

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

tasks:

-[空格]name:[空格]yum install tree

yum:[空格] name=tree state=present

-[空格]name:[空格]changed service status

service:[空格] name=httpd state=started

ansible-playbook 名字.yml  :调用yml文件

还可以赋予变量

vim 名字.yml

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

vars:

-[空格]packages:[空格]tree   把tree这个包名赋予给packages这个变量。就是tree=packages

tasks:

-[空格]name:[空格]yum install tree

service:[空格] name={{ packages }} state=absent

ansible-playbook 名字.yml  :调用yml文件

还可以迭代:比如创建多个用户

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

vars:

-[空格]packages:[空格]tree   把tree这个包名赋予给packages这个变量。就是tree=packages

tasks:

-[空格]name:[空格]yum install tree

service:[空格] name={{ packages }} state=absent

        -[空格]name:[空格]create many users

                   user[空格]:[空格]name={{ item }} item是内置变量,可以直接使用

                with_items:

                  -[空格]用户名

                  -[空格]应户名

ansible-playbook 名字.yml  :调用yml文件

还可以触发器:

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

vars:

-[空格]packages:[空格]tree   把tree这个包名赋予给packages这个变量。就是tree=packages

tasks:

-[空格]name:[空格]yum install tree

service:[空格] name={{ packages }} state=absent

        -[空格]name:[空格]copy

                   copy:[空格]src= 本机文件路径    dest=目标文件路径

                   notify:

                   -[空格]service httpd restart(给触发器起个名字) 

            handlers:

            -[空格]name:这的名字一定要跟触发器起的名字一样

                      service:[空格]name=httpd state=restarted

ansible-playbook 名字.yml  :调用yml文件

多个触发只需要在任务下紧跟notify:而后在handlers里同一添加要触发的任务即可。

template模块

比如我批量部署apache,我的需求是同时安装apache,但他俩的配置文件不能一样,比如里面的端口号不一样。

vim 命名.yml文件

- hosts: testhost

 remote_user: root

 tasks:

 - name: copy differernt httpd.conf

  template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf

而后 改写httpd的配置文件,把端口号设置成一个变量

Listen {{ port }}

vim /etc/ansible/hosts

把我们刚设置变量传进去,添加至每台机器后

port=需求端口号

port=需求端口号

roles用法

把每一个play封装到角色里,就是把目录模块化了。

第一层目录可以自定义名字,第二层目录必须交roles,而后roles里又包含两个目录,这两个目录也可以自定义名字,而后再在这两个目录里去定义目录。

调用task目录,适用于yum模块,service模块。

而后进入tasks目录(第四级目录)创建main.yml文件,必须叫这个。

而后进去直接写任务即可。而后在roles同级目录下,创建site.yml这个文件,而后写入:

- hosts: 组名

 remote_user: root

 roles:

 - 刚才编写的第三级目录名,就是你编写那个第三级目录,直接把目录名写到这即可。

调用files目录,适用于copy模块。

先把你要批量拷贝的文件放到files这个目录里。而后编辑taks目录的main.yml文件:

handlers跟vars目录必须定义main.yml这个文件。

vars里的main.yml只需定义变量即可。

变量名 = 名字

handlers里的main.yml只需定义名字跟任务即可。notify要写到tasks里的main.yml。

调用的时候调用site.yml这个文件即可。

Ansible批量部署工具的更多相关文章

  1. Ansible批量部署工具的安装

    1.系统安装gcc,以及python2.6以上(2.6.8): 第一种比较简单的安装方法: 1)直接yum install -y ansible; 2)然后更改配置,/etc/ansible/ansi ...

  2. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

  3. ansible 批量部署准备工作

    Ansible:自动化运维工具,基于Python开发 功能{ 批量系统配置 批量程序部署 批量运行命令等等 } 准备工作: 一.操作主机安装epel源 和 ansible工具 yum -y insta ...

  4. 利用ansible批量部署zabbix-agent

    应用环境:Linux运维工作少不了一个好的监控,zabbix就是目前比较好的一款开源监控软件. 监控类型多种多样,如果不介意或者系统支持安装,那么agent方式是首选. 当主机数量较多时,可以利用相关 ...

  5. ansible批量部署(一)

    自动化运维工具shell脚本/Ansible(无客户端)/Saltstack(master-minion) 回顾服务器部署的流程:买云主机->环境部署->软件部署->配置部署-> ...

  6. ansible批量管理工具的搭建与简单的操作

    ansible的安装 # [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ...

  7. Linux批量部署工具Expect

    既然没有遇到过,做好准备总是好的.这是自己送给自己的话,现在运维做自动话越来越多,自己就学以下,记录笔记.目前主流的有puppet.Expect.pssh等等,今天就用Expect做自动部署和日常管理 ...

  8. ansible批量部署mysql

    1.1 将mysql软件包同步到客户端服务器,做安装前期准备 Ps:mysql安装包线拖到ansible服务端的/ansible/roles/mysql/files目录下 vim /ansible/r ...

  9. ansible批量部署模块(二)

    回顾:Ansible: 无需客户端程序 只要有SSH 模块化 ansible帮助工具ansible-doc 模块名ansible-doc 模块名 -s 列出该模块的所有选项ansible-doc -l ...

随机推荐

  1. leetcode-easy-listnode-234 Palindrome Linked List

    mycode   89.42% # Definition for singly-linked list. # class ListNode(object): # def __init__(self, ...

  2. leetcode 714. 买卖股票的最佳时机含手续费

    继承leetcode123以及leetcode309的思路,,但应该也可以写成leetcode 152. 乘积最大子序列的形式 class Solution { public: int maxProf ...

  3. [转]Tomcat中8005/8009/8080/8443端口的作用

    8005:关闭tomcat进程所用.当执行shutdown.sh关闭tomcat时就是连接8005端口执行“SHUTDOWN”命令--由此,我们直接telnet8005端口执行“SHUTDOWN”(要 ...

  4. 【9】letter-spacing / box-shadow

    1.letter-spacing :增加或减少字符间的空白(字符间距),如:h1 {letter-spacing:2px} 2.box-shadow : box-shadow: 10px 10px 5 ...

  5. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  6. Java学习之==>数组【array】

    一.定义数组 /** * 一维数组定义 * * 为数组插入元素 */ public void case1() { // 声明 int[] arr1; // 声明+初始化 int[] arr2 = ne ...

  7. [Amazon] Program for Fibonacci numbers 斐波那契数列

    The Fibonacci numbers are the numbers in the following integer sequence. 0, 1, 1, 2, 3, 5, 8, 13, 21 ...

  8. Hibernate框架 初识 ORM概念

    Hibernate概述 Hibernate是一个ORM(对象关系映射)映射框架,它的核心思想就是在底层对JDBC进行了一次封装. 什么是框架 IT语境中的框架,特指为解决一个开放性问题而设计的具有一定 ...

  9. Activity启动模式分类(一)

    standerd 默认模式,每次启动Activity都会创建一个新的Activity实例. 比如:现在有个A Activity,我们在A上面启动B,再然后在B上面启动A,其过程如图所示: single ...

  10. linux 磁盘命令

    用到共享软件为:samba 配置文件为  /etc/samba/smb.conf sudo fdisk -l 查看磁盘 sudo df -lh 查看磁盘挂载情况 sudo mount /dev/sdb ...