計算機 1台上での複数ノードのエミュレーション[English | Japanese]last-updated: February 13, 2011 |
このチュートリアルでは、分散環境エミュレータを使って、 その上で複数の DHT シェルを動作させます。
ツールキットはインストール (展開 & ビルド) 済みであると仮定します。 bin ディレクトリ以下のコマンドを実行するための、 環境変数 PATH の設定も済んでいると仮定します。 ただし、PATH の設定なしに、ディレクトリを指定して起動しても問題ありません。
エミュレータはシナリオをファイル、またはウェブから読み込みます。 エミュレーションに先だってシナリオを用意する必要があります。
次の内容で、 SimpleScenario という名前のファイルを用意します。
このシナリオはまず、ノードを 1つ起動します。 起動されたノードは TCP の 10000番ポートでネットワーク越しの接続を待ち、 そこから DHT シェルのコマンドを読み込みます。 続いて 3つのノードを起動します。 これら 3ノードは最初に起動されたノード (emu0) と 通信することでオーバレイに参加します。timeoffset 2000 # invokes the first node class ow.tool.dhtshell.Main arg -p 10000 schedule 0 invoke # invokes 3 nodes, which contacts the first node (emu0) to join an overlay arg emu0 schedule 1000,1000,3 invoke # keeps the emulator running schedule inf control all halt
次のコマンドでエミュレータを実行します。
owemu SimpleScenario
以下の通り、4つの DHT シェルからのメッセージが出力されます。
... DHT configuration: hostname:port: emu3:3997 transport type: UDP routing algorithm: Chord routing style: Iterative directory type: VolatileMap working directory: . initial contact: emu0:3997 A DHT started.
オプションで指定された通り、 最初の DHT シェルは 10000 番ポートで接続を待っています。 このシェルに接続します。
別のキャラクタ端末を開き、DHT シェルに telnet します。
telnet localhost 10000
コマンド入力を促すメッセージが出力されます。
status コマンドで、ノードの経路表を見ます。Ready.
status
quit コマンドでシェルを抜けます。ID and address: ac4d64e281e1ad8670db2c3123a842874c394f4d:emu0:3997 Routing table: predecessor: 5de550ebe439e30918a0d11c6173aa0a7df6afff:emu1:3997 successor list: [ ...
quit
次に進む前に、例えば Ctrl + C を押して、
エミュレータを終了させておきます。
続いては、より高度なシナリオを実行します。 AdvancedScenario という名前で、次の内容を持つファイルを用意します。
このシナリオは 4つの DHT シェルを起動して制御します。 制御のためには、先ほどのシナリオにはなかったコマンド "schedule" を使います。 このコマンドは、各 DHT シェルへのコマンド送信をスケジュールします。 例えば "schedule 5000 control 1 get a_key" というコマンドは、 ある時刻の 5000ミリ秒後に、 仮想計算機 1番 (emu1) 上の DHT シェルに対して "get a_key" というコマンドを送信するという指示です。 ある時刻とは、そのコマンドより前の "timeoffset" コマンドで 指定された 7000ミリ秒を指します。timeoffset 2000 # invokes the first node class ow.tool.dhtshell.Main arg -p 10000 schedule 0 invoke # invokes 3 nodes arg schedule 1000,1000,3 invoke timeoffset 7000 # 3 nodes join an overlay schedule 0 control 1 init emu0 schedule 1000 control 2 init emu0 schedule 2000 control 3 init emu0 # put and get schedule 4000 control 1 put a_key a_value schedule 5000 control 1 get a_key
このシナリオファイルを与えてエミュレータを実行します。
owemu AdvancedScenario
2つめの DHT シェルに対する
get コマンドの結果を見ることができます。
... control 1 (Sun Feb 13 21:52:18 JST 2011): get a_key key: 5d8b23c071cb95840397933b5969c69413fc87cf value: a_value 10798