1. 程式人生 > >【Ansible】3個讓Ansible效能飛起的簡單優化方案!

【Ansible】3個讓Ansible效能飛起的簡單優化方案!

現狀:

在使用 Ansible 的過程中,當管理的伺服器數量增加時,不得不面對一個無法避免的問題執行效率慢,這裡列出一些解決方案。

 

一、gathering facts優化前的準備—收集資料

在做效能優化之前首先需要做的是收集一些統計資料,這樣才能為後面做的效能優化提供資料支援,對比優化前後的結果。非常不錯的是,在 github 發現一個 Ansible 任務計時外掛“ansible-profile”,安裝這個外掛後會顯示 ansible-playbook 執行每一個任務所花費的時間。Github 地址:https://github.com/jlafon/ansible-profile

。 這個外掛安裝很簡單,只需要簡單的三個命令即可完成安裝。在你的 playbook 檔案的目錄下建立一個目錄,目錄名 callback_plugins 然後將下載的 profile_tasks.py 檔案放到該目錄下。

cd /etc/ansible 
mkdir callback_plugins 
cd callback_plugins 
wget https://raw.githubusercontent.co ... ns/profile_tasks.py


現在,執行 ansible-playbook 命令就會看到 playbook 中每個 tasks 的用時情況。

圖 1.ansible-playbook tasks 用時情況

在這裡,我設定了 2 個 task,1 個 task sleep 10 秒,另 1 個 task sleep 15 秒,在 PLAY RECAP 處會彙總所有 task 執行消耗的時間。

 

關閉 gathering facts

如果您觀察過 ansible-playbook 的執行過程中,您會發現 ansible-playbook 的第 1 個步驟總是執行 gather facts,不論你有沒有在 playbook 設定這個 tasks。如果你不需要獲取被控機器的 fact 資料的話,你可以關閉獲取 fact 資料功能。關閉之後,可以加快 ansible-playbook 的執行效率,尤其是你管理很大量的機器時,這非常明顯。關閉獲取 facts 很簡單,只需要在 playbook 檔案中加上“gather_facts: no”即可。如下

--- 
- hosts: 172.16.64.240 
gather_facts: no 
remote_user: liheng 
sudo: yes 
roles: 
- {role: profile_test}

好的,來看關閉前後的執行時間變化。


圖 2. (樂維環境)關閉 gather_facts 前後的執行變化

關閉前後,執行時間相關 1 秒,因為我這裡只有一臺機器,所以時間差距並不是很明顯。不過,從這個例子也可以看出,關閉 facts 獲取後,執行速度是快了的。

 

二、SSH PIPElinING

SSH pipelining 是一個加速 Ansible 執行速度的簡單方法。ssh pipelining 預設是關閉,之所以預設關閉是為了相容不同的 sudo 配置,主要是 requiretty 選項。如果不使用 sudo,建議開啟。開啟此選項可以減少 ansible 執行沒有傳輸時 ssh 在被控機器上執行任務的連線數。不過,如果使用 sudo,必須關閉 requiretty 選項。修改 /etc/ansible/ansible.cfg 檔案可以開啟 pipelining

pipelining=False

修改為

pipelining=True

修改完後,可以批量對機器執行命令試下,可以明顯感受到速度的提升。

 

三、ControlPersist

ControlPersist 特性需要高版本的 SSH 才支援,CentOS 6 預設是不支援的,如果需要使用,需要自行升級 openssh。ControlPersist 即持久化 socket,一次驗證,多次通訊。並且只需要修改 ssh 客戶端就行,也就是 Ansible 機器即可。

升級 openssh 的過程這裡不做介紹。這裡只介紹下 ControlPersist 設定的辦法。

cat ~/.ssh/config 
Host * 
Compression yes 
ServerAliveInterval 60 
ServerAliveCountMax 5 
ControlMaster auto 
ControlPath <a href="mailto:~/.ssh/sockets/%[email protected]%25h-%25p"><code>~/.ssh/sockets/%[email protected]%h-%p</code></a>
ControlPersist 4h

在開啟了 ControlPersist 特性後,SSH 在建立了 sockets 之後,節省了每次驗證和建立的時間。在網路狀況不是特別理想,尤其是跨網際網路的情況下,所帶來的效能提升是非常可觀的。有這邊需求的,試試就知道了。


轉自
3個讓Ansible效能飛起的簡單優化方案!
(出處: 樂維論壇