Ansible是同时管理所有主机还是仅管理五个主机? (-f和:serial)

时间:2019-01-07 15:28:51

标签: parallel-processing ansible fork

我阅读了这两个有趣的文档:

ansible-playbook -f --> Statement 1

ansible-playbook :serial --> Statement 2

我发现了这两个语句:

声明1

-f <FORKS>, --forks <FORKS>

指定要使用的并行进程数(默认为5)

声明2

滚动更新批次大小 。默认情况下,Ansible将尝试并行管理播放中引用的所有计算机。对于滚动更新用例,您可以使用serial关键字定义一次Ansible应该管理多少个主机:

问题

什么是正确的? ansible一次使用所有主机还是仅使用5个主机? 还是5只是-f参数的默认值?

感谢您澄清这一点!

欢呼

2 个答案:

答案 0 :(得分:2)

--forks设置同时执行当前任务主机数量(请参见Ansible Configuration Settings

serial设置首先运行剧本的主机的数量(或百分比/分数),并在成功完成后将其应用于另一个主机数量(请参见Delegation, Rolling Updates, and Local Actions

示例:

具有设置:

  • 包含host[1-7]的库存
  • 带有task1和task2的剧本
  • --fork 2
  • serial: 3

过程是:

  1. task1host1上运行host2
  2. task1上运行host3
  3. task2host1上运行host2
  4. task2上运行host3
  5. 完成剧本在host[1-3]上运行
  6. task1host4上运行host5
  7. task1上运行host6
  8. task2host4上运行host5
  9. task2上运行host6
  10. 完成剧本在host[4-6]上运行
  11. task1上运行host7
  12. task2上运行host7
  13. 完成剧本在host7上运行

因为:

  • 您最多一次在2个主机上执行一项任务(--fork
  • 您最多一次在3台主机上执行整个剧本(serial

答案 1 :(得分:0)

阅读this doc (Ansible Performance Tuning)应该提供您需要的所有详细信息。但是,总而言之,--forks广泛配置了Ansible可以产生的并行进程的数量,因此,可以并行配置的主机的最大数量。 --fork的值默认为5。

但是,如果将serial设置为比通过--forks参数生效的数字低的值,则这是将并行执行任务的或目标主机的数量。设置了serial参数的播放

这种组合很有用,因为它可以让您调整剧本以针对最佳主机数量运行,以提高性能,但随后将某些任务限制为该值的一小部分(例如,确保错开服务重启,而不是错开同时应用于所有主机,从而确保最终用户的POV不会在该服务上造成停机)。