Ansible 优化
Ansible 优化
Ansible 优化
开启 SSH 长连接
开启 Pipelining
开启 Accekerate 模式
设置 Facts 缓存
开启 SSH 长连接
Ansible 是使用 SSH 和远端主机进行通信,Ansible 对 SSH 的依赖性非常强,SSH 5.6+ 版本可以配置 Multiplexing 设置长连接。用兴趣请看 官方文档 参数:
sh_args = -o ControlMaster=auto -o ControlPersist=5d
设置整个长连接保持设置为 5,如果通过 SSH 连接后,会在当前 ansible/cp 目录下生成一个 socket 文件,此配置需要在 ansible.cfg 中设置 SSH 项里配置。
开启 Pipelining
Pipeliing 也是 OpenSSH 的一个特性,传输文件时将会在 SSH 会话中进行,开启 pipelining 需要控制机 /etc/sudoers 文件编辑当前 Ansible SSH 用户的配置为 requiretty,否则会报错,首先在 ansible.cfg 配置文件中设置 pipelining 为 True,下面进行一项测试:
pipelining = True
未开启 piplining 之前:
开启之后 piplining :
可以看到之后整个流程少了一个 PUT 脚本去远端服务器的流程。
开启 Accekerate 模式
Ansible 还有一个 accelerate 模式,这和前面 SSH 的 Multiplexing 有点类似,Ansible 依赖中控机跟远程机器有一个长连接,但是 accelerate 是使用 Python 程序在远程机器上运行的一个守护进程,然后 Ansible 会通过这个守护进程监听的端口进行通信,开启 accelerate 模式很简单,只要在 playbook 中 配置 accelerate:true 即可。但是需要注意,如果开启 accelerate 模式,需要在 Ansible 中控机与远程机器都安装 python-keyczar 软件包,且需要通过 ansible.cfg 进行参数这是,如远程机器的端口及 timeout 设置:
[accelerate]
accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0
可以观看 源码文件 ,可以参考 debug 参数 -vvvv 进行流程的查看。
设置 Facts 缓存
在执行的所以 Playbook 的时候,默认的第一个 task 都是 GATGERING FACTS ,这个过程就是 Ansible 收集每台主机的 Facts 信息,方便在 Playbook 中直接引用 Facts 里的信息,如果需要要 Facts 信息,可以直接在 Playbook 中这是 gather_facts: False 提提高 Playbook 效率。如果想对其进行收集,又想加速需要使用 Facts 缓存,目前 Ansible 支持使用 JSON 文件存储 Facts 信息,案例:
gathering = smart
fact_caching_timeout = 86400
fact_caching = jsonfile
fact_caching_connection = /dev/shm/ansible_fact_cache
这里设置 facts 过期时间为 86400 秒,JSON 文件放在 /dev/shm/ansible_fact_cache 下,如果执行 Playbook 会在目录下生成对应主机 IP 的 JSON 格式信息,可以使用 python -m json.tool 文件内容。
Facts 可以支持 redis 和 memcached 存储,但是只能在本地实现,不支持远端,只需要把 fact_caching 参数改为 redis 或者 memcached 即可。