当前位置: 首页 > article >正文

ansible-性能优化

一. 简述:

  

搞过运维自动化工具的人,肯定会发现很多运维伙伴们经常用saltstack和ansible做比较,单从执行效率上来说,ansible确实比不上saltstack(ansible使用的是ssh,salt使用的是zeromq消息队列[暂没深入了解]),但其实ansible还是可以通过一些方面进行优化的,并且优化后的效率应不差salt太多。

二. 优化配置:

    参考了一些资料,可优化以下方面:

   1. 开启ssh长连接:

       所谓的长连接,指的是,在第一次认证进入会话后,保持连接,直到认证时间到期(这样就节省了每次连接时的认证时间)。ssh的长连接时再OpenSSH 5.6版本以后才支持的,故如果版本不够的话,想开启长连接的话需要升级,配置ansible的ssh 长连接方法如下:

     编辑ansible配置文件修改以下参数:

ssh_args = -o ControlMaster=auto -o ControlPersist=2d    #这里设置保持长连接的时间为2天

开启后会在当前ansible/cp/下生成一个socket文件(也可通过netstat ,会有一个ESTABLISHED状态连接)。

  2.开启pipelining:

     这个功能,目前还没有研究明白, 官方也只提了下是openssh的一个管道特性,可以减少远程操作的次数。开启pipelining需要被操作主机/etc/sudoers中的ansible ssh 用户配置改为requiretty,我这边使用kerberos认证的,暂未遇到问题,修改ansible配置如下:

pipelining = True

配置前执行过程:

$ ansible test -a 'hostname' -vvv
Using /etc/ansible/ansible.cfg as config file
<BJCER11-18.opi.com> ESTABLISH SSH CONNECTION FOR USER: None
<BJCER11-18.opi.com> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=1d -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/data/web/.ansible/cp/ansible-ssh-%h-%p-%r BJCER11-18.opi.com '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1467023977.89-116243253485818 `" && echo ansible-tmp-1467023977.89-116243253485818="` echo $HOME/.ansible/tmp/ansible-tmp-1467023977.89-116243253485818 `" ) && sleep 0'"'"''
<BJCER11-18.opi.com> PUT /tmp/tmpY2uNkb TO /data/web/.ansible/tmp/ansible-tmp-1467023977.89-116243253485818/command
<BJCER11-18.opi.com> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=1d -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/data/web/.ansible/cp/ansible-ssh-%h-%p-%r '[BJCER11-18.opi.com]'
<BJCER11-18.opi.com> ESTABLISH SSH CONNECTION FOR USER: None
<BJCER11-18.opi.com> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=1d -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/data/web/.ansible/cp/ansible-ssh-%h-%p-%r -tt BJCER11-18.opi.com '/bin/sh -c '"'"'LANG=en_US.utf-8 LC_ALL=en_US.utf-8 LC_MESSAGES=en_US.utf-8 /usr/bin/python /data/web/.ansible/tmp/ansible-tmp-1467023977.89-116243253485818/command; rm -rf "/data/web/.ansible/tmp/ansible-tmp-1467023977.89-116243253485818/" > /dev/null 2>&1 && sleep 0'"'"''
BJCER11-18.opi.com | SUCCESS | rc=0 >>
BJCER11-18.opi.com

配置后执行过程:

$ ansible test -a 'hostname' -vvv 
Using /etc/ansible/ansible.cfg as config file
<BJCER11-18.opi.com> ESTABLISH SSH CONNECTION FOR USER: None
<BJCER11-18.opi.com> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=1d -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/data/web/.ansible/cp/ansible-ssh-%h-%p-%r BJCER11-18.opi.com '/bin/sh -c '"'"'LANG=en_US.utf-8 LC_ALL=en_US.utf-8 LC_MESSAGES=en_US.utf-8 /usr/bin/python && sleep 0'"'"''
BJCER11-18.opi.com | SUCCESS | rc=0 >>
BJCER11-18.opi.com

可发现,确实是精简了操作次数(意味着操作时间的缩短,所以:如没特殊需求,建议开启pipelining)!

3. accelerate模式(1.3版本后):

    ansible有一个accelerate(加速)模式,类似于ssh的multiplexing(a中描述),都依赖于ansible控制机和被控制机直接的长连接,区别在于accelerate是使用python在被控制机上运行一个守护进程,通过监听的端口进行通信,需要在控制主机和被控制主机上安装python-keyczar工具,开启ansible的accelerate模式,只需要在playbook中配置:

accelerate: true

还需要在ansible.cfg中定义相关参数,如:

[accelerate]
accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0

4. 配置facts信息缓存:

   在使用playbook时,默认会采集每台被操作主机的facts信息,但不需要采集的信息时,可通过一下参数关闭:

gather_facts: False
但如果需要时,并且对数据的实时性要求不高时,可配置facts信息缓存机制,ansible支持使用json文件存储facts信息,使用缓存需修改以下配置(ansibe.cfg):
gathering = smart
fact_caching_timeout = 86400    #cache过期时间
fact_caching = jsonfile    
fact_caching_connection=/tmp/ansible_fact_cache  #cache存放路径

具体执行区别:

  a). 先不配置cache,执行如下:

# time ansible-playbook bbb.yaml

PLAY [test2] *******************************************************************

TASK [setup] *******************************************************************
ok: [10.5.11.11]

TASK [req value] ***************************************************************
changed: [10.5.11.11]

TASK [copy nginx.conf] *********************************************************
ok: [10.5.11.11] => {
......................................

real    0m4.345s
user    0m1.363s
sys     0m0.281s

b). 开启后执行(第2次):

# time ansible-playbook bbb.yaml

PLAY [test2] *******************************************************************

TASK [req value] ***************************************************************
changed: [10.5.11.11]

TASK [copy nginx.conf] *********************************************************
ok: [10.5.11.11] => {
.........................................

real    0m1.019s
user    0m0.618s
sys     0m0.149s

可发现时间大量缩短(过程中没有TASK [setup]这一步)

 ----------------------------------------------------------------------------------------------

深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流 !


http://www.kler.cn/a/468877.html

相关文章:

  • 【简博士统计学习方法】3. 统计学习方法的三要素
  • 前端(十二)jquery(2)
  • 产品经理-竞品分析
  • element-ui 2的级联选择器,回显已存储的子选项名称
  • OpenKit 介绍
  • 国产编辑器EverEdit - 两种删除空白行的方法
  • 了解RabbitMQ:强大的开源消息队列中间件
  • 【可实战】Bug的判定标准、分类、优先级、定位方法、提交Bug(包含常见面试题)
  • Go语言的 的注解(Annotations)基础知识
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 4:MHE表示能力
  • 我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习
  • Go语言的 的编程环境(programming environment)基础知识
  • CBAM (Convolutional Block Attention Module)注意力机制详解
  • Docker-Compose安装和使用
  • 联发科MTK6771/MT6771安卓核心板规格参数介绍
  • 曲靖郎鹰金属构件有限公司受邀出席第十七届中国工业论坛
  • vulnhub——Earth靶机
  • 单片机-LED实验
  • 【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)
  • 数据分析思维(八):分析方法——RFM分析方法
  • php反序列化 触发的魔术方法 原理 pop链构造 ctfshow 练习
  • UML之发现用例
  • 【Blackbox Exporter】prober.Handler源码详细分析
  • 缓存-文章目录
  • Qt 5.14.2 学习记录 —— 일 新项目
  • python:多线程 简单示例