Ansible 是 redhat 提供的自动化运维工具,它是 Python编写,可以通过 pip 安装。
pip install ansible
它通过任务(task)、角色(role)、剧本(playbook) 组织工作项目,适用于批量化系统配置、软件部署等需要复杂操作的工作。
但对于批量运行命令的场景,ansible 就显得笨重和缓慢。
下面以在4台主机上计算/etc/hosts的md5值为例来说明。
ansible使用示例
time ansible compute -i host.invetory -f 4 -m shell -a "md5sum /etc/hosts"
compute 为主机定义文件中的主机组名称
-i 指定主机定义文件
-f 指定并发度为4
-m 指定python模块
-a 运行参数,即通过shell模块要运行的命令
注:需要事先设置好ssh免密登录。
总用时2.6 秒,比较慢。
我们可以采用其它的工具,比如 pdsh 或者 pssh。这两个工具都在 epel 源中,可以通过 yum 安装。
yum install -y pdsh*
yum install -y pssh
pssh使用示例
time pssh -H "ic-cmp01 ic-cmp02 ic-cmp03 ic-cmp4" -p 4 -i md5sum /etc/hosts
-H 指定主机列表,但不支持缩写方式;主机数量大时不太友好,但可写到文件中,通过 -h 指定;
-p 指定并发数量
-i 显示输出
输出示例
总用时 0.31秒,比ansible快8倍左右。
pdsh使用示例
time pdsh -R ssh -f 4 -w ic-cmp0[1-4] md5sum /etc/hosts
-R 指定连接主机的方式,这里使用 ssh ,需要事先设置好免密登录。
-f 指定并发数量。
-w 指定要连接的主机;可以使用缩写方式,这里指定了4台主机;也支持主机组 -g
md5sum /etc/hosts 是要在远程主机上运行的命令。
输出示例
默认将主机上的标准输出和标准错误同时显示,并标示出来自哪一台主机。
仅用时0.29秒,比ansible快了近10倍。
个人感觉 pdsh 的输出更易读一些,特别是主机数量特别多时,而且pdsh还提供了输出整合的功能。
time pdsh -R ssh -f 4 -w ic-cmp0[1-4] md5sum /etc/hosts | dshbak -c
将上面的命令通过管道给 dshbak -c 进行整合后的输出如下:
是不是可读性更好了?