Ansible网络优化核心是减少重复传输、压缩数据、复用SSH连接、控制并发节奏。启用ControlMaster实现连接复用,ssh_args配置-C和ControlPersist,结合checksum校验、禁用冗余facts、合理设置fork数与异步任务。

Ansible 控制节点本身不长期占用带宽,真正影响网络资源的是任务执行过程中的 SSH 传输、文件复制(如 copy、template 模块)、日志回传和并发连接数。优化核心是减少重复传输、压缩数据、复用连接、控制并发节奏——而不是单纯“限速”。
启用 SSH 连接复用(最关键)
每次任务默认新建 SSH 连接,大量小文件或高频任务会引发频繁 TCP 握手和密钥交换,显著增加往返延迟和带宽开销。开启 ControlMaster 可让多个 Ansible 任务共享同一个底层 SSH 连接:
- 确认控制机 OpenSSH 版本 ≥ 5.6:
ssh -V - 在
/etc/ansible/ansible.cfg中设置:ssh_args = -C -o ControlMaster=auto -o ControlPersist=600
其中-C启用压缩,ControlPersist=600表示空闲 10 分钟后自动断开(单位秒),避免长连接堆积 - 无需重启服务,下次执行
ansible命令即生效;可用ss -nt | grep :22查看复用连接数量
压缩传输内容
对大文件或文本类操作(如部署配置、推送脚本),开启 SSH 级压缩可降低实际传输字节数:
- 已在上一步
ssh_args中加入-C参数,全局生效 - 若仅对特定任务压缩,可在 playbook 中指定:
vars:<br> ansible_ssh_extra_args: "-C"
- 注意:CPU 较弱的控制机慎用过度压缩;纯二进制文件(如已压缩包、镜像)压缩收益低,甚至可能略增体积
减少冗余数据传输
避免反复推送相同内容,尤其在循环或多次运行 playbook 时:
- 用
copy模块时加checksum判断:Ansible 会先比对远程文件 SHA256,仅当不一致才传输 - 静态文件尽量托管到内部 HTTP 服务(如 nginx),用
get_url模块下载,避免由控制机中转 - 禁用不必要的 fact 收集:
gather_facts: false(若 playbook 不依赖ansible_*变量)
或精细控制:gather_subset: !all+ 显式列出需要的子集(如network,hardware)
调优并发与异步策略
高 fork 数(-f)虽加快整体耗时,但会在短时间内集中发起多路 SSH 连接和数据流,易触发带宽峰值或被防火墙限速:
- 根据目标网络带宽和被控机负载调整
-f值,例如千兆局域网可设-f 20,跨公网建议-f 5~10 - 对耗时长、不需即时反馈的任务(如大包安装、日志归档),改用异步模式:
async: 3600<br>poll: 10
这样控制机只发一次指令就返回,不持续占用连接和带宽等待结果 - 避免在单个 play 中混合高带宽(如
copy)和低带宽(如command)任务;拆分为独立 play,便于分批调度


















