Ansible的一些相关

(1) 模块:copy、shell、lineinfile、replace、ping、yum
(2) 影响ansible性能的原因有两种,一种是执行上的资源浪费,需要对其进行优化; 另一种是进程和反馈机制造成的限制,可以用async和poll 机制缓解
· ansible优化:

  1. 关闭 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}
  1. SSH PIPElinING
  • SSH pipelining 是一个加速 Ansible 执行速度的方法,默认为关闭,为了兼容不同的 sudo 配置(主要是 requiretty 选项)。如果不使用 sudo,建议开启,打开此选项可以减少ansible执行没有传输时 ssh 在被控制机器上执行任务的连接数。
  • 如果使用 sudo,必须关闭 requiretty 选项
  • 通过修改/etc/ansible/ansible.cfg 文件可以开启 pipelining
pipelining=True
  1. 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 介绍:让下发的任务执行的连接变为异步:任务下发之后,长连接不再保持,而是每隔一段时间轮询结果,直到任务结束

  1. async参数值代表了这个任务执行时间的上限值。即任务执行所用时间如果超出这个时间,则 认为任务失败。此参数若未设置,则为同步执行。
  2. poll参数值代表了任务异步执行时轮询的时间间隔。
  3. 如果 poll 为0,代表不关心结果的任务,async 为0 ,则代表一直等待这个job完成
- name: Run updatedb
  command: /usr/bin/updatedb
  async: 300
  poll: 10

  # 貌似这样就可以解决5台以上机子的问题

没有弄6台以上机子做测试,好奇async为 0 时,多台机子的反馈机制

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容