Ansible批量部署工具
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批量部署工具的更多相关文章
- Ansible批量部署工具的安装
1.系统安装gcc,以及python2.6以上(2.6.8): 第一种比较简单的安装方法: 1)直接yum install -y ansible; 2)然后更改配置,/etc/ansible/ansi ...
- Linux系统——Ansible批量管理工具
批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...
- ansible 批量部署准备工作
Ansible:自动化运维工具,基于Python开发 功能{ 批量系统配置 批量程序部署 批量运行命令等等 } 准备工作: 一.操作主机安装epel源 和 ansible工具 yum -y insta ...
- 利用ansible批量部署zabbix-agent
应用环境:Linux运维工作少不了一个好的监控,zabbix就是目前比较好的一款开源监控软件. 监控类型多种多样,如果不介意或者系统支持安装,那么agent方式是首选. 当主机数量较多时,可以利用相关 ...
- ansible批量部署(一)
自动化运维工具shell脚本/Ansible(无客户端)/Saltstack(master-minion) 回顾服务器部署的流程:买云主机->环境部署->软件部署->配置部署-> ...
- ansible批量管理工具的搭建与简单的操作
ansible的安装 # [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ...
- Linux批量部署工具Expect
既然没有遇到过,做好准备总是好的.这是自己送给自己的话,现在运维做自动话越来越多,自己就学以下,记录笔记.目前主流的有puppet.Expect.pssh等等,今天就用Expect做自动部署和日常管理 ...
- ansible批量部署mysql
1.1 将mysql软件包同步到客户端服务器,做安装前期准备 Ps:mysql安装包线拖到ansible服务端的/ansible/roles/mysql/files目录下 vim /ansible/r ...
- ansible批量部署模块(二)
回顾:Ansible: 无需客户端程序 只要有SSH 模块化 ansible帮助工具ansible-doc 模块名ansible-doc 模块名 -s 列出该模块的所有选项ansible-doc -l ...
随机推荐
- DeepFaceLab参数详解之Batch-Size的使用和取值!
Batch-Size简称BS. 这是一个非常常见的参数,所有模型都具备的一个参数. 这其实是深度学习中的一个基础概念.要说理论可以说出一大堆,大家可以先简单的理解为一次处理的图片张数.为了防止吓跑小白 ...
- 使用matlab用优化后的梯度下降法求解达最小值时参数
matlab可以用 -Conjugate gradient -BFGS -L-BFGS 等优化后的梯度方法来求解优化问题.当feature过多时,最小二乘计算复杂度过高(O(n**3)),此时 这一些 ...
- Storm之WordCount初探
刚接触Strom,记录下执行过程 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <proj ...
- Mysql查询语句中字符型字段不区分大小写解决方法
项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...
- :成功配置 centos + nginx + .net core 2.0
https://segmentfault.com/a/1190000010763523
- Dojo入门:初识Dojo
Dojo的全称是Dojo Toolkit,始创于2004年,是当前各种蓬勃发展的JS工具包中的佼佼者.Dojo 为富互联网应用程序(RIA) 的开发提供了完整的端到端的解决方案,包括核心的 Jav ...
- MyBatis框架原理1:构建SqlSessionFactory的过程
SqlSessionFactoryBuilder 首先创建了一个SqlSessionFactoryBuilder对象,然后调用该对象的build方法加载全局XML配置的流文件构建出一个SqlSessi ...
- C++随笔(0)——关于const
最近发现自己对const这一块其实不甚熟悉,所以复习一下const的相关知识点. 基本用法 const int bufSize = 512; 上面这样就可以将bufSize定义为常量,编译的时候编译器 ...
- Shell编程、part3
本节内容 1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变 ...
- Angular5 父组件获取子组件实例( ViewChildren、ViewChild用法)
原文链接 Understanding ViewChildren, ContentChildren, and QueryList in Angular 使用场景 有时候,我们想要在父组件中访问它的子组件 ...