第 2章クラスタリングの概念

この章では、Turbolinux Cluster LoadBalancer 11 の動作を理解するのに必要ないくつかのクラスタに関する一般的な基本概念を説明します。これらの概念は、クラスタシステムを構築するのに理解しておく必要があります。また、クラスタシステムの構築時における、その他のオプションについて理解するのにも役立ちます。

この章では、以下のトピックについて説明します。

2.1. クラスタとは

クラスタとは、複数のコンピュータシステムを1台のコンピュータシステムのように扱うシステムです。その定義は単純に聞こえますが、これと同じような技術が他にもいくつか存在します。これらの技術の相違は微妙かもしれません。

コンピュータクラスタリングは 1980 年代からさまざまな形態をたどってきましたが、もともとは Digital VAX プラットフォームで開発されました。クラスタ化されたサービスを提供するために、VMS オペレーティングシステムと VAX ハードウェアが結合されました。これらの VAX クラスタはディスク容量などのハードウェアリソースを共有でき、複数のユーザーに対してコンピューティングリソースの提供が可能でした。

この項では、クラスタとは何かについて説明します。次に、クラスタリング技術の違いを示すため、これに関連する並列処理技術のいくつかの概念を紹介します。

2.1.1. クラスタの構成

クラスタリングは、並列コンピューティングの 1 つの形態にしかすぎません。クラスタリングと他の関連する技術を区別する重要なポイントの 1 つは、クラスタを 1 つのエンティティまたはスタンドアローンシステムの集合として見なすことができるかどうかです。例えば、Web サーバーのクラスタは 1 つの大きな Web サーバーであるかのように見なすことができ、それと同時にクラスタ内の個々のシステムは必要に応じて個々のシステムとしてアクセス可能です。

クラスタ内の各システムは別々のコンピュータであるため、それぞれ独自のハードウェア、オペレーティングシステム、およびソフトウェアを使用しています。クラスタは、すべてのシステムが同じハードウェアで同じソフトウェアを実行している同機種環境にすることもできますし、異なるハードウェアで異なるオペレーティングシステムを実行している異機種環境にすることもできます。

2.1.2. 関連技術

クラスタリングは、並列処理技術の連続体に属します。これらの主な違いは、リソースが共有または重複されるレベルをもとに区別されます。最も低いレベルの場合、システムは 1 つのマザーボードに複数のプロセッサを持ち、他のすべてを共有します。高いレベルでは、分散処理は複数のコンピュータを実装しますが、システムは一般的に 1 つのエンティティとしては見なされません。

以下にいくつかの並列方法を示します(最も厳密な結合から最も緩和な結合の順)。

  • SMP

  • NUMA

  • MPP

  • クラスタリング

  • 分散処理

すでに説明したクラスタリングを除く、上記のそれぞれを以下より説明します。

2.1.2.1. SMP

現代のマルチプロセッサシステムは、対称(シンメトリック)タイプが一般的です。これは、他のプロセッサより重要なプロセッサは存在せず、すべてのリソースがすべてのプロセッサで均等に使用できることを意味します。このタイプのシステムは、対称マルチプロセッシングまたは SMP と呼ばれます。1 つのコンピュータは複数の CPU を持ちますが、共有メモリ領域と共有 I/O 機能は 1 つです。

コンピューティング問題を透過的に同時プロセスに分割し、これらを同じマシンの別々のプロセッサで実行できるようにするというのが、SMP の考え方です。ここで強調するのは透過性です。つまり、同じプログラムが 1つのプロセッサマシンで区切られた時間に実行でき、開発ツールはもとになる並列を意識する必要がありません。

SMP マシンでは、オペレーティングシステムが、使用可能な CPU 間でアプリケーションを実行する個々のプロセスを分割します。SMP マシンは、スレッド化されたプロセスまたは軽量プロセスを使用するオペレーティングシステムやプログラムで使用するのが最も適しています。Windows NT は非常にスレッドベースなマシンで、Linux プロセスはかなり軽量なプロセスなので、ともに SMP ハードウェアで非常に最適に動作します。

2.1.2.2. NUMA

SMP コンピュータはメモリ共有スキームを使用しており、各プロセッサはコンピュータのすべての物理メモリに同じレベルのアクセスを持ちます。このようなスキームは、 UMA(uniform memory access)として知られています。NUMA はより複雑な技術で、マルチプロセッサコンピュータの複数のプロセッサは単純な SMP よりも効率的な方法で共有ローカルメモリにアクセスできます。各 CPU は 1 つのメモリ領域に直接高速アクセスを行いますが、システムの他のメモリ領域へのアクセスは即時的には行われません。

特定のプロセッサが指定した範囲の物理メモリを有利にアクセスできるようにするというのが、NUMA の基本的な考え方です。NUMA マシンは、単純な SMP マシンと大きな並列システムとの間の中間ステップと考えることができます。NUMA システムではメモリのどの部分もアクセスできます。ただ、他よりもいくつかのメモリアドレスをアクセスするのに時間がかかるだけです。しかし、非ローカルメモリをアクセスする時間は、ディスクまたはネットワーク I/O をアクセスするよりもはるかに高速です。

NUMA マシンのシステムバスは、非常に複雑です。これはよく、バスへのコネクションをたくさん持った網目状に実装されます。また、整合性が主要な問題点となっています。ccNUMA という用語を目にしたことがあるかもしれませんが、これは、システムがキャッシュの整合性を維持することを示します。CPU がメモリをアクセスしているときは、検索しているデータが修正されていないことを確認するために、他のすべてのプロセッサのキャッシュ内部をチェックする必要があります。

NUMA システムは、並列コンピューティング(プロセッサ内通信)による主要な問題を最適化します。クラスタと大型並列システムでは、通信はいくつかの種類のネットワークを周回するため、プロセッサ間の通信のオーバーヘッドは非常に高くなります。NUMA は高速なバスを使用して、共有メモリを介して通信します。非ローカルメモリのアクセス速度はローカルメモリアクセスの速度ほど速くありませんが、ネットワーク上での通信よりはかなり高速です。

NUMA マシンは数多くのプロセッサを上手に調整します。したがって、計算スループット用の大規模並列システムのパフォーマンスに対抗できます。欠点は想像がつくかもしれませんが、これらのマシンの設計がナノ秒のタイミングとアービトレーションスキームをもとにした、非常に複雑なアルゴリズムを使用していることです。したがって、これは高価なマシンを使用する傾向にあります。しかし、これにはアプリケーションソフトウェアの観点から見ると大きな利点があります。それは、プロセッサ間のすべての複雑なメモリアービトレーションが不可視であるということです。大規模並列システムは非常に高速ですが、その速度を利用するにはマシンを問題ごとに構成する必要があります。NUMA は、開発ツールの使いやすさやリソースの透過性の効率とのトレードオフです。

2.1.2.3. MPP

大規模並列処理(massively parallel processing:MPP)は、まさに並列コンピューティングの世界のヘビー級です。MPP モデルでは、各ノードは独自の専用リソースを持った個々のプロセッサで構成されています。コンピューティング問題をパーツに分け、お互いが多少独立して個別に計算できるようにすることが、MPP システムの考え方です。同様に、システムのアーキテクチャにはかなり独立した単位が存在します。大規模並列システムは、通常、ハイエンドの計算集中型操作に使用されます。たとえば、現在世界で最も高速なコンピュータとして記録を保持しているシステムは、核爆発をシミュレートする数学的モデルを作成するのに使用されている MPP システムです。

MPP はクラスタリングと非常に密接な関係ですが、MPP システムの各ノードは通常完全な I/O 機能を持っていません。MPP システムの各ノードは、スタンドアローンコンピュータとしては実行できません。MPP システムはたいてい一般のクラスタよりも大型ですが、ベオウルフなどのプロジェクトではその区別がはっきりしていません。

MPP における問題の 1 つは、プログラムを並列システム用に明確に記述しなければならないことです(この問題はベオウルフを含むクラスタの一部のタイプにも当てはまります)。これには、PVM と MPI の 2 つの共通 API が使用されています。これらの API は、並列で計算可能なかたまりに問題を分類することに専念しています。したがって、解決すべき問題がこのような方法で分類できない場合、MPP システムはあまり役に立つシステムではなくなります。

2.1.2.4. 分散処理

おそらく、分散処理はこの章で説明するすべての用語の中で最も定義しにくいと言えるでしょう。基本的に、分散処理は実行すべき作業の各部分が、異なる場所で行われることを意味します。分散処理の最も一般的な例は、クライアント/サーバーアーキテクチャです。サーバーが特定のジョブを実行し、クライアントがタスクの別の部分を実行して、通常はユーザーに情報を表示するタスクを実行します。

分散システムは、クラスタよりも結びつきが緩くなっています。事実、一般にこの結びつきを見ることは困難です。全体として処理される 1 つのエンティティは通常存在しません。分散処理では、ノードは自己のアイデンティティを保持しますが、クラスタノードは通常それを保持しません。たとえば、分散処理システムでは「サーバー Y からデータ X を検索してください」という表現になりますが、クラスタでは「クラスタからデータ X を検索してください」という表現になります。