Ansible 执行速度慢如何开启 fork 多进程优化并发效率?

文章导读
调整 Ansible 的 forks 参数是提升批量任务执行速度最直接的方法,适合控制节点资源充足且需要管理大量主机的场景。
📋 目录
  1. 命令速用版
  2. 原理与限制
  3. 分步处理与系统检查
  4. 验证方法
  5. 常见坑与排查
  6. 参考来源
A A

调整 Ansible 的 forks 参数是提升批量任务执行速度最直接的方法,适合控制节点资源充足且需要管理大量主机的场景。

先说结论:通过调大 forks 参数可以增加并发连接数,但需避免控制节点过载。

  • 先定位:确认当前 forks 值及控制节点资源水位
  • 先做:在 ansible.cfg 或命令行中调整 forks 数值
  • 再验证:观察任务耗时变化及控制节点负载情况

命令速用版

临时调整可直接在命令中加参数,永久生效建议修改配置文件。

# 临时指定并发数为 20
ansible all -m ping -f 20

# 或在 ansible-playbook 中指定
ansible-playbook site.yml -f 20

原理与限制

Ansible 默认通过 SSH 推送任务,默认并发进程数(forks)通常设置为 5。这意味着同一时间只有 5 台主机在执行任务,其余主机需要等待。增加 forks 数值相当于允许控制节点同时建立更多 SSH 连接,从而缩短整体等待时间。但并发数受限于控制节点的 CPU、内存以及文件描述符数量。

分步处理与系统检查

1. 确认当前配置

查看当前生效的 forks 值,可以通过查看配置文件或运行 ansible 命令查看配置摘要。

ansible-config dump | grep DEFAULT_FORKS

2. 检查系统文件描述符限制(控制节点)

Ansible 执行速度慢如何开启 fork 多进程优化并发效率?

高并发需要更多文件句柄,需确保控制节点 ulimit 足够大。

# 查看当前限制
ulimit -n

# 若数值过小(如 1024),临时调整为 65535
ulimit -n 65535

3. 修改配置文件(推荐)

在项目目录或用户目录下创建/编辑 ansible.cfg,在 [defaults] 段落中设置。

[defaults]
forks = 20

4. 检查 SSH 并发限制(被管节点)

部分服务器对 SSH 并发连接数有限制,过高可能导致连接被拒绝。检查被管节点 /etc/ssh/sshd_config 中的 MaxStartups 配置。

Ansible 执行速度慢如何开启 fork 多进程优化并发效率?

验证方法

1. 观察执行时间

使用 time 命令包裹 ansible 命令,对比调整前后的总耗时。

time ansible all -m ping

2. 监控控制节点资源

在执行任务期间,使用 top 或 htop 命令观察控制节点的 CPU 和内存使用率。如果资源未满且任务时间缩短,说明优化有效。

# 新开一个终端窗口运行监控
top

3. 逐步调优

不要一次性设置过大。建议从 10 开始,根据控制节点负载逐步增加。如果控制节点出现卡顿或 SSH 连接报错,说明数值过高。

常见坑与排查

  • 控制节点过载:forks 过大会耗尽控制节点内存或 CPU,导致 Ansible 自身崩溃或响应变慢。
  • 文件描述符不足:报错 "Too many open files" 时,需执行 ulimit -n 65535 或修改 /etc/security/limits.conf
  • SSH 连接限制:报错 "Connection refused" 或 "Too many connections" 时,检查被管节点 SSH 服务的 MaxStartups 配置。
  • 远程包管理器锁:如果在远程主机执行 yum 或 apt 安装,高并发可能触发锁等待,反而降低效率。

参考来源

  • Ansible 官方文档 - Configuration Settings (https://docs.ansible.com/ansible/latest/reference_appendices/config.html)
  • Ansible 官方文档 - Command Line Options (https://docs.ansible.com/ansible/latest/cli/ansible.html)