亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Asible學習筆記--優化ansible速度

發布時間:2020-07-18 22:05:10 來源:網絡 閱讀:573 作者:品鑒初心 欄目:系統運維

優化ansible速度

簡單介紹和說明下,優化ansible執行速度的方法,具體如下~

常規優化方法

ansible的-t選項妙用

ansible的"-t"或"--tree"選項是將ansible的執行結果按主機名保存在指定目錄下的文件中。

ansible test -m ping -o -f 6 -t /tmp/tree

至于保存的內容為何?實際上僅僅只是保存了普通的輸出內容而已。

# pwd
/tmp/tree
# cat 192.168.246.187
{"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

設置ansible開啟ssh長連接

如要開啟ssh長連接,要求ansible端的openssh版本高于或等于5.6。使用ssh -V可以查看版本號。然后設置ansible 使用ssh連接被控端的連接參數,此處修改/et c/ans ible/ansible.cfg,在此文件中啟動下面的連接選項,其中ControlPersist=5d是控制ssh連接會話保持時長為5天。

ssh_args = -C -o ControlMaster=auto -o ControlPersist=5d

除此之外直接設置/etc/ssh/ssh_config(不是sshd_config,因為ssh命令是客戶端命令)中對應的長連接項也是可以的。

開啟長連接后,在會話過期前會一直建立連接,在netstat的結果中會看到ssh連接是一直established狀態,且會在當前用戶家目錄的.ans ible/cp目錄下生成一些 socket 文件,每個會話一個文件。

例如:執行一次ad-hoc操作:

ansible test -m ping

查看netstat ,發現ssh進程的會話一直是established狀態。

netstat -lnpta

且家目錄下~/.ansible/cp/下會生成對應的socket文件。

??關于 ssh 保持長連接的方法:

(1)修改server端的etc/ssh/sshd_config

ClientAliveInterval 60    #server每隔60秒發送一次請求給client,然后client響應,從而保持連接
ClientAliveCountMax 3     #server發出請求后,客戶端沒有響應得次數達到3,就自動斷開連接,正常情況下,client不會不響應

systemctl reload sshd

(2)修改client端的etc/ssh/ssh_config添加以下:(在沒有權限改server配置的情形下)

ServerAliveInterval 60    #client每隔60秒發送一次請求給server,然后server響應,從而保持連接
ServerAliveCountMax 3     #client發出請求后,服務器端沒有響應得次數達到3,就自動斷開連接,正常情況下,server不會不響應

(3)命令行臨時修改

在命令參數里ssh -o ServerAliveInterval=60這樣子只會在需要的連接中保持持久連接, 畢竟不是所有連接都要保持持久的。

開啟pipelining

pipeline也是openssh的一個特性。在ansible執行每個任務的流程中,有一個過程是將臨時任務文件put到一個 ansible 端的一個臨時文件中,然后sftp傳輸到遠端,然后通過ssh連接過去遠程執行這個任務。

如果開啟了pipelining,一個任務的所有動作都在一個ssh會話中完成,也會省去sftp到遠端的過程,它會直接將要執行的任務在ssh會話中進行。

開啟pipelining的方式是配置文件(如ansible.cf g)中設置pipelining=true,默認是false。

但是要注意,如果在ansible中使用sudo命令的話(ssh user@host sudo cmd),需要在被控節點的/etc/sudoers中 禁用"requiretty"。

之所以要設置/etc/sudoers中的requiretty,是因為ssh遠程執行命令時,它的環境是非登錄式非交互式shell,默認不會分配tty,沒有tty,ssh的sudo就無法關閉密碼回顯(使用"-tt"選項強制SSH分配tty)。

所以出于安全考慮,/etc/sudoers中默認是開啟requiretty的,它要求只有擁有tty的用戶才能使用sudo,也就是說ssh連接過去不允許執行sudo 。可以通過 visudo/vim 編輯配置文件,注釋該選項來禁用它。

grep requiretty /etc/sudoers 
# Defaults requiretty

修改設置/etc/sudoers是在被控節點上進行的(或者ansible連接過去修改),其實在ansible端也可以解決sudo的問題,只需在ansible的ssh參數上加上"- tt "選項即可。

ssh_args = -C -o ControlMaster=auto -o ControlPersist=5d -tt

開啟pipelining后,每次執行任務時都大量減少了ssh連接次數(只需要一次ssh連接),且省去了sftp傳輸任務文件的過程,因此在管理大量節點時能極大提升執行效率。

修改ansible執行策略

默認ansible在遠程執行任務是按批并行執行的,一批控制多少臺主機由命令行的"-f"或"--forks"選項控制。例如,默認的并行進程數是5,如果有20臺被控主機,那么只有在每5臺全部執行完一個任務才繼續下一批的5臺執行該任務,即使中間某臺機器性能較好,完成速度較快,它也會空閑地等待在那,直到所有20臺主機都執行完該任務才會以同樣的方式繼續下一個任務。如下所示:

h2 h3 h4 h5 h6(T1)-->h7 h7 h8 h9 h20(T1)...-->h26 h27 h28 h29 h30(T1)-->h2 h3 h4 h5 h6(T2)-->.....

在ansible 2.0中,添加了一個策略控制選項strategy,默認值為"linear",即上面按批并行處理的方式。還可以設置 strategy的值為"free"。

在free模式下,ansible會盡可能快的切入到下一個主機。同樣是上面的例子,首先每5臺并行執行一個任務,當其中某一臺機器由于性能較好提前完成了該任務,它不會等待其他4臺完成,而是會跳出該任務讓ansible切入到下一臺機器來執行該任務。也就是說,這種模式下,一臺主機完成一個任務后,另一臺主機會立即執行任務,它是"前赴后繼"的方式。如下所示:

h2 h3 h4 h5 h6(T1)-->h2 h3 h4 h5 h7(T1)-->h2 h4 h5 h7 h7(T1)-->......-->h27 h28 h29 h30(T1) h2(T2)-->h28 h29 h30(T1) h2 h3(T2)-->...

設置的方式如下:

- hosts: all
   strategy: free
   tasks:
   ...

設置facts緩存

ansible或ansible-playbook默認總是先收集facts信息。在被控主機較少的情況下,收集信息還可以容忍,如果被控主機數量非常大,收集 facts 信息會消耗掉非常多時間。

可以設置gather_facts: no來禁止ansible收集facts信息,但是有時候又需要使用facts中的內容,這時候可以設置facts的緩存。例如,在空閑的時候收集facts ,緩存下來,在需要的時候直接讀取緩存進行引用。

ansible的配置文件中可以修改'gathering'的值為smartimplicit或者explicit

(1)smart 表示默認收集facts,但facts已有的情況下不會收集,即使用緩存facts;

(2)implicit 表示默認收集facts ,要禁止收集,必須使用gather_facts: False

(3)explicit 則表示默認不收集,要顯式收集,必須使用gather_facts: Ture

在使用facts緩存時(即設置為smart),ansible支持兩種f acts緩存:redisjsonfile

例如,以下是/etc/ansible/ansible.cfg中jsonfile格式的緩存配置方法。

[defaults]
gathering = smart
fact_caching_timeout = 86400                                        ## 這里設置的緩存過期時間為86400秒,即緩存一天。
fact_caching = jsonfile fact_caching_connection = /path/to/cachedir ## 緩存的json文件放在/path/to/cachedir目錄下,各主機的緩存 文件以主機名命名。

緩存文件是一個json文件,要查看緩存文件,如/path/to/cachedir/192.168.100.59中的內容, 使用如下語句即可:

cat /path/to/cachedir/192.168.100.59 | python -m json.tool

說明

本博文是參考馬龍帥大佬文章整理生成,屬于博主讀書筆記,如有侵權,請大佬與我聯系,立刪!

最后,感謝開源,擁抱開源~

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

静宁县| 江都市| 济宁市| 宁强县| 永年县| 皋兰县| 萝北县| 黄陵县| 广饶县| 苍溪县| 鄱阳县| 乐陵市| 乌苏市| 石城县| 合水县| 浙江省| 米易县| 溧阳市| 越西县| 宜川县| 荥阳市| 广汉市| 大荔县| 宣威市| 勃利县| 长葛市| 贺兰县| 临泉县| 海城市| 凤山县| 鄱阳县| 兴和县| 望都县| 定西市| 长汀县| 晋中市| 富平县| 宿迁市| 韶山市| 西乌珠穆沁旗| 孝义市|