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.pswp.cn/web/65312.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65312.shtml
英文地址,請注明出處:http://en.pswp.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;將各種物…