pdshを使って複数台のサーバに対して同じコマンドを発行する方法
はじめまして。システムエンジニアのにしだです。 以前はECサイトとかWEBアプリなどを作ってました。SONICMOOVに入社してからはソーシャゲームの開発をしています。 さて、複数台のサーバに対して同じコマンドを発行したい場合って結構あると思うんですが、いちいちログインして一回一回発行するのとかめんどくさいですよね。整合性も悪いし。そこでSSHの並列実行ツールpdshを使ってみました。
続きを読む
対象環境はCentOS6.3
環境はCentOS6.3です。 インストール。以前はRPMを作ってたのですがepelから入るようになってました。
1 2 3 4 |
[sourcecode lang="text"] % sudo yum --enablerepo=epel install pdsh [/sourcecode] |
準備
使用したいサーバ全てにSSH公開鍵の設定をしておきます。
主な使い方
下記の3台のサーバがあると仮定します xxx.xxx.xxx.1 xxx.xxx.xxx.2 xxx.xxx.xxx.3 カンマで区切って複数発行します。
1 2 3 4 |
[sourcecode lang="text"] % pdsh -w xxx.xxx.xxx.1,xxx.xxx.xxx.2,xxx.xxx.xxx.3 'cat /etc/redhat-release' [/sourcecode] |
正規表現の利用
正規表現も使えます。
1 2 3 4 |
[sourcecode lang="text"] % pdsh -w xxx.xxx.xxx.[1-3] 'cat /etc/redhat-release' [/sourcecode] |
グループ指定
下記のようにサーバリストのファイルを作成しておくことでグループ指定することができます。
1 2 3 4 5 6 7 8 9 |
[sourcecode lang="text"] % cat /etc/dsh/group/app-server xxx.xxx.xxx.1 xxx.xxx.xxx.2 xxx.xxx.xxx.3 % pdsh -g app-server 'cat /etc/redhat-release' [/sourcecode] |
表示の整形
また、dshbakというコマンドにパイプで渡すと表示の重複などを綺麗に表示してくれます。
1 2 3 4 5 6 7 8 |
[sourcecode lang="text"] % pdsh -g app-server 'cat /etc/redhat-release' | dshbak -c ---------------- xxx.xxx.xxx.[1-3] ---------------- CentOS release 6.3 (Final) [/sourcecode] |
と、超簡単ですがこんな感じで便利に使えます。使用上のポイントとしては必ずワンライナーで書いて対話式のコマンドでは使用しないことです。使用先のサーバにもpdshをインストールしておくとpdcpやrpdcpというコピーコマンドも使用できるようになってますます便利です。