Ansible之優化提升執行效率


今天分享一下Ansible在工作環境中有那些可以優化的配置

環境介紹:以前在公司工作處理服務器問題,需要用批量操作都是用shell腳本編寫的工具,后來發現Ansible這個自動化工具,安裝簡單,操作起來很方便,支持多個模塊,由python開發基於SSH協議通信的工具。這里有個問題就是如果服務器越來越多,Ansibe執行效率會變得比較慢,可以通過優化Ansible提供工作效率,具體優化的方法如下:

線上管理機器:操作系統Linux,cpu為4核,內存8G,用這個機器管理上千台Linux服務器都沒有太大壓力

1.修改ansible的並發數
Ansible默認只會創建5個進程並發執行任務,所以一次任務只能同時控制5台機器執行。如果有大量的機器需要控制,例如20台,Ansible執行一個任務時會先在其中5台上執行,執行成功后再執行下一批5台,直到全部機器執行完畢。使用-f選項可以指定進程數,指定的進程數量多一些,不僅會實現全並發,對異步的輪訓poll也會有正面影響。
#forks  = 60

2.關閉ansible的SSH密鑰檢測

ansible默認是以ssh來實現遠程推送執行的,是基於ssh秘鑰檢測,會檢測遠程主機的公鑰,並記錄在本地中known_host文件中,下次訪問主機時,會核對公鑰,如果公鑰不同,openssh會發出警告,如果相同,會提示輸入密碼
SSH對主機的public_key的檢查等級是根據StrictHostKeyChecking變量來設定的,StrictHostKeyChecking檢查級別包括:no(不檢查)、ask(詢問)、yes(每次都檢查)、False(關閉檢查)。
#vim /etc/ansible/ansible.cfg 
host_key_checking = False #關閉StrictHostKeyChecking檢查 默認是關閉的

3.openssh鏈接優化

使用OpenSSH服務時,默認服務器端配置文件UseDNS=YES狀態,該選項會導致服務器根據客戶端的IP地址進行DNS PTR反向解析,得到客戶端的主機名,然后根據獲取到的主機名進行DNS正向A記錄查詢,並驗證該IP是否與原始IP一致。關閉DNS解析代碼如下:
sed -i '/^GSSAPI/s/yes/no/g;/UseDNS/d;/Protocol/aUseDNS no' /etc/ssh/sshd_config
4.ssh pipelining加速ansible

pipeline是openssh的一個特性,ssh pipelining 是一個加速Ansible執行速度的簡單方法。
在ansible執行每個任務的整個流程中,有一個過程是將臨時任務文件put到遠程的ansible客戶機上,然后通過ssh連接過去遠程執行這個任務。
如果開啟了pipelining,一個任務的所有動作都在一個ssh會話中完成,也會省去sftp到遠端的過程,它會直接將要執行的任務在ssh會話中進行。
ssh pipelining 默認是關閉!!!!之所以默認關閉是為了兼容不同的sudo 配置,主要是 requiretty 選項。如果不使用sudo,建議開啟!!!
打開此選項可以減少ansible執行沒有傳輸時ssh在被控機器上執行任務的連接數。
不過,如果使用sudo,必須關閉requiretty選項。修改/etc/ansible/ansible.cfg 文件可以開啟pipelining

sed -i '/^pipelining/s/False/True/g' /etc/ansible/ansible.cf
5.Ansible Facts緩存優化
Ansible-playbook 在執行過程中,默認會執行Gather facts,如果不需要獲取客戶端的fact數據的話,可以關閉獲取fact數據功能,關閉之后可以加快ansible-playbook的執行效率。如需關閉fact功能,在playbook yaml文件中加入如下代碼即可:
gather_facts: False


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM