需要了解的pssh(r11筆記第28天)

jeanron100發表於2016-12-29

   昨天的一篇文章,關於ssh命令的幾個使用小技巧(r11筆記第27天),也收到了不少朋友的反饋,其中有個朋友提議說還是用pssh吧,我想想也是。

    對於pssh早有耳聞,但是一直沒有嘗試用過。自己體驗了一番,感覺確實不錯,對於我們日常碰到的批次操作都可以勝任。當然還有很多可選方式,比如pgm,fabric,puppet,ansible等,只要能實現需求,怎麼玩都是套路,而且也急不得,一個學明白了學其他的就會容易很多。

     關於pssh的p是什麼含義,我和朋友還討論過,到底是python還是parallel的意思,其實按照官網的意思是parallel,當然它是用python寫的。檢視官網目前較新的版本是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       可見一個開源的專案能夠健康發展至今,還是離不開很多默默奉獻的人。

這就印證了一句話:

想要走得快,請獨行;要想走得遠,請結伴而行


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2131633/,如需轉載,請註明出處,否則將追究法律責任。

相關文章