ansible基础-优化
[ansible基础-优化]
转载自()
简介
当管理集群达到一定规模时,ansible达到性能瓶颈是难以避免的,此时我们可以通过一定手段提高ansible的执行效率和性能。
笔者虽未管理过超大规模服务器,但也通过查找资料和咨询大神了解了一些。现总结一些调优方法,供大家参考。
Pipelinling
我们知道ansible执行一个模块要ssh到目的主机多次,开启「pipelining」特性实际上是通过减少ssh连接次数,从而缩短ansible执行时间。在部署大规模服务器或引用模块非常多时,开启「pipelining」特性会给ansible带来显著的性能提升。
开启方法也很简单,,该参数默认值是False。
既然「pipelining」特性默认是关闭的,肯定有它的理由:关闭该特性可以与sudo的requiretty兼容(即/etc/sudoers配置文件的「Defaults requiretty」配置项)。大部分linux操作系统是默认开启requiretty功能的,所以pipelining也是默认False的。
也就是说,如果我们要开启pipelining特性,要么playbook不使用sudo越权功能,要么取消sudo的「requiretty」特性。
该特性可以通过命令行添加 -vvvv 后,根据执行结果对比出区别,因篇幅原因这里不再展示。
适用场景
管理大规模集群
部署代码内容很多,调用了大量的ansible模块
Control_path
control_path通过设置ControlPath sockets的文件路径与文件命名避免因sockets文件过长(超过108个字符串)导致ansible报错的问题。
,「配置项control_path_dir的值」+「根据hostname生成的哈希值」+「ssh端口号」+「用户名」
在ansible旧版本中,默认值是包含主机名的,这在一些特殊情况下(例如EC2主机),会因主机名过长导致ControlPath sockets文件过长,从而导致ansible执行报错。但在新版本中默认值的主机名部分被替换为主机名的哈希值,这很大程度上避免了该问题的发生。
我们也可以设置其他的参数,例如:
control_path = %(directory)s/%%h-%%r
其中$directiry是control_path_dir的值,后面的参数可以灵活定制,可用参数如下:
复制代码
%L 本地主机名的第一个组件
%l 本地主机名(包括域名)
%h 远程主机名(命令行输入)
%n 远程原始主机名
%p 远程主机端口
%r 远程登录用户名
%u 本地 ssh 正在使用的用户名
%i 本地 ssh 正在使用 uid
%C 值为 %l%h%p%r
ansible技术基础-优化 来自淘豆网www.taodocs.com转载请标明出处.