05-高级调优 (Advanced Optimization)
本章目标: 当你的管理节点从 10 台增加到 1000 台时,默认配置会慢如蜗牛。本章将介绍让 Ansible 飞起来的核心调优技巧。
1. SSH Pipelining (管道加速)
这是提升 Ansible 性能最有效的单一设置。
- 原理:
- 默认模式: SSH 连接 -> SFTP 上传脚本 -> SSH 连接 -> 执行脚本 -> 删除脚本 (多次网络 IO)。
- Pipelining: 建立一个 SSH 会话,直接通过管道 (
|) 将 Python 脚本输入到远程解释器执行。减少了 SFTP 连接和文件写入开销。
- 配置 (
ansible.cfg): - 前提条件: 目标机的
/etc/sudoers配置中不能有requiretty(现代 Linux 发行版默认通常没有)。
2. 并发控制 (Forks)
Ansible 默认一次只操作 5 台主机 (forks = 5)。对于大集群,这太保守了。
- 优化: 根据控制节点的 CPU 核心数,适当调大。
- 注意: 内存消耗会随之增加。
3. 关闭 Facts 收集 (Gathering Facts)
每次 Playbook 运行前,Ansible 都会像查户口一样收集目标机的 OS、IP、磁盘等信息。这非常耗时。
- 策略 1: 显式关闭: 如果你的 Playbook 不依赖
ansible_os_family等变量,直接关掉。 - 策略 2: Facts 缓存 (Smart Gathering): 收集一次,缓存 24 小时 (Redis/JSON)。
4. SSH ControlPersist (长连接)
复用 SSH 连接,避免每次执行 Task 都重新进行 TCP 握手和密钥交换。
- 配置:
- 效果: 第一次连接慢,后续命令秒级响应。
5. 针对大规模集群的 Mitogen
Mitogen 是一个第三方 Python 库,完全重写了 Ansible 的通信层。 * 效果: CPU 占用降低 50%,执行速度提升 2-7 倍。 * 适用场景: 拥有数千台服务器的超大规模环境。
调优效果对比表
| 优化手段 | 适用场景 | 预期提升 | 风险 |
|---|---|---|---|
| Pipelining | 通用 | ⭐⭐⭐⭐⭐ | 需检查 sudoers |
| Forks | 主机数 > 10 | ⭐⭐⭐⭐ | 内存消耗增加 |
| Fact Caching | 频繁运行 | ⭐⭐⭐ | 数据可能过期 |
| ControlPersist | 连续 Tasks 多 | ⭐⭐⭐⭐ | 无 |