


コンピュータクラスタとは、自律的なコンピュータのグループが連携して動作し、単一のシステムとして見なせるものです。[ 1 ]グリッドコンピュータとは異なり、コンピュータクラスタでは各ノードが同じタスクを実行するように設定されており、ソフトウェアによって制御およびスケジュールされます。クラスタコンピューティングの最新の形態はクラウドコンピューティングです。
クラスタのコンポーネントは通常、高速ローカルエリアネットワークを介して相互に接続され、各ノード(サーバーとして使用されるコンピュータ)は独自のオペレーティングシステムのインスタンスを実行します。[ 1 ]ほとんどの場合、すべてのノードは同じハードウェア[ 2 ]とオペレーティングシステムを使用しますが、一部の構成(たとえば、 Open Source Cluster Application Resources (OSCAR)を使用する場合)では、各コンピュータで異なるオペレーティングシステムまたは異なるハードウェアを使用できます。[ 3 ]
クラスタは通常、単一のコンピュータよりもパフォーマンスと可用性を向上させるために導入され、[ 1 ]同等の速度または可用性を持つ単一のコンピュータよりもはるかにコスト効率が高いのが一般的です。[ 4 ]
コンピュータクラスタは、低コストのマイクロプロセッサ、高速ネットワーク、高性能分散コンピューティング用ソフトウェアの普及など、多くのコンピューティングトレンドの収束の結果として出現しました。クラスタは、数個のノードを持つ小規模ビジネスクラスタから、 IBMのSequoiaのような世界最速のスーパーコンピュータまで、幅広い適用範囲と展開範囲を持っています。[ 5 ]クラスタの出現以前は、モジュール冗長性を備えた単一ユニットのフォールトトレラントメインフレームが使用されていましたが、クラスタの初期コストが低く、ネットワークファブリックの速度が向上したことで、クラスタの採用が促進されました。高信頼性メインフレームとは対照的に、クラスタはスケールアウトが安価ですが、クラスタではエラーモードが実行中のプログラムに対して不透明ではないため、エラー処理の複雑さも増します。[ 6 ]

複数の低価格な市販コンピュータを連携させることで、より高い計算能力と信頼性を得たいという願望から、様々なアーキテクチャや構成が生まれてきた。
コンピュータクラスタリングのアプローチでは、通常(常にではありませんが)、多数のすぐに利用可能なコンピューティングノード(たとえば、サーバーとして使用されるパーソナルコンピュータ)を高速ローカルエリアネットワーク経由で接続します。[ 7 ]コンピューティングノードのアクティビティは、「クラスタリングミドルウェア」と呼ばれるソフトウェアレイヤーによって調整されます。このレイヤーはノードの上に位置し、ユーザーがクラスタを、たとえば単一のシステムイメージの概念を介して、ほぼ1つのまとまったコンピューティングユニットとして扱うことを可能にします。[ 7 ]
コンピュータクラスタリングは、ノードをオーケストレーションされた共有サーバーとして利用できるようにするための集中管理アプローチに依存しています。これは、多数のノードを使用するものの、はるかに分散的な性質を持つピアツーピアやグリッドコンピューティングなどの他のアプローチとは異なります。[ 7 ]
コンピュータクラスタは、2台のパーソナルコンピュータを接続するだけのシンプルな2ノードシステムの場合もあれば、非常に高速なスーパーコンピュータの場合もある。クラスタ構築の基本的なアプローチは、少数のパーソナルコンピュータで構築され、従来の高性能コンピューティングに代わる費用対効果の高い代替手段となるBeowulfクラスタである。この概念の実現可能性を示した初期のプロジェクトは、133ノードのStone Soupercomputerであった。[ 8 ]開発者は、 Linux、Parallel Virtual Machineツールキット、およびMessage Passing Interfaceライブラリを使用して、比較的低コストで高性能を実現した。[ 9 ]
クラスターは、単純なネットワークで接続された少数のパーソナルコンピュータで構成される場合もありますが、クラスターアーキテクチャは非常に高いレベルのパフォーマンスを実現するためにも使用できます。TOP500組織が半年に一度発表する最速のスーパーコンピュータ500台のリストには、多くのクラスターが含まれることがよくあります。たとえば、2011年に世界最速のマシンは、分散メモリのクラスターアーキテクチャを持つKコンピュータでした。[ 10 ]
グレッグ・フィスターは、クラスターは特定のベンダーによって発明されたのではなく、1台のコンピュータで全ての作業を処理できなかった、あるいはバックアップが必要だった顧客によって発明されたと述べている。[ 11 ]フィスターは、その時期を1960年代のある時期と推定している。あらゆる種類の並列作業を行う手段としてのクラスターコンピューティングの正式な工学的基礎は、おそらくIBMのジーン・アムダールによって発明されたものであり、彼は1967年に並列処理に関する画期的な論文とみなされるようになった「アムダールの法則」を発表した。

初期のコンピュータクラスタの歴史は、初期のネットワークの歴史とほぼ直接的に結びついている。なぜなら、ネットワーク開発の主な動機の一つは、コンピューティングリソースを連携させ、事実上のコンピュータクラスタを構築することだったからである。
クラスターとして設計された最初の生産システムは、1960年代半ばに登場したBurroughs B5700でした。これは、それぞれ1つまたは2つのプロセッサを搭載した最大4台のコンピュータを共通のディスクストレージサブシステムに密接に接続し、ワークロードを分散させることができました。標準的なマルチプロセッサシステムとは異なり、各コンピュータを再起動しても全体の動作が中断されることはありませんでした。
1970年代前半から中頃にかけて、ゼネラル・エレクトリックのMark IIは、最大8つの処理システム(それぞれが独自のオペレーティングシステムのコピーを持つ)がファイルレベルのロックを備えた複数のファイルシステムにアクセスできる高信頼性クラスタ技術を採用した。[ 12 ]

システム全体の管理機能とレコードレベルのファイルロックを統合した最初の商用疎結合クラスタコンピュータは、Tandem NonStop (1976 年の高可用性商用製品) [ 13 ] [ 14 ] [ 1 ]であり、それに続いて、1977 年に開発され、クラスタインターフェースとしてARCnetを使用したDatapoint Corporation の「Attached Resource Computer」(ARC) システムが登場しました。1984 年に、AT&T は、2 つのプロセッサのフォールトトレラントクラスタコンピューティングシステムを含む B3 シリーズコンピュータをリリースしました。[ 15 ]クラスタリング自体は、Digital Equipment Corporation が1984 年にVMSオペレーティングシステム用のVAXcluster製品を発表するまで本格的に普及しませんでした。この製品は、以前のメーカーとは異なり、マーケティングで「クラスタ」という用語を使用しました。Tandem NonStop、ARC、および VAXcluster 製品は、並列コンピューティングだけでなく、共有ファイルシステムと周辺機器もサポートしていました。そのアイデアは、データの信頼性と一意性を維持しながら、並列処理の利点を提供することでした。もう一つ注目すべき商用クラスターは、IBM S/390 Parallel Sysplex(1994年頃、主にビジネス用途向け)である。
同時期に、コンピュータクラスタが汎用ネットワーク上でコンピュータ外部の並列処理を利用していたのに対し、スーパーコンピュータはコンピュータ内部で並列処理を利用し始めた。1964年のCDC 6600の成功に続き、1976年にCray 1が発売され、ベクトル処理による内部並列処理が導入された。[ 16 ]初期のスーパーコンピュータはクラスタを排除し、共有メモリに依存していたが、やがて最速のスーパーコンピュータ(例えばKコンピュータ)の一部はクラスタアーキテクチャに依存するようになった。
クラスターは、1990年代以前から、世界のATM取引、クレジットカード、緊急通報911、証券取引所、最大規模のデータウェアハウスなどの大部分で使用されていました。[ 1 ]

コンピュータクラスタは、Webサービスサポートなどの汎用的な業務ニーズから、計算負荷の高い科学計算まで、さまざまな目的に合わせて構成できます。いずれの場合も、クラスタは高可用性アプローチを採用できます。なお、以下に説明する属性は排他的なものではなく、「コンピュータクラスタ」は高可用性アプローチを採用するなど、他の属性も採用する場合があります。
「負荷分散」クラスタとは、クラスタノードが計算ワークロードを共有して全体的なパフォーマンスを向上させる構成のことです。たとえば、Webサーバークラスタは異なるクエリを異なるノードに割り当てることで、応答時間を最適化できます。[ 17 ]ただし、負荷分散のアプローチはアプリケーションによって大きく異なる場合があり、たとえば、科学計算に使用される高性能クラスタは、Webサーバークラスタとは異なるアルゴリズムで負荷を分散しますが、Webサーバークラスタは、新しいリクエストをそれぞれ異なるノードに割り当てるだけの単純なラウンドロビン方式を使用する場合があります。[ 17 ]
コンピュータクラスタは、WebサービスやデータベースなどのIO指向の操作を処理するのではなく、計算集約型の目的に使用されます。 [ 18 ]例えば、コンピュータクラスタは、車両衝突や気象の計算シミュレーションをサポートする可能性があります。非常に密結合されたコンピュータクラスタは、「スーパーコンピューティング」に近い作業用に設計されています。
高可用性クラスタ(フェイルオーバークラスタ、またはHAクラスタとも呼ばれる)は、クラスタ方式の可用性を向上させます。冗長ノードを持つことで動作し、システムコンポーネントに障害が発生した場合に、これらの冗長ノードがサービス提供に使用されます。HAクラスタの実装では、クラスタコンポーネントの冗長性を利用して、単一障害点を排除しようとします。多くのオペレーティングシステム向けに、高可用性クラスタの商用実装が存在します。Linux -HAプロジェクトは、 Linuxオペレーティングシステムでよく使用される無料のHAパッケージの1つです。
スケーラビリティは、システムをクラスタに追加することで向上し、これが大規模並列処理の主要な基盤となります。対称型マルチプロセッサシステムでは、プロセッサを追加するとスケーラビリティが徐々に低下し(そのため、コストが高くなるか、十分なスケーラビリティが得られなくなります)、一方、一部のアプリケーションでは、疎結合クラスタシステムでスケーラビリティを維持できます。このスケーラビリティを適切に機能させるには、クラスタ対応のミドルウェアまたはデータベースが必要になる場合があります。[ 1 ]
クラスターは主にパフォーマンスを念頭に置いて設計されていますが、インストールは他の多くの要因に基づいています。フォールトトレランス(ノードの故障にもかかわらずシステムが動作を継続できる能力)によりスケーラビリティが実現し、高性能な状況では、メンテナンスルーチンの頻度を低く抑え、リソースの統合(RAIDなど)、および集中管理が可能になります。利点としては、災害発生時のデータ復旧、並列データ処理、および高い処理能力の提供などが挙げられます。[ 19 ] [ 20 ]
スケーラビリティに関して言えば、クラスタはノード[ 1 ]を水平方向に追加できるという点でこれを実現します。つまり、クラスタにコンピュータを追加することで、パフォーマンス、冗長性、耐障害性を向上させることができます。これは、クラスタ内の単一ノードをスケールアップするよりも、高性能なクラスタを実現するための低コストなソリューションとなり得ます。コンピュータクラスタのこの特性により、より多くの低性能コンピュータで、より大きな計算負荷を実行することが可能になります。
クラスターに新しいノードを追加する場合、クラスター全体を停止する必要がないため、信頼性が向上します。メンテナンスのために単一のノードを停止しても、残りのクラスターがそのノードの負荷を引き継ぎます。
多数のコンピュータをクラスタ化する場合、分散ファイルシステムとRAIDの利用が適しており、これらはいずれもクラスタの信頼性と速度を向上させることができる。

クラスタ設計における課題の一つは、個々のノード間の結合度合いです。例えば、単一のコンピュータジョブではノード間で頻繁な通信が必要となる場合があります。これは、クラスタが専用ネットワークを共有し、ノードが密集して配置され、おそらく均質なノードで構成されていることを意味します。その一方で、コンピュータジョブが1つまたは少数のノードしか使用せず、ノード間の通信がほとんど、あるいは全く必要ない場合もあり、これはグリッドコンピューティングに近い状態です。
Beowulf クラスタでは、アプリケーション プログラムは計算ノード (スレーブ コンピュータとも呼ばれる) を直接見ることはなく、スレーブのスケジューリングと管理を処理する特定のコンピュータである「マスター」とのみやり取りします。[ 18 ]一般的な実装では、マスターには 2 つのネットワーク インターフェイスがあり、1 つはスレーブ用のプライベート Beowulf ネットワークと通信し、もう 1 つは組織の汎用ネットワークと通信します。[ 18 ]スレーブ コンピュータは通常、同じオペレーティングシステムの独自のバージョン、ローカル メモリ、およびディスク スペースを持っています。ただし、プライベート スレーブ ネットワークには、グローバルな永続データを保存する大規模な共有ファイル サーバーがあり、スレーブは必要に応じてこれにアクセスできます。[ 18 ]
特殊目的の144ノードDEGIMAクラスターは、汎用科学計算ではなく、Multiple-Walk並列ツリーコードを使用して天体物理学N体シミュレーションを実行するように調整されています。[ 21 ]
ゲーム機の世代が進むにつれて計算能力が向上したため、それらを高性能コンピューティング(HPC) クラスターに再利用するという新しい用途が生まれています。ゲーム機クラスターの例としては、ソニーの PlayStation クラスターやマイクロソフトのXboxクラスターなどがあります。消費者向けゲーム製品の別の例としては、複数のグラフィックス アクセラレータ プロセッサ チップを使用するNvidia Tesla Personal Supercomputerワークステーションがあります。ゲーム機以外にも、ハイエンドのグラフィックス カードも使用できます。グリッド コンピューティングの計算にグラフィックス カード (正確にはその GPU) を使用することは、精度は劣るものの、CPU を使用するよりもはるかに経済的です。ただし、倍精度値を使用すると、CPU と同等の精度で処理でき、コスト (購入費用) は依然としてはるかに低くなります。[ 3 ]
従来、コンピュータクラスタは、同じオペレーティングシステムを搭載した別々の物理コンピュータ上で動作していました。仮想化の登場により、クラスタノードは、異なるオペレーティングシステムを搭載した別々の物理コンピュータ上で動作し、仮想レイヤーで重ね合わせることで、互いに似たような動作をするようにすることが可能になりました。[ 22 ]また、クラスタは、メンテナンスが行われる際に、さまざまな構成で仮想化されることもあります。実装例としては、Linux-HAと組み合わせたXen を仮想化マネージャとして使用するケースがあります。[ 22 ]

1980年代にコンピュータクラスタが登場するのと同時に、スーパーコンピュータも登場しました。当時、これら3つのクラスを区別する要素の一つは、初期のスーパーコンピュータが共有メモリに依存していたことでした。クラスタは通常、物理的に共有メモリを使用しませんが、多くのスーパーコンピュータのアーキテクチャも共有メモリの使用を放棄しています。
しかし、現代のコンピュータクラスタにおいては、クラスタファイルシステムの利用は不可欠です。例としては、 IBM General Parallel File System、MicrosoftのCluster Shared Volumes 、 Oracle Cluster File Systemなどが挙げられます。
クラスタノード間の通信に広く用いられている2つの手法は、MPI(Message Passing Interface)とPVM(Parallel Virtual Machine)である。[ 23 ]
PVM は、MPI が利用可能になる前の 1989 年頃にオークリッジ国立研究所で開発されました。PVM はすべてのクラスタノードに直接インストールする必要があり、ノードを「並列仮想マシン」として表現する一連のソフトウェアライブラリを提供します。PVM は、メッセージパッシング、タスクおよびリソース管理、障害通知のための実行時環境を提供します。PVM は、C、C++、Fortran などで記述されたユーザープログラムで使用できます。[ 23 ] [ 24 ]
MPIは1990年代初頭に40の組織間の議論から生まれました。最初の取り組みはARPAと国立科学財団によって支援されました。MPIの設計は、一から始めるのではなく、当時の商用システムで利用可能なさまざまな機能を活用しました。その後、MPI仕様から具体的な実装が生まれました。MPIの実装は通常TCP/IPとソケット接続を使用します。[ 23 ] MPIは現在、 C、Fortran、Pythonなどの言語で並列プログラムを記述できる広く利用可能な通信モデルです。[ 24 ]したがって、具体的な実装を提供するPVMとは異なり、MPIはMPICHやOpen MPIなどのシステムで実装されている仕様です。[ 24 ] [ 25 ]

コンピュータクラスタの使用における課題の1つは、クラスタにN個のノードがある場合、管理コストがN個の独立したマシンを管理するコストと同程度になることがあることです。[ 26 ]場合によっては、管理コストが低い共有メモリアーキテクチャが有利になります。 [ 26 ]また、管理が容易なため、仮想マシンが普及しました。 [ 26 ]
大規模なマルチユーザークラスタが非常に大量のデータにアクセスする必要がある場合、タスクスケジューリングが課題となります。複雑なアプリケーション環境を持つ異種混在のCPU-GPUクラスタでは、各ジョブのパフォーマンスは基盤となるクラスタの特性に依存します。そのため、タスクをCPUコアとGPUデバイスにマッピングすることは大きな課題となります。[ 27 ]これは現在も研究が進められている分野であり、MapReduceとHadoopを組み合わせたり拡張したりするアルゴリズムが提案され、研究されています。[ 27 ]
クラスタ内のノードが故障した場合、システムの残りの部分を動作させ続けるために、 「フェンシング」などの戦略が採用されることがあります。 [ 28 ] [ 29 ]フェンシングとは、ノードが誤動作していると思われる場合に、ノードを隔離したり、共有リソースを保護したりするプロセスです。フェンシングの方法には 2 つのクラスがあります。 1 つはノード自体を無効にするもので、もう 1 つは共有ディスクなどのリソースへのアクセスを禁止するものです。[ 28 ]
STONITH方式は「Shoot The Other Node In The Head」の略で、疑わしいノードを無効にするか電源を切ることを意味します。例えば、パワーフェンシングでは、電源コントローラを使用して動作不能なノードの電源を切ります。[ 28 ]
リソースフェンシング方式では、ノードの電源をオフにしない限り、リソースへのアクセスを禁止します。これには、 SCSI3を介した永続的な予約フェンシング、ファイバーチャネルポートを無効にするファイバーチャネルフェンシング、またはGNBD サーバーへのアクセスを無効にするグローバルネットワークブロックデバイス(GNBD) フェンシングなどが含まれます。
ウェブサーバーなどの負荷分散クラスタは、クラスタアーキテクチャを使用して多数のユーザーをサポートし、通常は各ユーザー要求が特定のノードにルーティングされ、システムの主な目的が共有データへの迅速なユーザーアクセスを提供することであるため、マルチノードの連携なしにタスクの並列性を実現します。しかし、少数のユーザーに対して複雑な計算を実行する「コンピュータクラスタ」は、クラスタの並列処理機能を活用し、「同じ計算」を複数のノードに分割する必要があります。[ 30 ]
プログラムの自動並列化は依然として技術的な課題であるが、並列プログラミングモデルを使用すると、プログラムの別々の部分を異なるプロセッサで同時に実行することにより、より高いレベルの並列性を実現できる。 [ 30 ] [ 31 ]
クラスタ上で並列プログラムを開発およびデバッグするには、並列言語のプリミティブと、高性能デバッグフォーラム(HPDF)で議論され、HPD仕様が策定されたような適切なツールが必要です。[ 24 ] [ 32 ]その後、メッセージパッシングインターフェース(MPI)または並列仮想マシン(PVM)をメッセージパッシングに使用するコンピュータクラスタ上の並列実装をデバッグするために、 TotalViewなどのツールが開発されました。
カリフォルニア大学バークレー校の ワークステーションネットワーク(NOW)システムはクラスタデータを収集してデータベースに保存する一方、インドで開発されたPARMONのようなシステムは、大規模なクラスタを視覚的に監視および管理することを可能にする。[ 24 ]
アプリケーションのチェックポイント機能を使用すると、長時間のマルチノード計算中にノードが故障した場合に、システムの特定の状態を復元できます。[ 33 ]ノード数が増えるにつれて、計算負荷が高い場合にノードが故障する可能性が高くなるため、これは大規模クラスタでは不可欠です。チェックポイント機能を使用すると、システムを安定した状態に復元できるため、結果を再計算することなく処理を再開できます。[ 33 ]
Linuxの世界では、さまざまなクラスタソフトウェアがサポートされています。アプリケーションクラスタリングには、distccやMPICHなどがあります。Linux Virtual ServerやLinux-HAは、受信するサービス要求を複数のクラスタノードに分散できるディレクターベースのクラスタです。MOSIX 、LinuxPMI、Kerrighed、OpenSSIは、カーネルに統合された本格的なクラスタで、同種のノード間での自動的なプロセス移行を提供します。OpenSSI 、openMosix、Kerrighedは、単一システムイメージの実装です。
Microsoft Windows Cluster Server [ 1 ]ソフトウェアは、Windows Serverプラットフォームをベースにしており、元々は 1997/98 年にリリースされ、ジョブ スケジューラ、MSMPI ライブラリ、管理ツールなど、高性能コンピューティングのためのクラスタ サポートを提供します。
gLiteは、Enabling Grids for E-sciencE(EGEE)プロジェクトによって作成されたミドルウェア技術のセットです。
Slurmは、最大規模のスーパーコンピュータクラスタのスケジュール設定や管理にも使用されています(Top500リストを参照)。
ほとんどのコンピュータクラスタは常設の設備だが、特定の計算処理のために短期間のクラスタを構築するフラッシュモブコンピューティングの試みも行われている。しかし、 BOINCベースのシステムのような大規模なボランティアコンピューティングシステムの方が、より多くの支持者を集めている。