


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

The desire to get more computing power and better reliability by orchestrating a number of low-cost commercial off-the-shelf computers has given rise to a variety of architectures and configurations.
The computer clustering approach usually (but not always) connects a number of readily available computing nodes (e.g. personal computers used as servers) via a fast local area network.[7] The activities of the computing nodes are orchestrated by "clustering middleware", a software layer that sits atop the nodes and allows the users to treat the cluster as by and large one cohesive computing unit, e.g. via a single system image concept.[7]
Computer clustering relies on a centralized management approach which makes the nodes available as orchestrated shared servers. It is distinct from other approaches such as peer-to-peer or grid computing which also use many nodes, but with a far more distributed nature.[7]
A computer cluster may be a simple two-node system which just connects two personal computers, or may be a very fast supercomputer. A basic approach to building a cluster is that of a Beowulf cluster which may be built with a few personal computers to produce a cost-effective alternative to traditional high-performance computing. An early project that showed the viability of the concept was the 133-node Stone Soupercomputer.[8] The developers used Linux, the Parallel Virtual Machine toolkit and the Message Passing Interface library to achieve high performance at a relatively low cost.[9]
Although a cluster may consist of just a few personal computers connected by a simple network, the cluster architecture may also be used to achieve very high levels of performance. The TOP500 organization's semiannual list of the 500 fastest supercomputers often includes many clusters, e.g. the world's fastest machine in 2011 was the K computer which has a distributed memory, cluster architecture.[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 ]

As the computer clusters were appearing during the 1980s, so were supercomputers. One of the elements that distinguished the three classes at that time was that the early supercomputers relied on shared memory. Clusters do not typically use physically shared memory, while many supercomputer architectures have also abandoned it.
However, the use of a clustered file system is essential in modern computer clusters. Examples include the IBM General Parallel File System, Microsoft's Cluster Shared Volumes or the Oracle Cluster File System.
Two widely used approaches for communication between cluster nodes are MPI (Message Passing Interface) and PVM (Parallel Virtual Machine).[23]
PVM was developed at the Oak Ridge National Laboratory around 1989 before MPI was available. PVM must be directly installed on every cluster node and provides a set of software libraries that paint the node as a "parallel virtual machine". PVM provides a run-time environment for message-passing, task and resource management, and fault notification. PVM can be used by user programs written in C, C++, or Fortran, etc.[23][24]
MPI emerged in the early 1990s out of discussions among 40 organizations. The initial effort was supported by ARPA and National Science Foundation. Rather than starting anew, the design of MPI drew on various features available in commercial systems of the time. The MPI specifications then gave rise to specific implementations. MPI implementations typically use TCP/IP and socket connections.[23] MPI is now a widely available communications model that enables parallel programs to be written in languages such as C, Fortran, Python, etc.[24] Thus, unlike PVM which provides a concrete implementation, MPI is a specification which has been implemented in systems such as MPICH and 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は、最大規模のスーパーコンピュータクラスタのスケジュール設定や管理にも使用されています(トップ500リストを参照)。
ほとんどのコンピュータクラスタは常設の設備だが、特定の計算処理のために短期間のクラスタを構築するフラッシュモブコンピューティングの試みも行われている。しかし、 BOINCベースのシステムのような大規模なボランティアコンピューティングシステムの方が、より多くの支持者を集めている。