Ansible事实缓存通过本地或远程存储ansible_facts,避免重复SSH连接和setup执行,将“Gathering Facts”从秒级降至毫秒级;推荐jsonfile后端配smart模式,辅以合理超时与手动刷新机制。

在 Linux 中用 Ansible 的事实缓存(Fact Caching)加速执行,核心是避免每次运行都重复 SSH 登录、执行 setup 模块、解析系统信息。尤其当管理几十台甚至上百台主机时,跳过这一步能将“Gathering Facts”任务从秒级降到毫秒级。
选择合适缓存后端
中小规模集群推荐 jsonfile:无需额外服务,文件结构清晰,便于排查和清理。
- 编辑
/etc/ansible/ansible.cfg或项目级ansible.cfg - 添加以下配置:
[defaults] fact_caching = jsonfile fact_caching_connection = /tmp/ansible_facts fact_caching_timeout = 3600
- 确保目录存在且可写:
mkdir -p /tmp/ansible_facts && chmod 755 /tmp/ansible_facts - 缓存文件按主机名生成,如
/tmp/ansible_facts/web01,可直接查看或手动删除
控制 facts 收集行为
缓存生效的前提是实际触发了 facts 收集。Ansible 提供三种收集模式,通过 gathering 参数控制:
- smart(推荐):默认收集,但若缓存未过期则直接读取,不走远程;适合大多数场景
-
implicit:始终默认收集,除非显式设
gather_facts: false -
explicit:默认不收集,必须写
gather_facts: true才触发
可在 playbook 中按需覆盖:gather_facts: true 或 gather_facts: false。完全不需要 facts 时,直接关闭最省时。
按需刷新与调试缓存
缓存不是一劳永逸的,需配合业务节奏主动管理:
- 强制跳过缓存、重新收集:运行时加
-e ansible_fact_cache=False - 只刷新某台主机:删除对应缓存文件,例如
rm /tmp/ansible_facts/db02 - 清空全部缓存:
rm -f /tmp/ansible_facts/* - 验证是否命中缓存:观察执行日志中 “Gathering Facts” 是否显示
ok(缓存命中)而非changed(重新收集)
进阶:用 Redis 提升并发性能
当主机数超 200 台或需要多控制节点共享缓存时,redis 后端更可靠:
- 安装并启动 Redis:
yum install -y redis && systemctl enable --now redis - 修改
ansible.cfg:fact_caching = redis fact_caching_connection = 127.0.0.1:6379:0 fact_caching_timeout = 7200
- 注意开放 Redis 监听地址(如需远程访问),并确认防火墙放行 6379 端口











