ネットワークで接続された複数の Linux ノードがあり、クラスタ構成で接続されている場合、全ノードに同じような処理を行いたい場合があります。たとえば、どっかの共有ディスクを NFS マウントしたりとか。これを、ひとつひとつ手でやってたら大変なんで、コマンド一発で一括して並列実行したいと思いますよね。ということで、そういったことを行える pdsh をインストールしてみました。
ターゲット OS は、CentOS 5.x あたりです。まずインストールということで、お約束のおまじないを実行。
# yum install pdsh
あー、駄目だ。インストールされません。標準のリポジトリには登録されていないようです。なので、こことかからダウンロード。今回は、src.rpm から挑戦してみました(pdsh-2.18-1.src.rpm とか)。早速、src.rpm をインストール。
# rpm -ivh pdsh-2.18-1.src.rpm
インストール完了。で、以下の spec ファイルができる。
/usr/src/redhat/SPECS/pdsh.spec
次に、rpm ファイルをビルドしてみる。
# cd /usr/src/redhat/SPECS
# rpmbuild -ba pdsh.spec
で GO と思ったら、rpmbuild がないですよ。ぐはぁ。なんで、おまじない。
#なんでかしりませんが、rpm と build の間にハイフンがいるよ。
rpmbuild を yum でインストールした後も、ncurses が無い! gcc が無い!だのなんだの言われますが、適宜 yum でインストール。というか、どうなってんだ<オレの Linux 環境。そんなこんなで、rpmbuild に成功すると、以下の様なフォルダに rpm がいくつかできる
とりあえず、以下のような rpm ファイルができあがりました。
pdsh-2.18-1.x86_64.rpm
pdsh-mod-netgroup-2.18-1.x86_64.rpm
pdsh-mod-dshgroup-2.18-1.x86_64.rpm
pdsh-rcmd-exec-2.18-1.x86_64.rpm
pdsh-mod-machines-2.18-1.x86_64.rpm
pdsh-rcmd-ssh-2.18-1.x86_64.rpm
で、インストールですよ。
# cd /usr/src/redhat/RPMS/x86_64
# rpm -ivh *.rpm
インストール完了したら動作確認。たとえば、対象ホスト名が、host001〜host999 とか連番になっていて、各ホストで ls を実行したい!という場合は、
# pdsh -l root -R ssh -w host[001-999] ls
でいけますよ(-l が実行ユーザー、-R ssh が ssh 方式でリモート実行、-w が実行するホストで、host001 から host999 まで実行するといったイメージ)。 べたなサンプルスクリプトを作成。
#! /bin/sh
pdsh -l root -R ssh -w host[001-999] mkdir /shared
pdsh -l root -R ssh -w host[001-999] cp -p /etc/fstab /etc/fstab20091117
pdsh -l root -R ssh -w host[001-999] "echo '#20091117 quitada' >> /etc/fstab"
pdsh -l root -R ssh -w host[001-999] "echo 'fileserver01:/shared /shared nfs defaults 0 0' >> /etc/fstab"
pdsh -l root -R ssh -w host[001-999] mount /shared
host001〜host999 まで、共有ファイルサーバの fileserver01 の /shared を一括マウントするようなサンプルだよ。 でわ〜。