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. DeepFaceLab参数详解之Batch-Size的使用和取值!

    Batch-Size简称BS. 这是一个非常常见的参数,所有模型都具备的一个参数. 这其实是深度学习中的一个基础概念.要说理论可以说出一大堆,大家可以先简单的理解为一次处理的图片张数.为了防止吓跑小白 ...

  2. 使用matlab用优化后的梯度下降法求解达最小值时参数

    matlab可以用 -Conjugate gradient -BFGS -L-BFGS 等优化后的梯度方法来求解优化问题.当feature过多时,最小二乘计算复杂度过高(O(n**3)),此时 这一些 ...

  3. Storm之WordCount初探

    刚接触Strom,记录下执行过程 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <proj ...

  4. Mysql查询语句中字符型字段不区分大小写解决方法

    项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...

  5. :成功配置 centos + nginx + .net core 2.0

    https://segmentfault.com/a/1190000010763523

  6. Dojo入门:初识Dojo

      Dojo的全称是Dojo Toolkit,始创于2004年,是当前各种蓬勃发展的JS工具包中的佼佼者.Dojo 为富互联网应用程序(RIA) 的开发提供了完整的端到端的解决方案,包括核心的 Jav ...

  7. MyBatis框架原理1:构建SqlSessionFactory的过程

    SqlSessionFactoryBuilder 首先创建了一个SqlSessionFactoryBuilder对象,然后调用该对象的build方法加载全局XML配置的流文件构建出一个SqlSessi ...

  8. C++随笔(0)——关于const

    最近发现自己对const这一块其实不甚熟悉,所以复习一下const的相关知识点. 基本用法 const int bufSize = 512; 上面这样就可以将bufSize定义为常量,编译的时候编译器 ...

  9. Shell编程、part3

    本节内容 1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变 ...

  10. Angular5 父组件获取子组件实例( ViewChildren、ViewChild用法)

    原文链接 Understanding ViewChildren, ContentChildren, and QueryList in Angular 使用场景 有时候,我们想要在父组件中访问它的子组件 ...