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.yamlPLAY [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.yamlPLAY [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.mzph.cn/web/65312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net core 线程锁,互斥锁,自旋锁,混合锁

线程锁、互斥锁、自旋锁和混合锁是多线程编程中的重要概念&#xff0c;它们用于控制对共享资源的访问&#xff0c;避免数据竞争和不一致性。每种锁有其特定的适用场景和特点。我们来逐一解释它们&#xff0c;并进行比较。 1. 线程锁&#xff08;Thread Lock&#xff09; 线程…

【ArcGISPro/GeoScenePro】检查并处理高程数据

数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 数字高程模型 (DEM) 是一种栅格,可显示地面或地形的高程。 数字表面模型 (DSM) 是另一种高程栅格,可显示表面的高度,例如建筑物或树冠的顶部。 您需要准备 DEM 和 DSM 以供分析…

【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、不同访问属性成员的访问方式 1. public成员 2. private成员 3. protected成员 二、观察构造函数和析构函数的执行过程 1. 构造函数 2. 析构函数 三、学习类的组合使用方法 1. 类的组合概念 2. 实现示例 实验步骤 测试说明 …

xilinx的高速接口构成原理和连接结构及ibert工具的使用-以k7 GTX为例

一、相关简介 Xilinx的高速接口称之为transceivers(高速收发器&#xff09;&#xff0c;这部分的电路是专用电路&#xff0c;供电等都是独立的&#xff0c;根据速率可以分为GTP/GTX/GTH/GTY/GTM等。 Xilinx的高速接口是QUAD为单位的&#xff0c;没一个QUAD由一个时钟COMMON资…

创建型模式4.原型模式

创建型模式 工厂方法模式&#xff08;Factory Method Pattern&#xff09;抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;建造者模式&#xff08;Builder Pattern&#xff09;原型模式&#xff08;Prototype Pattern&#xff09;单例模式&#xff08;Singleto…

python学opencv|读取图像(二十七)使用time()绘制弹球动画

【1】引言 前序已经学习了pythonopencv画线段、圆形、矩形、多边形和文字的相关操作&#xff0c;具体文章链接包括且不限于&#xff1a; python学opencv|读取图像&#xff08;十八&#xff09;使用cv2.line创造线段_cv2. 画线段-CSDN博客 python学opencv|读取图像&#xff0…

rabbitmq——岁月云实战笔记

1 rabbitmq设计 生产者并不是直接将消息投递到queue&#xff0c;而是发送给exchange&#xff0c;由exchange根据type的规则来选定投递的queue&#xff0c;这样消息设计在生产者和消费者就实现解耦。 rabbitmq会给没有type预定义一些exchage&#xff0c;而实际我们却应该使用自己…

2.系统学习-逻辑回归

逻辑回归 前言最大似然估计概率似然函数(likelihood function)最大似然估计 逻辑回归逻辑回归的似然函数与梯度 分类问题常用评价指标项目案例拓展内容作业 前言 逻辑回归与线性回归均属于广义线性模型&#xff0c;区别在于线性回归用于解决回归问题&#xff0c;例如身高、销量…

记录一次电脑被入侵用来挖矿的过程(Trojan、Miner、Hack、turminoob)

文章目录 0、总结1、背景2、端倪3、有个微软的系统更新&#xff0c;就想着更新看看&#xff08;能否冲掉问题&#xff09;4、更新没成功&#xff0c;自动重启电脑5、风险文件&#xff08;好家伙命名还挺规范&#xff0c;一看名字就知道出问题了&#xff09;6、开机有一些注册表…

行为树详解(6)——黑板模式

【动作节点数据共享】 行为树中需要的参数可以来自游戏中的各个模块&#xff0c;如果仅需从多个模块获取少量参数&#xff0c;那么可以直接在代码中调用其他模块的单例继而层层调用获取数据。 如果获取的参数量很大&#xff0c;从架构上看&#xff0c;我们需要通过加一个中间…

阿里云 人工智能与机器学习

阿里云的 人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09; 服务为企业提供了全面的AI解决方案&#xff0c;帮助用户在多个行业实现数据智能化&#xff0c;提升决策效率&#xff0c;推动业务创新。阿里云通过先进的技术和丰富的工具&#xff0c;支持用…

如果Adobe 退出中国后怎么办

最近听说Adobe要退出中国了?那咱们的设计师们可得好好想想怎么搞到正版软件了。别急&#xff0c;今天教大家一个超酷的福利——Edu邮箱&#xff01; Edu邮箱是什么&#xff1f;有什么好处&#xff1f; Edu邮箱就是学校给学生和老师们发的邮箱&#xff0c;一般结尾是.edu。有了…

Structured-Streaming集成Kafka

一、上下文 《Structured-Streaming初识》博客中已经初步认识了Structured-Streaming&#xff0c;Kafka作为目前最流行的一个分布式的实时流消息系统&#xff0c;是众多实时流处理框架的最优数据源之一。下面我们就跟着官方例子来看看Structured-Streaming是如何集成Kafka的&a…

Spring Boot 项目中集成 Kafka-03

在 Spring Boot 项目中集成 Kafka 有多种方式&#xff0c;适应不同的应用场景和需求。以下将详细介绍几种常用的集成方法&#xff0c;包括&#xff1a; 使用 Spring Kafka (KafkaTemplate 和 KafkaListener)使用 Spring Cloud Stream 与 Kafka Binder使用 Spring for Apache K…

生物医学信号处理--绪论

前言 参考书籍&#xff1a;刘海龙&#xff0c;生物医学信号处理&#xff0c;化学工业出版社 生物医学信号分类 1、由生理过程自发或者诱发产生的电生理信号和非电生理信号 • 电生理信号&#xff1a;ECG/心电、EEG/脑电、EMG/肌电、 EGG/胃电、 EOG/眼电 • 非电生理信号&am…

unity 播放 序列帧图片 动画

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、方法一&#xff1a;代码控制播放序列帧1、设置图片属性2、创建Image组件3、简单的代码控制4、挂载代码并赋值 二、方法二&#xff1a;直接使用1.Image上添加…

QT c++ 自定义按钮类 加载图片 美化按钮

如果你有需要利用图片美化按钮的情况&#xff0c;本文能帮助你。 鼠标左键按下按钮和松开&#xff0c;按钮显示不同的图片。 1.按钮类 //因为此类比较简单&#xff0c;1个头文件搞定&#xff0c;没有cpp文件 #ifndef CUSTOMBUTTON_H #define CUSTOMBUTTON_H #include <Q…

web漏洞之文件包含漏洞

一、文件包含漏洞 1、把DVWA页面改为low级别&#xff0c;然后点击File Inclusion页面 文件包含漏洞有四种include()/require()/include_once()/require_once() 常见的文件包含漏洞代码如下 <?php$file$_GET[filename]; filename随意定义include($file); ?> -----…

小程序与物联网(IoT)融合:开启智能生活新篇章

一、引言 随着移动互联网技术的飞速发展&#xff0c;小程序作为一种轻量级的应用形式&#xff0c;凭借其无需下载安装、即用即走的特点&#xff0c;迅速渗透到人们生活的各个领域。与此同时&#xff0c;物联网&#xff08;IoT&#xff09;技术也在不断进步&#xff0c;将各种物…