真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Asible學(xué)習(xí)筆記--優(yōu)化ansible速度

優(yōu)化ansible速度

簡單介紹和說明下,優(yōu)化ansible執(zhí)行速度的方法,具體如下~

成都創(chuàng)新互聯(lián)是一家以網(wǎng)站設(shè)計(jì)建設(shè),微信小程序、網(wǎng)站開發(fā)設(shè)計(jì),網(wǎng)絡(luò)軟件產(chǎn)品開發(fā),企業(yè)互聯(lián)網(wǎng)推廣服務(wù)為主的民營科技公司。主要業(yè)務(wù)涵蓋:為客戶提供網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站開發(fā)、域名申請、網(wǎng)站優(yōu)化排名、買鏈接等服務(wù)領(lǐng)域。憑借建站老客戶口碑做市場,建設(shè)網(wǎng)站時(shí),根據(jù)市場搜索規(guī)律和搜索引擎的排名收錄規(guī)律編程,全力為建站客戶設(shè)計(jì)制作排名好的網(wǎng)站,深受老客戶認(rèn)可和贊譽(yù)。

常規(guī)優(yōu)化方法

ansible的-t選項(xiàng)妙用

ansible的"-t"或"--tree"選項(xiàng)是將ansible的執(zhí)行結(jié)果按主機(jī)名保存在指定目錄下的文件中。

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

至于保存的內(nèi)容為何?實(shí)際上僅僅只是保存了普通的輸出內(nèi)容而已。

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

設(shè)置ansible開啟ssh長連接

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

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

除此之外直接設(shè)置/etc/ssh/ssh_config(不是sshd_config,因?yàn)閟sh命令是客戶端命令)中對應(yīng)的長連接項(xiàng)也是可以的。

開啟長連接后,在會(huì)話過期前會(huì)一直建立連接,在netstat的結(jié)果中會(huì)看到ssh連接是一直established狀態(tài),且會(huì)在當(dāng)前用戶家目錄的.ans ible/cp目錄下生成一些 socket 文件,每個(gè)會(huì)話一個(gè)文件。

例如:執(zhí)行一次ad-hoc操作:

ansible test -m ping

查看netstat ,發(fā)現(xiàn)ssh進(jìn)程的會(huì)話一直是established狀態(tài)。

netstat -lnpta

且家目錄下~/.ansible/cp/下會(huì)生成對應(yīng)的socket文件。

??關(guān)于 ssh 保持長連接的方法:

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

ClientAliveInterval 60    #server每隔60秒發(fā)送一次請求給client,然后client響應(yīng),從而保持連接
ClientAliveCountMax 3     #server發(fā)出請求后,客戶端沒有響應(yīng)得次數(shù)達(dá)到3,就自動(dòng)斷開連接,正常情況下,client不會(huì)不響應(yīng)

systemctl reload sshd

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

ServerAliveInterval 60    #client每隔60秒發(fā)送一次請求給server,然后server響應(yīng),從而保持連接
ServerAliveCountMax 3     #client發(fā)出請求后,服務(wù)器端沒有響應(yīng)得次數(shù)達(dá)到3,就自動(dòng)斷開連接,正常情況下,server不會(huì)不響應(yīng)

(3)命令行臨時(shí)修改

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

開啟pipelining

pipeline也是openssh的一個(gè)特性。在ansible執(zhí)行每個(gè)任務(wù)的流程中,有一個(gè)過程是將臨時(shí)任務(wù)文件put到一個(gè) ansible 端的一個(gè)臨時(shí)文件中,然后sftp傳輸?shù)竭h(yuǎn)端,然后通過ssh連接過去遠(yuǎn)程執(zhí)行這個(gè)任務(wù)。

如果開啟了pipelining,一個(gè)任務(wù)的所有動(dòng)作都在一個(gè)ssh會(huì)話中完成,也會(huì)省去sftp到遠(yuǎn)端的過程,它會(huì)直接將要執(zhí)行的任務(wù)在ssh會(huì)話中進(jìn)行。

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

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

之所以要設(shè)置/etc/sudoers中的requiretty,是因?yàn)閟sh遠(yuǎn)程執(zhí)行命令時(shí),它的環(huán)境是非登錄式非交互式shell,默認(rèn)不會(huì)分配tty,沒有tty,ssh的sudo就無法關(guān)閉密碼回顯(使用"-tt"選項(xiàng)強(qiáng)制SSH分配tty)。

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

grep requiretty /etc/sudoers 
# Defaults requiretty

修改設(shè)置/etc/sudoers是在被控節(jié)點(diǎn)上進(jìn)行的(或者ansible連接過去修改),其實(shí)在ansible端也可以解決sudo的問題,只需在ansible的ssh參數(shù)上加上"- tt "選項(xiàng)即可。

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

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

修改ansible執(zhí)行策略

默認(rèn)ansible在遠(yuǎn)程執(zhí)行任務(wù)是按批并行執(zhí)行的,一批控制多少臺(tái)主機(jī)由命令行的"-f"或"--forks"選項(xiàng)控制。例如,默認(rèn)的并行進(jìn)程數(shù)是5,如果有20臺(tái)被控主機(jī),那么只有在每5臺(tái)全部執(zhí)行完一個(gè)任務(wù)才繼續(xù)下一批的5臺(tái)執(zhí)行該任務(wù),即使中間某臺(tái)機(jī)器性能較好,完成速度較快,它也會(huì)空閑地等待在那,直到所有20臺(tái)主機(jī)都執(zhí)行完該任務(wù)才會(huì)以同樣的方式繼續(xù)下一個(gè)任務(wù)。如下所示:

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中,添加了一個(gè)策略控制選項(xiàng)strategy,默認(rèn)值為"linear",即上面按批并行處理的方式。還可以設(shè)置 strategy的值為"free"。

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

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)-->...

設(shè)置的方式如下:

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

設(shè)置facts緩存

ansible或ansible-playbook默認(rèn)總是先收集facts信息。在被控主機(jī)較少的情況下,收集信息還可以容忍,如果被控主機(jī)數(shù)量非常大,收集 facts 信息會(huì)消耗掉非常多時(shí)間。

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

ansible的配置文件中可以修改'gathering'的值為smart、implicit或者explicit。

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

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

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

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

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

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

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

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

說明

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

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


文章題目:Asible學(xué)習(xí)筆記--優(yōu)化ansible速度
當(dāng)前路徑:http://weahome.cn/article/ihssgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部