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、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流 !

相关文章:
ansible-性能优化
一. 简述: 搞过运维自动化工具的人,肯定会发现很多运维伙伴们经常用saltstack和ansible做比较,单从执行效率上来说,ansible确实比不上saltstack(ansible使用的是ssh,salt使用的是zeromq消息队列[暂没深入了解]),但其实…...
高等数学学习笔记 ☞ 一元函数微分的基础知识
1. 微分的定义 (1)定义:设函数在点的某领域内有定义,取附近的点,对应的函数值分别为和, 令,若可以表示成,则称函数在点是可微的。 【 若函数在点是可微的,则可以表达为】…...
前后端实现防抖节流实现
在前端和 Java 后端中实现防抖(Debounce)和节流(Throttle)主要用于减少频繁请求或事件触发对系统的压力。前端和后端的实现方式有些不同,以下是两种方法的具体实现: 1. 前端实现防抖和节流 在前端中&…...
【笔记】算法记录
1、求一个数的素因子(试除法) // 获取一个数的所有素因子 set<int> getPrimeFactors(int num) {set<int> primeFactors;for (int i 2; i * i < num; i) {while (num % i 0) {primeFactors.insert(i);num / i;}}if (num > 1) {prime…...
【网络云SRE运维开发】2025第2周-每日【2025/01/08】小测-【第8章 STP生成树协议】理论和实操解析
文章目录 一、选择题二、理论题三、实操题 【网络云SRE运维开发】2025第2周-每日【2025/01/08】小测-【第8章 STP生成树协议】理论和实操解析 一、选择题 生成树协议的主要作用是 B. 防止网络环路解释:生成树协议(STP)的主要目的是防止网络中…...
git push -f 指定分支
要将本地代码推送到指定的远程分支,你可以使用以下步骤和命令: 确认远程仓库: 确保你的本地仓库已经与远程仓库关联。你可以使用以下命令查看当前的远程仓库状态: git remote -v查看本地分支: 使用命令查看当前存在的本…...
CTF知识点总结(二)
异或注入:两个条件相同(同真或同假)即为假。 http://120.24.86.145:9004/1ndex.php?id1^(length(union)!0)-- 如上,如果union被过滤,则 length(union)!0 为假,那么返回页面正常。 2|0updatexml() 函数报…...
解决Edge打开PDF总是没有焦点
【问题描述】 使用Edge浏览器作为默认PDF阅读器打开本地PDF文件,Edge窗口总是不获得焦点,而是在任务栏以橙色显示,需要再手动点击一次才能查看文件内容。 本强迫症来治一治这个问题! 【解决方法】 GPT老师指出问题出在Edge的启动…...
69.基于SpringBoot + Vue实现的前后端分离-家乡特色推荐系统(项目 + 论文PPT)
项目介绍 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括家乡特色推荐的网络应用,在外国家乡特色推荐系统已经是很普遍的方式,不过国内的管理网站可能还处于起步阶段。家乡特色推荐系统采用java技术&…...
计算机视觉目标检测-DETR网络
目录 摘要abstractDETR目标检测网络详解二分图匹配和损失函数 DETR总结总结 摘要 DETR(DEtection TRansformer)是由Facebook AI提出的一种基于Transformer架构的端到端目标检测方法。它通过将目标检测建模为集合预测问题,摒弃了锚框设计和非…...
《自动驾驶与机器人中的SLAM技术》ch1:自动驾驶
目录 1.1 自动驾驶技术 1.2 自动驾驶中的定位与地图 1.1 自动驾驶技术 1.2 自动驾驶中的定位与地图 L2 在技术实现上会更倾向于实时感知,乃至可以使用感知结果直接构建鸟瞰图(bird eye view, BEV),而 L4 则依赖离线地图。 高精地…...
【UE5 C++课程系列笔记】23——多线程基础——AsyncTask
目录 概念 函数说明 注意事项 (1)线程安全问题 (2)依赖特定线程执行的任务限制 (3)任务执行顺序和时间不确定性 使用示例 概念 AsyncTask 允许开发者将一个函数或者一段代码逻辑提交到特定的线程去执…...
基于Python的音乐播放器 毕业设计-附源码73733
摘 要 本项目基于Python开发了一款简单而功能强大的音乐播放器。通过该音乐播放器,用户可以轻松管理自己的音乐库,播放喜爱的音乐,并享受音乐带来的愉悦体验。 首先,我们使用Python语言结合相关库开发了这款音乐播放器。利用Tkin…...
cursor vip
https://cursor.jeter.eu.org?pf7f4f3fab0af4119bece19ff4a4360c3 可以直接复制命令使用git bash执行即可 命令: bash <(curl -Lk https://gitee.com/kingparks/cursor-vip/releases/download/latest/ic.sh) f7f4f3fab0af4119bece19ff4a4360c3 等待执行完成后…...
Docker部署项目,Mysql数据库总是宕机并且上传数据全部被删除了
刚开始排查原因我以为是一些内存占用问题的原因,后来查看数据库日志发现有多个异常ip尝试连接数据库并且也连接成功了随后数据库就被异常关闭了,然后我就重启容器远程连接数据库发现数据全没了,又在数据库中找到了如下内容: All y…...
C++ 复习总结记录六
C 复习总结记录六 模板初阶主要内容 1、泛型编程 2、函数模板 3、类模板 4、STL 简介 一 泛型编程 如何实现一个通用的交换函数 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right…...
spring boot 集成 knife4j
1、knife4j介绍以及环境介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!其底层是对Springfox的封装,使用方式也和Springfox一致,只是对接口…...
WordPress静态缓存插件WP Super Cache与 WP Fastest Cache
引言 WordPress是一款开源的内容管理系统(CMS),最初作为博客平台开发,现已发展成为一个功能强大的建站工具,支持创建各种类型的网站,包括企业网站、在线商店、个人博客等。它具有用户友好的界面、丰富的插…...
Pytest钩子函数,测试框架动态切换测试环境
在软件测试中,测试环境的切换是个令人头疼的问题。不同环境的配置不同,如何高效切换测试环境成为许多测试开发人员关注的重点。你是否希望在运行测试用例时,能够动态选择测试环境,而不是繁琐地手动修改配置? Pytest 测…...
VUE3封装一个Hook
在 Vue 3 中,Composition API 让我们能够封装和复用代码逻辑,尤其是通过 setup 函数进行组件间的复用。为了提高代码的可复用性,我们可以把一些常见的 API 请求和状态管理逻辑封装到一个单独的 hook 中。 以下是一个简单的例子,我…...
前端加密的隐秘陷阱:Crypto-JS与JSEncrypt常见误用与解决方案
前端加密的隐秘陷阱:Crypto-JS与JSEncrypt常见误用与解决方案 1. 密钥管理的致命疏忽 在项目评审中,我经常发现开发者将加密密钥直接硬编码在JavaScript文件里。这种看似方便的做法实际上让加密形同虚设——攻击者只需查看源代码就能获取密钥,…...
IndexTTS-2-LLM功能全解析:不仅能用,还这么好用!
IndexTTS-2-LLM功能全解析:不仅能用,还这么好用! 1. 引言:为什么选择IndexTTS-2-LLM? 想象一下,你正在制作一个有声读物,需要把大量文字转换成自然流畅的语音。传统语音合成工具生成的机械音让…...
JPG文件结构解析:从WinHex十六进制数据到实际图片属性的完整指南
JPG文件结构解析:从WinHex十六进制数据到实际图片属性的完整指南 当你用手机拍下一张照片,或是从网上下载一张图片时,这些JPG文件背后隐藏着怎样的数据结构?对于开发者、安全研究人员和逆向工程师来说,理解JPG文件的底…...
PHP 8.9原生异步I/O终极调优清单(含12项基准测试指标、9类典型负载适配矩阵)
第一章:PHP 8.9原生异步I/O的核心演进与设计哲学PHP 8.9并未实际发布——截至2024年,PHP官方最新稳定版本为PHP 8.3,且PHP核心开发团队已明确表示**不会在PHP 8.x系列中引入原生异步I/O运行时**。该标题所指的“PHP 8.9”属于虚构版本&#x…...
信号发生器与示波器阻抗匹配:为什么测量结果与预期不符?
1. 信号发生器与示波器的阻抗匹配基础 第一次用示波器测量信号发生器输出时,我盯着屏幕上的波形愣住了——明明设置了1V峰峰值,为什么示波器显示的是2V?这个问题困扰了我整整一个周末,直到弄明白阻抗匹配的原理才恍然大悟。 信号发…...
台达PLC与C#串口通信实时监控:XML配置监控地址,控件自动生成读写同步操作
台达plc与C#串口通信程序,可同步读写操作,实时监控。 监控地址通过xml文件配置,控件自动生成。折腾工控通信的老铁们肯定都遇到过这问题——PLC和上位机要实时互传数据还得保证不卡顿。今天咱们就用C#和台达PLC的串口通信来盘一盘这个需求&am…...
从模型下载到API服务:手把手教你用MS-Swift+VLLM部署Qwen2.5-VL,打造自己的图像理解服务
从模型下载到API服务:手把手教你用MS-SwiftVLLM部署Qwen2.5-VL,打造自己的图像理解服务 在人工智能技术快速发展的今天,多模态大模型正逐渐成为理解和处理图像、文本等复杂数据的关键工具。Qwen2.5-VL作为一款强大的视觉语言模型,…...
EF Core 拦截器实战:SaveChangesInterceptor、CommandInterceptor 与审计落地衷
一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...
3分钟解决魔兽争霸3卡顿难题:WarcraftHelper优化工具全攻略
3分钟解决魔兽争霸3卡顿难题:WarcraftHelper优化工具全攻略 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 您是否也曾在重温《魔兽争霸3》…...
8.8 万赋能光伏新局!一网推助伍征新能源实现询盘零的突破
近日,江苏一网推网络技术有限公司(以下简称 “一网推”)与昆山伍征新能源有限公司(以下简称 “伍征新能源”)的百度爱采购代运营合作案例落地,成为光伏行业数字化转型的标杆。双方合作金额达 88700 元&…...
