Dolly+
| 背景 |
多量のノードを有する大規模なPCクラスターを構築するときに、まず悩ませられるのは、インストレーションとその後のアップデートです。これらは、たとえ自動バッチインストレーションなどの仕組みを使ってもノード数が百を超える頃から非常に大きな労力を必要とするようになります。そこで、多くの人は一台のシステムを構築した後、そのハードディスクのデッドコピーをノード台数分作成しノードに配るということをします。
いくつかのソフトウエアは、これをネットワークを介して行いますが、ノードの台数が増えるにつれてサーバボトルネックの問題が生じます。
ETH (Swiss Federal Institute of Technology)で開発された ディスク「クローニング」ソフトウエア `dolly'は、論理的なリング結合関係をノード間につくり、コピーすべきディスクイメージをノード間で順々に送ることにより、サーバのボトルネックを回避します。
しかしながら、リング構造ではリングの中の、たった一台に問題が生じても、全体のディスククローニングが停止してしまい、最初からやりなおしとなってしまいます。
`dolly+'は`dolly'に、マルチスレッドとパイプラインによる高速化と、全ノードの中の一台のノードの異常により全体がとまらないような信頼性向上の仕組みを入れたソフトウエアです。dolly+ は、たとえば 100BaseTX で接続されたノード40台のコピーを、1台にコピーするのとほぼ同じ時間(たとえば2GB程度であれば5分以内)で行います。理論上では数百台規模まで同様の時間でコピーを行うことが可能です。
オリジナルの`dolly'のホームページは ここ から(dolly のみのページはここ )
|
dolly と dolly+ の違い |
| コンフィグファイルについては、dolly+は dolly (v.0.2) の上位互換. | |
| マルチスレッディングによる、ノード内での高速転送(ネット→メモリー、メモリー→ディスク、メモリーネットの3スレッド) | |
| 複数のファイルの転送. | |
| フェイルセーフ機構 (ノード(連続した2台では復旧できない)故障があった場合、そのノードはバイパスされる。) | |
| コピーされるファイルを持つマスター (dollyS)と、コピーされるノード (dollyC)のソフトウエアを分離した。 |
| dollyを走らせるのに必要なコンフィギュレーションファイル |
dolly,dolly+はノードを論理的なリング構成に配置するため(実際の接続は通常のスイッチハブでつなぐなどしてかまわない)、そのリング配置や転送ファイルを指示すべき設定ファイルを dollySに与えてやる必要がある。書式(キーワード(例における青色の文字)の出現の順番、位置など)は非常に厳密である。
dolly で必要な設定ファイルの例
|
infile /dev/sda102 outfile /dev/sda103 server cluster-master firstclient node01 lastclient node09 clients 9 node01 node02 ..... node09 endconfig |
<- マスターにおける入力ファイル名 <- ノードにおける出力ファイル名 <- マスターホストのネットワーク名 <- 最初のノードホスト名 <- 最後のノードホスト名 <- ノードホストの台数 <- ノードホスト名のリスト
<- 設定ファイルの最後を示すキーワード |
dolly+ は上記の設定例も受け付けるがその他、下記の例のようなキーワードを受け付ける。
|
iofiles 3 /dev/hda1 > /tmp/dev/hda1 /data/file.gz >> /data/file boot.tar.Z >> /boot server cluster-master firstclient node01 lastclient node09 clients 9 node01 node02 ..... node09 endconfig |
<- コピーするファイルの数 <- *1 <- *2 <- *3 <- マスターホストのネットワーク名 <- dolly+ はこのキーワードがあれば内容は無視 <- dolly+ はこのキーワードがあれば内容は無視
<- ノードホストの数
<- 終わりのキーワード |
*1: この例では /dev/hda1がコピーされる入力ファイルで、/tmp/dev/hda1が
出力ファイル名. '>'は dolly+ はこのファイルに変更を加えないことを示す。*2: この例では /data/file.gz が入力ファイルであり、出力ファイルが /data/file
'>>' は dolly+ が各ノードで cpio, tar や gzip を名前によって起動し、
tar ファイル展開や非圧縮を行うことを示す。サポートされているものは
'.tar.', '.gz', 'tar.gz','tar.Z','cpio','cpio.gz','cpio.Z' である。
*3: この例では 入力ファイルが ./boot.tar.Z で、展開するディレクトリーが /boot.
'>>' で、入力ファイルが 'tar' または 'cpio'の場合、>>の左辺はディレクトリー名である必要がある。
|
Source code |
dolly+ は Linux RedHat 6.1, 6.2, 7.1, 7.2 でのみテストされているが、pthred ライブラリーを持っていれば Unix 系のシステムへの移植は比較的容易(異常時パイパス機構を除く)とおもわれます。 ソースコード(ver.0.93) .
2002年3月より、dolly+は東工大松岡研究室クラスターチームと共同で開発をすすめることとなり dolly+ の開発は以下の CVSリポジトリで管理が行われています.以下の手順で最新版を取り寄せることができます.
cvs login (一回だけ行う)
% cvs -d :pserver:anonymous@plateau.is.titech.ac.jp:/var/lib/cvs login
CVS password: [CR] # 空文字列
checkout
% cvs -d :pserver:anonymous@plateau.is.titech.ac.jp:/var/lib/cvs checkout dolly
CVS に基づいた開発に参加したいときは、 <takamiya@matsulab.is.titech.ac.jp>
にアカウント名と、UNIX の /etc/passwd 様式で暗号化されたパスワードを送っ
て下さい。この場合 cvsroot は:pserver:<アカウント名>@plateau.is.titech.ac.jp:/var/lib/cvs
となります。 このソフトに関心を持っていただいた方々が開かれた開発に参加してくださることを期待します。
|
Binary code |
バイナリーコードはRedHat 6.1 で static linkにより作成されています。 ここ.からお取りください。できるだけ、CVSコードからコンパイルすることをお勧めします。
|
dolly + の起動の仕方 |
マスターホストで % dollyS -vf 'configuration-file'
すべてのノードホストで % dollyC -v
(% is just a OS prompt)
|
Idolly+ をシステム(OSを含む)のインストレーションに使うためには、OSがインストールされる前の時点でdolly+が起動される仕組みが必要。 |
このために RedHat kickstart と PXEを使用していますが、これに関するページは現在準備中です。
|
バグ |
バグを発見された方は manabe@corvus.kek.jp までメールをください。
|
Mailing List |
dolly+ に関する情報を交換するために,以下のメーリングリストが用意されて
います.
dolly+ ML <dolly@matsulab.is.titech.ac.jp>
dolly+ の開発について語り合うメーリングリストです。
参加方法:
<dolly-ctl@matsulab.is.titech.ac.jp>宛てのメールの本文に、
subscribe あなたの名前(E-Mailアドレスではありません)
と書いて送って下さい。折り返し確認のメールが送られて来ますので、
指示にしたがって手続きをしてください。
登録は 自動登録です。
例:
subscribe Yasuhito TAKAMIYA
脱退方法:
<dolly-ctl@matsulab.is.titech.ac.jp>宛てのメールの本文に、
unsubscribe
end
と書いて送って下さい。 自動的にリストから削除されます。
|
Presentations |
A presentation in 'Computer in High Energy Physics 2001 in Begin'
| 更新履歴 |
| 2003/12/9 |
設定ファイルで行中に#が現れたら、それ以降をコメントとして無視するようにした。転送に利用するポートの番号を指定できるようにした。Dolly+サーバとクライアントに追加した以下のオプションを利用することにより指定できる。
(東工大 滝沢さん)
| オプション | 解説 |
|---|---|
| --dataport portnum | 転送ポートとしてportnum番ポートを使用。dataportのデフォルト値は9998。 |
| --cntlport portnum | 制御ポートとしてportnum番ポートを使用。cntlportのデフォルト値は9997。 |
| --report portnum | Pingモードでportnum番ポートを使用。reportのデフォルト値は9996。 |
| -P portnum | reportにportnumを、cntlportにportnum+1を、dataportにportnum+2を設定。 |