コンピュータは大部分の時間空いています。xload や top のようなシステムの 利用状況をモニタするプログラムを動かせば、恐らくプロセッサのロードの平均 が 1.0 にさえも届かないことがわかるでしょう。コンピュータが 2 台以上ある なら、どんな時でも少なくとも 1 台は何もしていない公算が大きいでしょう。 残念なことに、本当に CPU パワーが必要となる時には− C++ をコンパイルして いる時や Ogg Vorbis の音楽ファイルをエンコードしている時−同時にもっと たくさんの CPU が必要です。クラスタリングの背景にあるアイディアは利用できる すべてのコンピュータに負荷をばらまき、他のマシンで空いているリソースを使う ことです。
クラスタの基本構成は、単独のコンピュータです。これは「ノード」とも呼ばれ ます。クラスタはさらにマシンを追加することで拡張−「サイズ」や「スケール」 という表現をとります−が可能です。クラスタは概して個々のマシンが速いほど、 マシン間の接続速度が高速なほど、パワフルになります。 さらにクラスタのオペレーティングシステムは、状況変化に応じて利用可能な ハードウェアを最大限に活用しなければいけません。クラスタが様々なコンピュータ のタイプから構成される場合(「異種」クラスタ)やクラスタの構成が不用意に 変化し(マシンがクラスタに出たり入ったりする)負荷が事前に予測できないと、 最大限に活用するのにはいっそう多くの困難が伴います。
クラスタは 3 タイプあります。フェイルオーバーとロードバランシングと ハイパフォーマンスコンピューティングです。 既設の大部分は、恐らくフェイルオーバーとロードバランシングです。
フェイルオーバークラスタはネットワーク接続した 2 台以上のコンピュータで、独立したハートビート接続を 2 ホスト間で結んで います。 2 ホスト間でのハートビート接続は、全サービスが利用可能かどうかをモニタする のに利用します。1 つのマシンでサービスが落ちると、別のマシンがサービスを 引き継ごうとします。
ロードバランシング・クラスタのコンセプトは、例えば Web サーバにリクエスト が来ると、クラスタが最も暇なマシンをチェックして、そのリクエストを該当する マシンに送るというものです。現実にはロードバランシング・クラスタはフェール オーバークラスタにロードバランシング機能を追加し、さらに多くのノードを伴う ケースが多くあります。
最後に挙げるクラスタは、ハイパフォーマンス・コンピューティングのクラスタ です。 マシンはデータセンターが必要とする高い性能に見合うように、特別にチューニング されています。Beowulf は研究施設で求められる計算速度を得るのに焦点を当て、 開発されました。 このタイプのクラスタは、ロードバランシング機能も持っています。異なるプロセスを より多くのマシンに分散させることで性能を得ています。しかし結局はプロセスは 並列化され、独立して動作できるルーチンはお互いに終了を待つことなく異なる マシンに分散されています。
ロードバランシングとフェイルオーバータイプのクラスタの例として広く 知られているのは、Web システムやデータベース、ファイアーウォールです。 このサービスには 99.99999 % の稼動率が要求されています。インターネットは年中 無休で動いており、もうオフィスが閉まるとサーバを落とすという時代ではありません。
CPU サイクルが必要な場合、ダウンタイムを予定に入れても差し支え ないでしょう。しかしそれは必要な時に最大限のマシンパワーが手に入るケースです。
これまでスーパーコンピュータは、限られたベンダーによってのみ構築されて きました。スーパーコンピュータのような性能を必要としている企業や組織は、 巨額の資金を準備できなければいけませんでした。大学の多くは自力でスーパー コンピュータのコストを賄えませんでした。そこで他の手段を検討しました。 まず異なるジョブをより多くのコンピュータに分散し、ジョブの結果のデータを 集めてこようとしたことから、クラスタという発想が生まれました。もっと安価で 誰もが利用できる一般的なハードウェアによって、これまでただあこがれていた だけだったスーパーコンピュータと同じ結果が得られます。しかし PC プラット フォームはさらに進化し、スーパーコンピュータと複数のパーソナルコンピュータ で組んだクラスタ間の性能差は縮まって行きます。
並列処理にはやり方がいくつかあります。(N)UMA、DSM、PVM、MPI がそれで、 様々な並列処理手法をとっています。ハードウェアで実装されているものもあれば、 ソフトウェアによるもの、またはその両者によるものもあります。
(N)UMA ((Non-)Uniform Memory Access)は、コードの実行を共有メモリ上で 行えるマシンの例です。Linux カーネルには NUMA の実装が入っており、異なる 場所にあるメモリへのアクセスタイムに修正を施してあります。CPU に最も近い メモリを使用するのはそれを使っているカーネルの役目です。
DSM、つまり分散共有メモリ(Distributed Shared memory)は、ソフトウェア、ハードウェア両者で実現しています。分散している 物理メモリに対して、仮想レイヤを提供するのがコンセプトです。
PVM と MPI は GNU/Linux ベースの Beowulf を語る時に頻繁に使われるツール です。
MPI はメッセージパッシングインタフェース(Message Passing Interface)の略称です。メッセージパッシングライブラリの標準規格です。 MPICH は MPI の実装の中で一番利用されている実装です。MPICH の次によく 見かけるのが LAM です。MPI ベースの別実装で、ライブラリがフリーでリファレンス 実装されています。
PVM(Parallel Virtual Machine)は MPI の同系統で、Beowulf を構築する ツールとしてよく利用されています。PVM はユーザ空間で動きますので、 カーネルに特別な修正を施す必要はありません。ユーザが十分な権限を持って いれば PVM は動作します。
openMosix ソフトウェアパッケージを使えば、ネットワークに接続している GNU/Linux が動作しているコンピュータを、1 つのクラスタに変えられます。 クラスタに所属するノード間で自動的に負荷分散します。そしてサービスを 中断することなく、ノードが動作中のクラスタに出たり入ったりできます。 接続速度や CPU 速度に応じて、負荷をノード間に分散します。
openMosix はカーネルの一部であり、Linux と完全互換であるように メンテナンスされています。したがってユーザのプログラムやファイルその他 のリソースは、何も変更することなく動作します。一般ユーザは 1 台の Linux と openMosix システムの区別がつかないでしょう。一般ユーザにとって、クラスタ 全体が 1 台の(高速な)GNU/Linux システムとして機能するからです。
openMosix は IA32 互換のプラットフォームで動く標準的な Linux と完全互換 なカーネルパッチとして用意されます。内部のロードバランシング・アルゴリズム によって透過的にプロセスを他のクラスタのメンバーにマイグレートします。 長所はノード間でロードバランシングがうまく働くことです。クラスタ自身が 稼働率を常時最適化しています(システム管理者は、手動で動作中の自動ロード バランシングを設定変更できます)。
この透過的なプロセス・マイグレーション機能は、クラスタ全体をクラスタ・ノード で利用できるだけのプロセッサを搭載した 1 つの「大きな」 SMP システムのように 見せます(X 台なら X 個プロセッサを積んだシステムになります。 例えば デュアル、クワッドシステムというように)。openMosix は HPC 向けに最適化 されたファイルシステム(oMFS)も用意しています。NFS とは異なり、キャッシュや タイムスタンプ、リンクの整合性があります。