首先确认批量管理我们为什么使用ansible:无外乎主机分组管理、实时批量执行命令或脚本、实时批量分发文件或目录、定时同步文件等。
1. ansible与saltstack对比
前一段时间用了saltstack,免不得要谈一下他们的优缺点。两者都是安装和使用都非常方便的批量管理软件。
1、salt要安装agent;ansible不需要,通过ssh连接,省掉装agent的事。
2、salt在server端要启进程;ansible不需要,但这都无所谓差不多。
3、salt与ansible都有模块,可使用任意语言开发模块。
4、salt与ansible都使用yaml语言格式编写剧本。
为什么不使用salt,
1,tcp断开,执行命令会漏装机器,
2,安装agent很麻烦,
3,依赖问题麻烦。
2. ansible安装
centos:
yum install epel.repo(默认源会安装失败)
yum install ansible
注:在开始ansible操作受控机器前,需要配置好ssh免密码登陆
3. ansible命令参数介绍
Ansible中的临时命令的执行是通过Ad-Hoc来完成,能够快速执行,而且不需要保存执行的命令,例如:
ansible -i ~/hosts all -m command -a ‘ls’ -u root
主要参数如下:
-u username 指定ssh连接的用户名,即执行后面命令的用户
-i inventory_file 指定所使用的inventory文件的位置,默认为/etc/ansible/hosts
-m module 指定使用的模块,默认为command,可能也是shell ,script
-f 10 指定并发数,并发量大的时候,提高该值
--sudo [-k] 当需要root权限执行的化,-k参数用来输入root密码
-a 指定参数,一般是指定执行脚本或者执行命令
4. ansible主机分组管理:
配置好ssh免密码登陆后,就该把那些机器加入到hosts文件中,hosts不限路径,可用-i参数指定路径。
[root ~]# cat /etc/ansible/hosts
[KD1] #组名
1.1.1.1:62222 #这里的端口是ssh端口
1.1.1.2:62222
[KD2]
1.1.1.3:62222
1.1.1.4:62222
分组的使用情景:1,hosts文件全执行;2,指定组执行;3,指定主机和组混合执行。一般第二种使用常见。
全执行效果:ansible -i /etc/ansible/hosts all -m shell -a 'uptime'
分组执行效果:ansible -i /etc/ansible/hosts KD1 -m shell -a 'uptime'
连续的主机名使用";"号分隔,如:ansible -i /etc/ansible/hosts 'KD1;1.1.1.3' -m shell -a 'uptime'
更多的分组格式参考:
还可以使用脚本动态获取主机的方式:
官方地址:
网络文档:
5. ansible实时批量执行命令和脚本:
批量执行命令:
ansible -i/etc/ansible/hosts all -m shell -a 'who'
ansible -i/etc/ansible/hosts all -m command -a 'who'
注:shell模块可以使用管道,而command则不可以。
*批量执行脚本:
ansible all -m script -a "/root/ceshi.sh" #这种方式可以替代paybook的使用,直接shell脚本加命令即可,包括文件备份,定时任务等。
6. ansible实时批量拷贝文件或目录
从ansible-doc copy中的帮助信息得知
1,作用是将本机的文件,传送到目标机器;
2,ansible的copy模块是围绕rsync的包装,所以它是增量而不是全量的拷贝。
ansible MachineName -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root' #拷贝文件
ansible MachineName -m copy -a 'src=/etc/test dest=/root/test mode=755 owner=root ' #此处test为目录
7. ansible定时同步文件
既然ansible的copy模块是rsync的包装,那我定期执行copy目录的命令,就能完成文件的定时同步了。如果文件变化,就会同步过去,如果没变化,就不会拷贝。以后只要把要同步的文件放到该目录下即可。
8. ansible模块帮助
执行命令用到的那些模块是干嘛的?使用ansible-doc查看帮助吧。
ansible-doc -l #查看模块列表
ansible-doc copy #查看copy模块的详细信息
ansible-doc script #查看script模块的详细信息
总结,使用ansible的script功能+copy+shell基本能完成几百台服务器的管理了。