psshとかpslurpとか
大量のサーバを管理していて、共通設定のファイルを配布したり、ディレクトリの
権限変更したり、ちょっとした一斉作業に便利なコマンドpsshについてメモ。
だいぶ、今更な話ですいませんw
同時に一斉実行ですので、sshをforなどでループするより遥かに早いです。
あと、capistranoのレシピ書くほどではない作業にはもってこいです。
前提
・pythonがインストールされていること
・ノーパスワードでサーバ間のsshログインが可能なユーザが居ること
http://kenknown.blog42.fc2.com/blog-entry-92.html
導入
wget https://parallel-ssh.googlecode.com/files/pssh-2.2.2.tar.gz tar xfz pssh-2.2.2.tar.gz cd pssh-2.2.2 python ez_setup.py python setup.py install
使い方
pssh -h [リストファイル] -l [実行ユーザ] -i '実行コマンド'
リストファイルには、ホスト名またはIPアドレスの一覧が記述されていればOKです。
SSHのポートが22以外なら、ホスト名:ポート番号 で記述して下さい。
(実行例) ホスト名とApacheのプロセス数を取得。ついでにtimeで時間計測
$ time pssh -h /tmp/hosts.list -l user01 -i 'hostname ; ps -ef|grep [h]ttpd | wc -l ; printf "\n"' [1] 18:39:18 [SUCCESS] 172.168.142.139 test-web002 14 [2] 18:39:18 [SUCCESS] 172.168.161.23 test-web001 24 [3] 18:39:18 [SUCCESS] 172.168.142.211 test-web005 14 [4] 18:39:18 [SUCCESS] 172.168.163.23 test-web003 14 [5] 18:39:18 [SUCCESS] 172.168.163.21 test-web004 14 [6] 18:39:18 [SUCCESS] 172.168.162.18 test-web009 14 [7] 18:39:18 [SUCCESS] 172.168.161.59 test-web008 14 [8] 18:39:18 [SUCCESS] 172.168.147.101 test-web010 14 [9] 18:39:18 [SUCCESS] 172.168.150.247 test-web007 14 [10] 18:39:18 [SUCCESS] 172.168.160.53 test-web006 14 real 0m0.394s user 0m0.261s sys 0m0.135s $
表示順序はリストファイルに記述されている順序ではなく、レスポンスが返って
来た順で表示されるようです。(ちょっと見にくい)
あと、戻り値が0以外を返す場合、SUCCESS が ERROR になります。
diffで差分があることを確認したい場合などですね。
メッセージ表示だけの問題で、コマンドは実行されます。
pslurp
一括でファイル収集する pslurp なんかも使えると思います。
ファイル収集される場所が、サーバ名ディレクトリ配下になるのが難点かも知れませんが。。
$ pslurp -H test01 -l user01 -L /tmp/work -r /usr/local/nagios/etc/nrpe.cfg nrpe.cfg [1] 19:19:19 [SUCCESS] test01 $ ll total 4 drwxrwxr-x 2 user01 user01 4096 Dec 20 19:19 test01 $ ll test01/ total 4 -rw-r--r-- 1 user01 user01 2906 Dec 20 19:19 nrpe.cfg $
冒頭で述べた通り、ちょっとした作業には威力を発揮しますね。
・参考
http://oss.fulltrust.co.jp/doc/centos6.3/pssh.html
以上です。