タグ別アーカイブ: pslurp

複数のサーバから一斉にファイルを収集するのにpslurpが便利 – Glide Note – グライドノート

以前、ブログに書いて以来、活用しているpsshpscpなんですが、付属コマンドのpslurpについてはすっかり忘れて全く利用していなかったんですが、同僚の刺身さんが結構活用しているというのを聞いて、改めて使ってみると大変便利!

環境はSL6.1です。

pslurpの使いどころ

  • 複数のサーバからaccess.logなどのログ、my.cnfといった設定ファイルなどの同名ファイルを持ってくる場合
  • DNSラウンドロビンや、ロードバランサを利用していてアクセスログが分散している場合

通常何も考えずscpとかで持ってくるとファイルが上書きされてしまうので、ホスト毎にファイルを分けて管理したい場合にpslurpが活躍します。

pipを利用してpsshの導入

2012年なんでeasy_installではなく、pipを利用して導入。

1
sudo pip install pssh

接続先のサーバリストの作成

db_server.txtとかで下記のようなファイルを用意。各ホストには鍵が通っている必要があります。

12345678910
mysql0.glidenote.lanmysql1.glidenote.lanmysql2.glidenote.lanmysql3.glidenote.lanmysql4.glidenote.lanmysql5.glidenote.lanmysql6.glidenote.lanmysql7.glidenote.lanmysql8.glidenote.lanmysql9.glidenote.lan

ファイルの一斉取得

下記のようなコマンドでファイルを一斉に取得

12
sudo pslurp -h db_server.txt /etc/my.cnf .sudo pslurp -h db_server.txt /var/log/secure .

下記のようにホスト毎にディレクトリが作られて、ファイルが収納される。

123456789101112131415161718192021222324252627282930313233
[akira@manage] $ tree.|-- db_server.txt|-- mysql0.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql1.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql2.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql3.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql4.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql5.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql6.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql7.glidenote.lan|   |-- my.cnf|   `-- secure|-- mysql8.glidenote.lan|   |-- my.cnf|   `-- secure`-- mysql9.glidenote.lan    |-- my.cnf    `-- secure

同じようなことをシェルスクリプトでやろうとするとディレクトリ作ったりとか下記のような感じで面倒くさい。

12345678910111213141516171819202122232425262728
#!/bin/sh

SERVERS=
mysql0.glidenote.lan
mysql1.glidenote.lan
mysql2.glidenote.lan
mysql3.glidenote.lan
mysql4.glidenote.lan
mysql5.glidenote.lan
mysql6.glidenote.lan
mysql7.glidenote.lan
mysql8.glidenote.lan
mysql9.glidenote.lan

FILES=
/var/log/secure
/etc/my.cnf

for server in ${SERVERS};
do
mkdir ${server}
    for file in ${FILES}
    do
scp ${server}:${file} ${server}/
    done
done
view raw getfile.sh This Gist brought to you by GitHub.

<pre><code>#!/bin/shSERVERS=&quot;mysql0.glidenote.lanmysql1.glidenote.lanmysql2.glidenote.lanmysql3.glidenote.lanmysql4.glidenote.lanmysql5.glidenote.lanmysql6.glidenote.lanmysql7.glidenote.lanmysql8.glidenote.lanmysql9.glidenote.lan&quot;FILES=&quot;/var/log/secure/etc/my.cnf&quot;for server in ${SERVERS};do mkdir ${server} for file in ${FILES} do scp ${server}:${file} ${server}/ donedone</code></pre>

特定の日時のログを一括で確認したい場合や、サーバ全台の設定ファイルの比較とかに活用出来ます。

ファイルのデプロイに関してはpuppetやwebistranoなどで管理が出来ていますが、ファイルの一斉収集についてはpslurpが良い感じですね。