PS:开源的自动化运维部署工具,在以前的项目中应用过Puppet,研发部门也开发过一套自动化部署系统(主要基于java在web界面调用shell脚本部署),使用过程中都有各种不满意。最近尝试一个新一点的Ansible,发现非常好用。配置简单,功能强大。
一、简介与优点:
1、ansible是为类Unix系统开发的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、SaltStack、chef等)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
2、Puppet、SaltStack、Chef这三个都采用C/S模式,每台被控机器都需要安装客户端,对于数量在数百台以上的机器上部署仍然有些麻烦。相比之下,Ansible无需安装服务端和客户端,只要SSH 验证即可。典型的“去中心化”思想。
3、使用简单,快速上手。以前在用Puppet之前,花了时间研究。本来使用Puppet就是想把自己从重复的事情中解放出来,结果为了简化一件事,而深入另一件复杂的事。
4、配置文件易读。Ansible 的主机定义文件使用 INI 格式,支持分组,能够指定模式;此外也能动态生成,这对管理云主机很有用。Playbook是YAML格式,比Puppet的DSL要易读易写很多。
二、安装与基本使用:
1、安装:
Ansible默认不在yum的默认库中,需要启用epel库。(建议用阿里云的库,下载速度最快。)
# cd /etc/yum.repos.d/
# wget http://mirrors.aliyun.com/repo/epel-7.repo
# yum install ansible -y
2、设置用于节点鉴权的SSH密钥:
在Ansible服务端生成密钥,并且复制密钥到各个被控节点中。
# ssh-keygen
# ssh-copy-id -i root@10.36.16.20
3、为Ansible定义节点清单
节点维护清单在配置文件/etc/ansible/hosts 里面。
[16-servers]
10.36.16.12
10.36.16.15
10.36.16.16
10.36.16.17
10.36.16.18
10.36.16.19
10.36.16.20
10.36.16.21
10.36.16.22
4、基本使用:
检查16-servers节点组的连通性:
ansible 16-servers -m ping
检查16-servers节点组的内核版本:
ansible 16-servers -m shell -a "uname -a"
检查16-servers节点组的磁盘使用情况并把结果输出到本地指定文件:
ansible 16-servers -m shell -a "df -Th" > /root/df.txt
5、常用模块用法:
shell和command的区别:shell模块支持管道符和变量等特殊字符,而command不支持。
command模块(执行远程命令)
ansible 16-servers -m command -a "uname -a"
shell模块(执行远程主机的shell/python脚本)
ansible 16-servers -m shell -a "/root/xxx.py"
script模块(在远程主机执行主控端的shell/python脚本)
ansible 16-servers -m script -a "/root/xxx.py"
raw模块(类似于command模块、支持管道传递)
ansible 16-servers -m raw -a "netstat -na|grep ESTABLISHED|wc -l"
先说这些了,更详细用法请参考官方文档: