1つのシェルから複数のSSHセッションを同時に実行するツール3種類を試すLeverage OSS(4/4 ページ)

» 2008年11月12日 00時00分 公開
[Ben Martin,SourceForge.JP Magazine]
SourceForge.JP Magazine
前のページへ 1|2|3|4       

ClusterIt

 3つ目に紹介するアプリケーションはClusterItだ。多数のSSHセッションを単一のコンソールからまとめて制御できるのはもちろん、ほかの機能も備えている。具体的には、cp、rm、top、dfの並行処理版(名前はそれぞれpcp、prm、dtop、pdf)のほか、クラスタのいずれかのノードでコマンドを実行するための命令(run)、クラスタの複数のノードに対して一連のコマンドを発行する命令(seq)、各ノードでジョブを1つずつ確実に進めていくための命令(jsh)が用意されている。

 ClusterItは、openSUSE、Ubuntu Hardy、Fedora 9のいずれのパッケージもない。わたしは64ビットのFedora 9マシンで「./configure && make && sudo make install」を実行し、ClusterIt 2.5をソースからビルドした。

 ClusterItでクラスタのすべてのノードに対してターミナルを開くには、dvtコマンドを使用する。Cluster SSHとは違い、開いたウインドウを並べて表示してくれる機能はない。ウインドウマネジャーがデフォルトできれいに配置してくれない限りは、手動で並べ替える必要がある。また、制御用のウインドウが備えるオプションもCluster SSHより少ない。クラスタのうちでターミナルを立ち上げるノードを指定するには、-wオプションを使用し、次のようにホスト名をコンマ区切りで指定する。すると、各ターミナルウインドウと制御用のウインドウが表示される。制御用のウインドウ(タイトルにdvtとあるウインドウ)を閉じても、各ターミナルウインドウは閉じない。セッションの全ターミナルを閉じるには、制御用ウインドウの[Quit]ボタンを押す必要がある。


$ dvt -w p1,p2

 ClusterItの大半のコマンドでは、接続先のグループを-gオプションで、ノードを-wオプションで、除外するノードを-xオプションで、それぞれ指定する。

 クラスタのすべてのノードにファイルをコピーするにはpcpコマンドを使用する。デフォルトでは順番にコピーされるが、-cオプションを指定すると並行処理でコピーされる。すべてのノードに一斉に送信できるネットワーク帯域幅がある場合なら、並行処理でコピーする方が短時間で完了する。並行処理の場合は、同時に処理するノード数を-fオプションで指定できる。デフォルトは64だ。つまり、64のノードに対して並行処理でコピーが行われる。

 pcpには、cpと同じオプションも幾つかある。残念ながら、cpでよく使う-aオプション(-cdpRのエイリアス)は使用できない。また、-cオプションはcpと意味が異なるし、-dオプションはない。一方、-pオプションと-Rオプションは、cpと同じように使用できる。

 ClusterItのほかのコマンドでも、よく使うオプションが欠けていることがある。例えば、通常のdfコマンドにある-hオプションが、ClusterItのpdfコマンドにはない。ディスク容量を1Kブロック単位で表示するのは、コンピュータにとっては好都合かもしれないが、人間としては、正確なブロック数が分かることより、例えば/varに140Mバイトの空き領域があるかどうかが分かる方が重要だと思う。

 次の実行例では、p1とp2の両ホストに対し、まずディレクトリツリーを/tmpに再帰的にコピーしている。最大処理ノード数まで並行処理でコピーを行う場合は、pcpコマンドに-cオプションを指定すればよい。その次のsshコマンドでは、example-tree配下のファイルがホストp1に存在することを確認している。その次のpdfコマンドの出力からは、df -hと比べて分かりにくいことが見て取れる。その後のprmコマンドでは、両方のホストからディレクトリツリーを削除している。


# pcp -pr -w p1,p2 example-tree /tmp/
df10.txt  ... 100%   29     0.0KB/s   00:00
df1.txt   ... 100%   29     0.0KB/s   00:00
...
# ssh p1 cat /tmp/example-tree/df10.txt
Thu Oct 16 21:45:50 EST 2008
# pdf -w p1,p2 /tmp
Node      Filesystem            1K-Blks     Used    Avail  Cap Mounted On
p1      : /dev/mapper/VolGrou  15997880  3958792 11213336  27% /
p2      : /dev/mapper/VolGrou  15997880  3536648 11635480  24% /
# prm -rf -w p1,p2 /tmp/example-tree

 ClusterItの大きな特長が、ジョブスケジューリングとバリア機能だ。バリア機能とは、複数のノードで動作するスクリプトを作成するときに、バリア(境界)となる部分をスクリプト内に定めておくと、すべてのノードの処理がそのバリアに達した時点ではじめて次の部分に処理が進むという同期機能だ。この機能を使えば、処理の後でマージを行うといった典型的なスクリプトを作成するときに、ノード間の連携に苦労せずに済む。並行処理するスクリプトの中でbarrierコマンドを使っておくだけで、すべてのノードが指定の場所に達するのを待機できる。

 jshコマンドでは、クラスタのいずれかのノードでコマンドを実行できる。ただし、各ノードで複数のコマンドが同時に処理されることはないという制限がある。この制限のおかげで、複数のコマンド処理でノードの処理が停滞するという事態を防げる。つまり、ClusterItを使用するスクリプトからクラスタに対し、前のコマンドがまだ途中の段階で次のコマンドがどんどん発行されるという心配がない。例えば、ClusterItを使ってコードをコンパイルする場合に、ほかと比べてコンパイルにかなり長い時間を要するソースファイルが幾つかあるとする。インテリジェントなスケジューリング機能や、1ノードに 1ジョブのみという制限がなかったら、コンパイルの並行処理の際に、大物のファイルのコンパイルがまだ終わっていない段階で、次に処理するジョブがノードに渡されるということが起こり得る。jshなら、長い処理時間を要するジョブも、次のジョブを渡されることなく進められる。

 jshの使い方は簡単だ。制御元のホスト(例えばユーザー自身のデスクトップマシン)でデーモンjsdを立ち上げてから、jshを使ってコマンドを発行する。クラスタを構成するノードは、-g、-w、-xの各オプションで指定できる。jsh自体は特にオプションなしで呼び出せる。次の使用例では、まずデーモンを起動し、jshでコマンドを実行している。その後、jshをバックグラウンドで2回実行している。これで両方のホストにジョブが送られる。最後には、その出力が示されている。


# jsd -w p1,p2
jsd started with pid 24615
# jsh hostname
p2: vfedora864prx2
# jsh "sleep 10; hostname" &
[1] 24648
# jsh "sleep 10; hostname" &
[2] 24650
p2: vfedora864prx2
p1: vfedora864prx1

 -g、-w、-xの各オプションの代わりに環境変数を使うこともできる。CLUSTER変数では、ホスト名を改行区切りで記述したファイルの名前を指定する。FANOUT変数では、ジョブを並行処理するノードの数を指定する。

まとめ

 本稿で紹介した3つのアプリケーションはそれぞれに長所がある。クラスタに対するコマンドの発行や負荷分散を行いたい場合はClusterItがよいだろう。複数のxtermをグループ化して単一のウインドウから制御したい場合は、Cluster SSHが一番使いやすいだろう。複数のターミナルを使えるし、特定のノードを一時的に無効にしたり、単一のホストのみを直接利用した後で全体の制御に戻るといったことも可能だ。Parallel sshには、並行処理版のrsyncコマンドがあり、複数のホストを単一のターミナルから制御できる。入力内容が複数のxtermに反映されるようすは表示されないが、さまざまな種類のマシンを集めた環境で、すべてのマシンに対して同じコマンドを実行する機会が多い場合には、単一のインタラクティブターミナルからすべてを操作できて便利だ。ノードごとにxtermウインドウが個別に開いて画面上が混雑する心配がない。

Ben Martinは10年越しでファイルシステムと取り組んできた。博士課程終了。現在、libferris、ファイルシステム、サーチソリューションを中心にコンサルタント業務を展開している。


前のページへ 1|2|3|4       

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ