(1) 模块:copy、shell、lineinfile、replace、ping、yum
(2) 影响ansible性能的原因有两种,一种是执行上的资源浪费,需要对其进行优化; 另一种是进程和反馈机制造成的限制,可以用async和poll 机制缓解
· ansible优化:
- 关闭 gathering facts
- ansible-playbook 的第 1 个步骤总是执行 gather facts,不论你有没有在 playbook 设定这个 tasks。如果你不需要获取被控机器的 fact 数据的话,你可以关闭获取 fact 数据功能
---
- hosts: 172.16.64.240
gather_facts: no
remote_user: XXX
sudo: yes | no
roles:
- {role: profile_test}
- SSH PIPElinING
- SSH pipelining 是一个加速 Ansible 执行速度的方法,默认为关闭,为了兼容不同的 sudo 配置(主要是 requiretty 选项)。如果不使用 sudo,建议开启,打开此选项可以减少ansible执行没有传输时 ssh 在被控制机器上执行任务的连接数。
- 如果使用 sudo,必须关闭 requiretty 选项
- 通过修改/etc/ansible/ansible.cfg 文件可以开启 pipelining
pipelining=True
- ControlPersist
- ControlPersist 特性需要高版本的 SSH 才支持,CentOS 6 默认不支持,使用需要自行升级openssh。ControlPersist 即持久化 socket ,一次验证,多次通信,并且只需要修改 ssh 客户端,即 Ansible 主机即可。
# cat ~/.ssh/config
ControlPersist 4h
# 开启了 ControlPersist 特性后,SSH 在建立了 sockets 之后,节省了每次验证和创建的时间。在网络状况不是特别理想,尤其是跨互联网的情况下,所带来的性能提升是非常可观的
· 以上内容为 ansible 调优
· 因为ansible默认最大进程数为5,且默认为同步执行,只有当上一条命令执行结束,才会开始执行下一条命令,导致长时间命令占用进程,大大降低了并发效率,这里选择用 async 和 poll 参数来解决,将长任务扔进后台异步处理
· async 和 poll 介绍:让下发的任务执行的连接变为异步:任务下发之后,长连接不再保持,而是每隔一段时间轮询结果,直到任务结束
- async参数值代表了这个任务执行时间的上限值。即任务执行所用时间如果超出这个时间,则 认为任务失败。此参数若未设置,则为同步执行。
- poll参数值代表了任务异步执行时轮询的时间间隔。
- 如果 poll 为0,代表不关心结果的任务,async 为0 ,则代表一直等待这个job完成
- name: Run updatedb
command: /usr/bin/updatedb
async: 300
poll: 10
# 貌似这样就可以解决5台以上机子的问题
没有弄6台以上机子做测试,好奇async为 0 时,多台机子的反馈机制