クラスタでの実行

多くのPCやワークステーションをネットワークで結合したクラスタはグリッド 環境において、代表的な計算資源です。 OmniRpcでは、クラスタをひとまとまりにしてリモートホストとして扱うこと ができます。クラスタの各ノードにおいて、リモート実行モジュールを実行さ せ、並列実行することにより高速化することができます。

クラスタ環境の設定
ジョブスケジューラの選択
内蔵ラウンドロビンスケジューラの利用
ローカルアドレスを使ったクラスタの場合
ファイヤウォール内にあるクラスタの場合

クラスタ環境の設定

クラスタを利用する場合には、クラスタ内の最低1つの計算機がクライアント ホストからアクセス可能でなくてはなりません。この計算機のことを、 クラスタサーバホストと呼ぶことにします。クラスタホスト以外の クラスタ内の計算機をクラスタノードホストと呼ぶことにします。

以下の説明では、以下のような環境を仮定します。
  1. クライアントホストは、jones.tsukuba.ac.jp
  2. クラスタサーバホストは、hpc-serv.hpcc.jpとし、各クラスタ ノードホストとして、hpc1, hpc2, hpc3の3つの計算機が接続されてい る。
  3. クラスタサーバーホストと各クラスタノードは同じファイルシステムを 共有している。
  4. クラスタサーバホストと全てのクラスタノードはクライアントホストへ 直接ネットワーク接続でき、全てのポートはopenされている。

最後の条件は、例えば、同じネットワークにクライアント、クラスタがある場 合です。

ジョブスケジューラの選択

OmniRpcでは、まず、Agentをクラスタサーバホストに起動し、このAgentが適 当なスケジューラをつかってクラスタノードホストで、リモート実 行モジュールを実行します。スケジューラとして以下のものを指定することが できます。

内蔵ラウンドロビンスケジューラの利用

内蔵ラウンドロビンスケジューラは、Agent内に実装されている簡単なスケジュー ラです。クラスタノードホストに順番にリモート実行モジュールを実行するた めのジョブを起動するためのスケジューラです。

このスケジューラを使うためには、まず、クラスタノードホストを指定するファ イルnodesをクラスタサーバホストのレジストリ(~/.omrpc-registry)に作りま す。例の設定の場合は以下のようになります。

hpc1
hpc2
hpc3

クライアントホストでは以下のようなホストファイルを作ります。

<?xml version="1.0" ?>
<OmniRpcConfig>
   <Host name="hpc-serv.hpcc.jp" arch="i386" os="linux">
   <JobScheduler type="rr" maxjob="4" /> 
   </Host>
</OmniRpcConfig>
JobScheduler要素のtype属性にラウンドロビンスケジューラ"rr"を設定します。 ちなみに、このtype属性のdefalutは"fork"で単に、同じホスト内でプロセス を実行することを意味します。これは、SMPの利用の所での設定です。 また、ノードホストの数は4ですので、最大のジョブ数maxjobを4に設定してい ます。

この指定でのagentとrexの関係は以下のようになります。

ローカルアドレスを使ったクラスタの場合

上の例ではクライアントホストとクラスタのホストが、同じネットワーク上に ある例について説明しましたが、クラスタノードホスト上で実行されるリモー ト実行プログラムはクライアントホストに対して直接通信します。クラスタと クライアントホストが異なるネットワーク上にある場合でも、クラスタノード ホストからクライアントホストに対して通信できることが必要です。

しかし、クラスタはその ノードホストが多くなるとローカルなIPアドレスを使って構成されることが多 くなります。この場合、サーバホストだけがグローバルなIPアドレスを持ち、 ノードホストはローカルなIPアドレスで構成されます。OmniRpcでは、クラス タノードホストがクライアントホストと通信する必要がありますが、 この場合には、クラス タノードホストと外部にあるクライアントホストは直接接続できません。

このような クラスタを利用するには2つの方法があります。

  1. クラスタノードホストから外部のネットワークに接続するためにNATを設 定する。各クラスタノードからクライアントノードの任意のポートに接続でき るように設定しなくてはなりません。NATの設定についてはその関連の資料を 参照してください。
  2. Agentの通信の多重化機能を利用して、クラスタノードホストで実行され るリモート実行プログラムとクライアントホストの通信を中継する。

後者の場合のホストファイルの例を示します。

<?xml version="1.0" ?>
<OmniRpcConfig>
   <Host name="hpc-serv.hpcc.jp" arch="i386" os="linux">
   <Agent invoker="rsh" mxio="on" />
   <JobScheduler type="rr" maxjob="4" />
   </Host>
</OmniRpcConfig>
Agent要素のmxio属性を"on"指定します。この例では、クラスタサーバーホス トとクライアントホストが同じネットワークにあるものとして、"rsh"を指定 していますが、SSHを用いてAgentを起動する場合には"ssh"、Globus Gate Keeperを使って起動する場合には"globus"とします。

この指定でのagentとrexの関係は以下のようになります。

クライアントとリモートノードホストで実行されるrexとの通信は、agentを介 して行われます。

ファイヤウォール内にあるクラスタの場合

ファイヤウォール内にクラスタを外部から利用する場合について説明します。 ファイヤウォールが設定されている場合、少なくともクラスタサーバホストに 対してはsshを使ってアクセスできることが必要です。sshが用いるポート22以 外のポートが利用できない場合には、Agentによる通信多重化機能を使うこと によって、利用できます。以下に、この設定についてのホストファイルの例を しめします。

<?xml version="1.0" ?>
<OmniRpcConfig>
   <Host name="hpc-serv.hpcc.jp" arch="i386" os="linux">
   <Agent invoker="ssh" mxio="on" />
   <JobScheduler type="rr" maxjob="4" />
   </Host>
</OmniRpcConfig>
Agent要素のmxio属性を"on"指定し、通信多重化機能を使います。

Globusを用いる環境では、通常、ファイヤウォールは設定されていないため、 このような設定は必要ありませんが、前の部分で説明したとおり、クラスタノー ドがプライベートIPアドレスの場合には、同じように、mxio属性をセットしな くてはなりません。

この指定でのagentとrexの関係は以下のようになります。

クライアントとリモートノードホストで実行されるrexとの通信は、agentを介 して行われますが、agentとクライアントはport forwardingを使って、 firewallを通過して行われます。