Logo address

分散システムの構築

目次

1998/09/25 更新

分散システムの構築は単体システムに十分慣れてから行うのが良い。一筋縄では行かないのだ。単体システムでシステムの更新を行えるようになる事が、分散システムに手を出す目安と考えれば良い。またここでも読者がカーネルの更新経験を持っている事を前提に解説する。

システム構成

筆者のシステムを例に解説する。
筆者のシステムは4台の PC からなる。

筆者のシステムでは認証サーバのファイルシステムはファイルサーバを使用せずにローカルディスクを使用している。この方が(管理は手間がかかるが)セキュリティを高める事ができる。

分散システムを構築した当初の筆者のシステムは何れも日立 Flora1010(i486DX2) であった。このマシンを選んだ理由は、大学のパソコンが更新された結果、周りにたくさん転がっていたからにすぎない。

イーサネットカードの選定

最初の困難はファイルサーバの構築であった。イーサネットカードとの相性が何故か悪いのである。Plan9端末では 3C509B, SMC Elite, NE2000 の何れも問題なくパスしたが、ファイルサーバは NE2000 だけがパスした。原因はファイルサーバのカーネルのバグにある(see: ftp://plan9.aichi-u.ac.jp/patchs/info)。以下に3つのカードの相性を表に纏めておく。LD-NE20() とは NE2000互換カードである。

stand alone file server CPU server
3C509B OK NG OK
LD-NE20 OK OK NG
SMC Elete OK NG ?
表1 Flora1010(i486DX2)で利用可能な ethernet card

表1の説明

単体システム(stand alone system) は何故他に比べて多種のイーサネットカードを扱えるのだろうか? "Plan9 - The Documents -" に書かれている通りにファイルサーバや CPU サーバをインストールすると CD-ROM 付属のカーネルが使用される。このカーネルで使用されているドライバは旧いので問題を引き起こしているのではないかと疑われる。対処の仕方は後に述べる。

パスワードの与え方

第二の困難はシステム管理の仕組みが良く分らないことから発生した。
Plan9ではサーバ相互の信頼関係を、共有パスワードで結んでいる。即ち、ブート時に
パスワードが要求されるが、全てのサーバで同一のパスワードを与えるのである。これをマシンパスワードと呼んでいる。ファイルサーバの管理者のユーザ名は adm であり、
その他のサーバでは(デフォルトの名前は) bootes である。そして、ユーザ bootes にもマシンパスワードと同一のパスワードを別に与えなくてはならない。このことを知るのに筆者は1か月も無駄な時間を費やしてしまった。

分散システムを組む場合の主要な困難は認証関係がうまくとれないことから発生している。最初は認証問題を可能な限り避けた方がよい。サーバの認証問題がクリアされれば、次に待っているのはユーザ認証である。ユーザ認証は、以下のステップでクリアして行くのが良いだろう。

  1. user = none で使える様にする事
  2. ファイルサーバを立ち上げる時に config: allow を設定する事
Plan9 ではファイルシステムがマウントされる際にユーザ認証が行われる。ユーザ認証は login 時のパスワードに基づいて自動的に行われるが、その際
  1. 認証サーバにユーザパスワードが登録されている事
  2. マウントの対象となるファイルシステム毎にユーザが登録されている事
が必要となる。

認証サーバのパスワードは(認証サーバの) /adm/users に登録されている。このファイルは bootes のキーによって暗号化されているが、認証サーバのサービスプログラム keyfs はそれを復号化した結果を
/mnt/keys にユーザ毎に見せてくれている。(従って認証サーバの現在の認証サービスを調べるにはこのディレクトリを見るのが良い。)

ファイルシステムのユーザ登録の様子は
/adm/users で見る事ができる。

サーバの構築

Plan9はメニュー形式でインストレーションができ、(何事も問題が発生しなければ) FreeBSD のインストレーションメニューよりも遥かに分りやすい。しかしこれは単体システムの場合である。

"Plan9 - The Documents -" に書かれている分散システムのインストレーションの手順(以下「手引書」と呼ぶ)は、そのまま成功すれば非常にラッキーである。しかし普通は途中で問題が発生するであろう。その場合には、初めからのやり直しが続くことになり挫折し兼ねない。
分散システムの場合には問題が発生した場合に考えるべき可能性が余りにも多い。その場合手引書に従っていたのでは手戻が多すぎるのである。完成するまでの手順が多くても確実に前進する方法が好ましい。

筆者は結局手引書の手順に従うのを放棄し、むしろ動作の仕組みを解明し、1つ1つ原因を潰しながらシステムを組み立てていった。従ってもしも読者が手引書通りのインストレーションが出来なかったら諦めないで筆者が薦める以下の手順に従ってやってみるが良い。

スムーズにシステムを構築するには最初は 4 つの PC (端末、認証サーバ、 CPU サーバ、ファイルサーバ) の相互依存性を極力避けるのが良い。

端末、CPU サーバ、 認証サーバは最初は全て単体システムとして作成し、その段階での動作確認を行う。ここまでの作業は既に単体システムの構築経験からやっていけるはずである。単にシステムの名前を CPU サーバらしく、あるいは認証サーバらしく読者の好みの名前にするだけである。ネットワークもこの段階でテストを行う。

単体テストが済んだら、CPU サーバと認証サーバの /dev/hd0boot ( scsi を使っていれば /dev/sd0boot ) に /386/9pccpudisk をコピーする。コピー後の最初の立ち上げではまだ /dev/hd0nvram の内容は作成されていない。この場合には、ここに格納すべき情報の問い合わせがあるであろう。問い合わせに従って答えていくが、大切な事はサーバのパスワードは全て統一する事だ。(このパスワードは決して忘れてはならない。)

以下に単体システムと比較したサーバの特徴を述べる

実はこうした外面的な違いとは異なる本質的な違いがある。単体システムではユーザによる /dev/key/dev/hostdomain への書き込みはできないがサーバでは可能な事である。

CPU サーバと認証サーバの違いは単にサービスの違いだけである。そしてそのサービスの違いを決めているのは /bin/cpurc である。

認証サーバに対してはユーザのパスワードを登録する必要がある。このとき bootes もユーザとして登録し、bootes のパスワードをサーバを立ち上げる時のパスワードと同じに設定する。

ファイルサーバも単体で立ち上がる。そのためのブート用のフロッピーディスクの作成までは手引書に従うのが良い。作成されたフロッピーディスクの中の 9fs は更新版と交換するのが良い。その方が利用可能なネットワークカードの種類が増える。
CD-ROM をインストールするまえにユーザ登録は済ませた方が良いだろう。そうすればファイルサーバを(ユーザ none としてではなしに) マウントができる。ファイルサーバの名称を 9fs としよう。端末からコマンド

	9fs 9fs
を実行しマウントできればネットワークと認証関係に問題が無いことが確認できる。(コマンド 9fs の引数がファイルサーバの名称である。)

ファイルサーバへの CD-ROM のインストレーションは手引書に従えば良いであろう。
ファイルサーバをマウントできるのだから直接コピーと言う手もあろうが、その場合にはファイルのオーナーも作成日もあるべき姿にはならない。

ファイルサーバに CD-ROM がインストールできたらファイルサーバを端末と CPU サーバのファィルシステムとして設定する。その為には/dev/hd0boot/386/9pc/386/9pccpu をコピーすれば良い。

端末とCPUサーバに対してカーネルを認証サーバから供給する事も可能である(ネットワークブート)。この場合認証サーバの/lib/ndb/local
中の端末と CPU サーバの bootf の値を各々 /386/9pc 及び /386/9pccpu に設定し、また端末と CPU サーバの plan9.ini の中の
bootfile を e!0 に設定すればよい。(この場合もはや端末とCPUサーバの /dev/hd0boot は使用されない。)

もっとも必ずネットワークブートを行う必要もない。ネットワークブートを行なわないのであれば /lib/ndb/local の bootf の値は参照されない。

小道具

分散システムを組む際には認証問題をチェックする為の小道具を作成しておいた方が良い。筆者も幾つかの小道具を作成した。

これらは極簡単なプログラムなので筆者は ftp で公開する気にもなれない。プログラミングの練習だと思って読者自ら作成してみるが良い。

まとめ

B.COM の実行によって、インストレーションメニューが立ち上ったり、Plan9 が立ち上ったりする。この違いを決めて入るのは plan9.ini に指定されている bootfile である。メニュを立ち上げるために plan9.ini を変更するのは面倒である。代わりに単に
C> plan9¥b hd!0!/plan9/386/9dos
を実行してもよい。

端末とサーバの違い、標準のファイルシステムとしてローカルディスクを使うか、ファイルサーバを使うかの違いを決めているのは、カーネルである。

カーネルはローカルディスクまたは認証サーバから供給される。
どこから供給されるかを決めているのは plan9.ini の bootfile である。
bootfile=h!0 であればローカルディスクの /dev/hd0boot が使用され、
bootfile=e!0 であれば認証サーバの /lib/ndb/local の中の bootf で指定されたカーネルが使用される。

端末用のカーネルは

	/386/9pc
	/386/9pcdisk
の2種、CPU サーバのカーネルは
	/386/9pccpu
	/386/9pccpudisk
の2種である。各々標準のファイルシステムとしてファイルサーバを使用するかそれともローカルディスクを使用するかを定めている。

分散システムでは端末やサーバはネットワークブートを行うのが通常の考え方である。
この場合には(通常は)認証サーバがブートファイルを提供する。従って認証サーバから見たシステム設定ファイルである

	/lib/ndb/local
の内容、即ち、bootf の設定と
実際のカーネルファイル
	/386/9pc
	/396/9pccpu
が問題になる。(つまりファイルサーバのファイルが問題になっているのではない。)
CPU サーバは 9pccpu を、 端末は 9pc が使用される様に設定する事。