【Ansible】3個讓Ansible效能飛起的簡單優化方案!
現狀:
在使用 Ansible 的過程中,當管理的伺服器數量增加時,不得不面對一個無法避免的問題執行效率慢,這裡列出一些解決方案。
一、gathering facts優化前的準備—收集資料
在做效能優化之前首先需要做的是收集一些統計資料,這樣才能為後面做的效能優化提供資料支援,對比優化前後的結果。非常不錯的是,在 github 發現一個 Ansible 任務計時外掛“ansible-profile”,安裝這個外掛後會顯示 ansible-playbook 執行每一個任務所花費的時間。Github 地址:https://github.com/jlafon/ansible-profile
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效能飛起的簡單優化方案!
(出處: 樂維論壇)