1. 程式人生 > 其它 >需要了解的pssh(r11筆記第28天)

需要了解的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 可見一個開源的專案能夠健康發展至今,還是離不開很多默默奉獻的人。

這就印證了一句話:

想要走得快,就一個人走;要想走得遠,就一起走