統合ディスクレスネットワーク基盤システム

http://viver.sourceforge.jp/
VIVERプロジェクトについての報告。(大学生の方々に於いては研究テーマの参考にでもなれば幸いです)


統合ディスクレスネットワーク基盤システムVIVERの当初の目的は、ネットワークパッケージ化することでした。
ここで言う「ネットワーク」とはファイルサーバーなどの各種サービスも含んでいて、「パッケージ化」とは必要とする人にとって誰でも使える状態にすることを意図しています。


現在VIVERプロジェクトは停滞しています。その一因は、「動的」なネットワークを構築するには「動的」なストレージが必要だったためです。
ここで「動的」と言う言葉を使いましたが、これは次のような意味です:

「動的である」ということは、あらかじめ設計や仕様を固めたりせずに、そもそも変化があることを前提とし、作っているプログラムやサービスもどんどん変化させていくこと。


サーバーとネットワークの動的な構築について


VIVERプロジェクトは「動的なネットワーク」を「パッケージ化」したいという意図がありました。


動的なネットワークをどうやってパッケージ化するか。その方法として、1枚のCDやDVDの中にOS全体を格納してそこから1台のホストを起動し、さらに他のホストをネットワークブートして、起動したホスト同士が互いに通信し合うことで、誰がサーバーになるか、どのサーバーに接続するかを自律的に決定することを考えました。
しかしここで問題になると感じたのが、どうやって通信し合うか、そしてネットワーク上に何台のホストがいるのか、そのIPアドレスは何かといった情報や、新しいホストが追加されたり、あるいはホストに障害が発生したなどのイベントを監視する仕組みが必要になるだろうと言うことでした。


それらの仕組みを提供し、サービスを構築する要素をプラグインとして簡単に実装できるようにする基盤を目指したのが RUNES (Role-based Unified Network Extension System) です。

他のホストからの通信を受け取れると何が嬉しいかというと、NFSサーバープラグインが別のホストのNFSクライアントプラグインからメッセージを受け取ったときに自分のIPアドレスとexportしているパスを返すとか、サービスの発見→設定が可能になる。
RUNESの目指すところ(後半から)

「プラグイン」の集合で分散・多重化ネットワークを構築する。「プラグイン」は何かのサーバーを設定したり、一緒にAPIを提供したりもする。
多重化・負荷分散の自動化
Zeroconf


RUNESはまったく未完成でほぼ名前だけのプロジェクトですが、一部分だけ実装したところはこんな風になっています:

起動時にロールを割り当てることで、適用するパッケージを変更することが出来ます。
ロールにはあらかじめ設定されているプリセットロールと、自由に定義できるオプショナルロールがあります。プリセットロールは起動方法によって自動的に割り当てられます。オプショナルロールは複数割り当てることが出来ます。


...(中略)...


すべてのコンピュータでホスト名やfstab、X Window Systemが適切に設定される一方、サーバーソフトウェアはオプショナルロールrootが設定されたコンピュータでのみ起動します。

VIVER動作概要


VIVERの一つの特徴は、ブートサーバーを落としてもネットワークブートしたクライアントは落ちないし、クライアントの台数が増えてもブートサーバーに負荷が集中しない点です。これは分散多重化共有ブロックデバイス V-FIELD によって実現されています。
ネットワークブートによってマシンをどんどん追加することができ、さらに減らすこともできます。これは「動的」だと言えます。


では他のシステムはどうか。V-FIELDの様に一つのソフトウェアでは完結しないとしても、様々なソフトウェアを組み合わせて構築できないか。構築された「動的」なシステムをパッケージにまとめて、誰でもどこでも運用できるようにすることはできないか。

資料の中にもありますが、やはり難しいのは、永続的なストレージの多重化と負荷分散のようです。

ストレージでもいろいろなソフトウェアが開発されていますが、「スケールアウトするか」「動的な運用が可能か」という観点から考えると、これだ!というものが無いというのが事実ではなかろうか。


スケールアウトする分散ファイルシステム


そんなわけで、今の興味は「動的」なストレージを実装することにあります。


VIVERを作り始めたのは高校3年の頃にプロトタイプ(1CD Linuxクラスタ)を作ったところからで、本格的な開発は大学に入学した2006年から2007年の2月ごろまで継続していました。
その後も分散システムに興味を持ちつつも、Partty! や WikiForme などのツールを開発する期間が続いていました。しかしうまく世に出せていないことで焦りもあり、2007年の10月にはVIVERプロジェクトの中で完成しているネットワークブートの部分だけを切り出した VIVER CORE をリリースしています。
(ちょっとこの頃Webに手を出していて、Partty!.orgを公開したりしています)


しかし2008年の3月に1000speakers:3に参加したのは一種の転機でした。そこで id:nyaxt と出会い、その場で分散ストレージCagraの開発を始めました。Cagraはその約1ヶ月後にアルファ版をリリースしています。
(その後少し空白の期間が…Aerialを公開したりパーサジェネレータを書いていたあたり)
また楽しくなってきたのは2008年の7月頃から。memcachedのストリームパーサを書いたり。MessagePackはこの夏休みで一気に実装し、8月に公開しています。途中festivoice.netを公開したりもしてますが、最近はストレージシステムに関わっています。


VIVERの用途は、主にクラスタリングシンクライアントを考えていました;

SSI(Single System Image)で仮想PC方式と同じようなリソースの動的分散が可能かもしれません。キーワードはopenMosix、OpenSSIなど…。
シンクライアントとVIVER 2

クライアント側にデータを保存させず、すべてのデータをサーバーで管理することを強制するシステム
シンクライアントとVIVER 1
地方自治体のシステム
ブレード型製品事例


最後に未踏ユースに応募したときの提案書へのリンクを張っておきます:

約半年の開発期間が終わったあとの成果報告書: