需要了解的pssh(r11筆記第28天)
昨天的一篇文章,關於ssh命令的幾個使用小技巧(r11筆記第27天),也收到了不少朋友的反饋,其中有個朋友提議說還是用pssh吧,我想想也是。
對於pssh早有耳聞,但是一直沒有嘗試用過。自己體驗了一番,感覺確實不錯,對於我們日常碰到的批量操作都可以勝任。當然還有很多可選方式,比如pgm,fabric,puppet,ansible等,只要能實現需求,怎麼玩都是套路,而且也急不得,一個學明白了學其他的就會容易很多。
關於pssh的p是什麼含義,我和朋友還討論過,到底是python還是parallel的意思,其實按照官網的意思是parallel,當然它是用python寫的。檢視官網目前較新的版本是2.3.1,可以參考如下連結:
https://pypi.python.org/pypi/pssh/2.3.1
下載得到的不是rpm包,而是一個tar.gz的包,解壓以後,直接執行如下的命令即可完成安裝的過程。
# python setup.py install
其實這個pssh還有很多附加的功能pscp,prsync,pslurp,pnuke等。
比如我們有幾臺伺服器需要做一些相同的檢查。
伺服器列表我們提供一個檔案test.txt
10.12.133.125
10.12.2.102
10.12.2.32
比如想批量檢視主機名的情況,那麼執行的結果如下:
# pssh -h test.txt -i "hostname"
[1] 17:41:44 [SUCCESS] 10.12.133.125
newtest.oracle.com
[2] 17:41:44 [SUCCESS] 10.12.2.102
bill_10.12.2.102_sx
[3] 17:41:44 [SUCCESS] 10.12.2.32
snewtest2.oracle.com
如果想先顯示結果再顯示檢測情況,可以使用-P選項。
# pssh -h test.txt -P "hostname"
10.12.133.125: newtest.oracle.com
[1] 17:42:08 [SUCCESS] 10.12.133.125
10.12.2.102: bill_10.12.2.102_sx
[2] 17:42:08 [SUCCESS] 10.12.2.102
10.12.2.32: snewtest2.oracle.com
[3] 17:42:08 [SUCCESS] 10.12.2.32
當然這只是開始,比如想檢視一下伺服器的uptime情況,超時時間為10秒,對於那些伺服器訪問不通的情況,情況就會大大改善。
# pssh -h test.txt -t 10 -i uptime
如果伺服器有100臺,使用如上的方式就會瞬間導致伺服器的程序數暴增,如果成千上萬臺伺服器,後果不堪設想,其實我們想讓這個過程更平滑一下,那就是使用-p選項,指定並行程序數,比如指定並行程序數為20個,這樣就是一個動態控制的過程。
# pssh -h test.txt -t 10 -p 20 -i uptime
如果伺服器不算太多,可以使用傳入變數的方式,而不適用IP列表。
# pssh -H "10.12.133.125 10.12.2.32" -i uptime
[1] 23:22:35 [SUCCESS] 10.12.133.125
23:19:59 up 268 days, 6:53, 0 users, load average: 0.07, 0.10, 0.28
[2] 23:22:35 [SUCCESS] 10.12.2.32
23:04:38 up 220 days, 8:43, 1 user, load average: 0.22, 0.24, 0.25
大體的使用情況就是上面這樣,基本達到的效果就是一個伺服器能夠通過ssh操作,那麼放大到100臺,1000臺,從客戶端來說操作複雜度沒有太大的差別。
pssh這個工具蠻有意思,在安裝的目錄下有個AUTHORS的檔案,作者是兩個。
# less AUTHORS
Andrew McNabb <amcnabb at mcnabbs.org>
Brent Chun <bnc at theether.org>
而我自己也簡單看了下pssh的實現程式碼,說實話,python還是小白,但是從Java學習的基礎來看,有些程式碼大體還是能基本看懂,程式碼不是很長,所以我打印出來準備抽空好好看看。
pssh的核心部分有幾個檔案,pssh和幾個庫檔案,manage.py,task.py,psshutil.py,還有輔助的cli.py,color.py,askpass_client.py,askpass_server.py
簡單總結了下,Andrew寫了不少的內容,而且近些年的維護都是他。
# Copyright (c) 2009-2012, Andrew McNabb
manager.py
task.py
askpass_client.py
askpass_server.py
而早期的時候更多的內容是Brent來做,2009年左右交接給了Andrew,所以會看到共同作者。
# Copyright (c) 2009-2012, Andrew McNabb
# Copyright (c) 2003-2008, Brent N. Chun
psshutil.py
color.py
cli.py
可見一個開源的專案能夠健康發展至今,還是離不開很多默默奉獻的人。
這就印證了一句話: