Ansible中的并发和异步
用ansible批量操作节点过程中,如果节点过多,成百上千的话,此时我们再执行任务的时候,则需要分批次去灰度执行,比如100台则均分10台共10批次去执行。对于ansible中tasks的执行顺序是:先再第一个批次节点中执行task1,然后第二个批次节点执行task1,以此类推至所有节点完成task1后回到第一批次执行task2…….
并发
ansible中默认并发数为5,则同时只有5个节点在执行,如果指定则可以通过serial参数来控制
1 | [root@ansible-manager ~]# cat /etc/ansible/test.yml |
异步
默认ansible执行任务时同步的,每个执行到一个task,则节点会将task产生的输出实时反馈会控制节点。如果我们有如下任务:
- 长时间任务,有可能超时
- 运行节点众多
- 无需任务的反馈
此时可以使用ansible中的参数async和poll两个参数来控制
- async:表示这个step的最长等待时长, 如果设置为0, 表示一直等待下去直到动作完成
- poll:表示检查step操作结果的间隔时长
示例一
异步任务,5秒超时,每两秒轮询任务状态。任务运行最终会失败
1 | [root@ansible-manager ~]# cat /etc/ansible/test.yml |
示例二
异步任务,12秒超时,每5秒轮询任务状态。任务运行最终会成功,但是结果会在15秒后返回
1 | [root@ansible-manager ~]# cat /etc/ansible/test.yml |
示例三
异步任务,12秒超时,配置0秒轮询,则代表不轮询,不关心任务状态,直接进入下一个任务。任务运行最终会成功,同时进入下一个任务处理中。此处用async_status来获取指定任务id的结果
1 | [root@ansible-manager ~]# cat /etc/ansible/test.yml |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 云野生SRE回忆录!