(57)【要約】  コーディネーションポイントを実装するシステムにおける入力／出力（Ｉ／Ｏ）フェンシング動作を最適化するための多様なシステム、方法、及びプロセスが提示される。行列が生成される。行列は、ノードによる１つ又は２つ以上のコーディネーションポイントのアクセス可能性を示す情報を含む。次いで、方法は、行列を１つ又は２つ以上の他のノードに送信する。加えて、ノードがもはやサブクラスタの一部ではないと決定したことに応答して、サブクラスタ内の別のノードが競争者ノードとして指定される。競争者ノードは行列にアクセスし、行列は、クラスタ内の大半のコーディネーションポイントがサブクラスタ内のノードによってアクセス可能であるかどうかを決定するための情報を含む。アクセスに基づいて、情報が、大半のコーディネーションポイントがノードによってアクセス可能であることを示している決定がなされる。次いで、情報はブロードキャストされる。更に、クラスタが複数のネットワークパーティションにパーティション化されたことに応答して、第１のネットワークパーティション内の第１のノードを使用して、第１のノードが１つ又は２つ以上のコーディネーションポイントを獲得するかどうかの決定がなされる。次いで、第１のノードの決定は、第１のネットワークパーティション内の第２のノードに送信される。更に、第２のノードを使用して、第２のノードが、第１のノードによって勝ち取られた１つ又は２つ以上のコーディネーションポイント以外の１つ又は２つ以上の他のコーディネーションポイントを勝ち取るかどうかの決定がなされる。
2018534665.tif 000002
【特許請求の範囲】
【請求項１】
行列を生成することであって、
前記行列が、第１のノードによる複数のコーディネーションポイントのうちの各コーディネーションポイントのアクセス可能性を示す情報を含む、生成することと、
前記行列を１つ又は２つ以上の他のノードに送信することと、を含む、方法。
【請求項２】
前記行列が、第１のコーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
前記第１のノードが、クラスタに参加しようと試みており、
前記１つ又は２つ以上の他のノードがまた、前記第１のノードと共に前記クラスタに参加しようと試みている、請求項１に記載の方法。
【請求項３】
前記第１のノードが、前記１つ又は２つ以上の他のノードと共同で、前記複数のコーディネーションポイントの大半にアクセスできることを決定することと、
前記決定に基づいて、前記クラスタに参加することと、を更に含む、請求項２に記載の方法。
【請求項４】
前記第１のノードから前記１つ又は２つ以上の他のノードに送信された前記第１のＣＰＲＭが、前記１つ又は２つ以上の他のノードによって更新され、
前記更新が、前記１つ又は２つ以上の他のノードの各々による前記複数のコーディネーションポイントのうちの前記コーディネーションポイントの各々のアクセス可能性を示す情報を含む、請求項２に記載の方法。
【請求項５】
構成ファイルにアクセスすることと、
前記構成ファイル内の情報に基づいて、前記複数のコーディネーションポイントの合計数を決定することと、を更に含む、請求項２に記載の方法。
【請求項６】
前記１つ又は２つ以上の他のノードが、既に前記クラスタの一部であることを決定することであって、
前記第１のノードが、前記１つ又は２つ以上の他のノードの一部ではない、決定することと、
第２のＣＰＲＭを前記クラスタから要求することであって、
前記第２のＣＰＲＭが、前記１つ又は２つ以上の他のノードの各々による前記複数のコーディネーションポイントのうちの前記コーディネーションポイントの各々のアクセス可能性を示す情報を含み、
前記複数のコーディネーションポイントが、前記クラスタの一部である、要求することと、を更に含む、請求項５に記載の方法。
【請求項７】
第１のクラスタスナップショットと前記第１のＣＰＲＭからの前記複数のコーディネーションポイントの合計数との積が、第２のクラスタスナップショットと前記第２のＣＰＲＭからの前記複数のコーディネーションポイントの合計数との積に等しいことを決定することと、
前記第１のクラスタスナップショットと前記複数のコーディネーションポイントの前記合計数との積が、前記第１のクラスタスナップショット及び前記第２のスナップショットの組み合わせと前記複数のコーディネーションポイントの前記合計数との積以上であることを決定することと、
前記第１のＣＰＲＭを前記第１のクラスタスナップショットと前記第２のクラスタスナップショットとの前記組み合わせに更新することと、
前記更新された第１のＣＰＲＭを前記クラスタ内の前記第１のノードから前記１つ又は２つ以上の他のノードの各々に送信することと、を更に含み、
前記更新された第１のＣＰＲＭを受信すると、前記１つ又は２つ以上の他のノードの各々が、前記第１のクラスタスナップショットと前記第２のクラスタスナップショットとの組み合わせに基づいて、前記第２のＣＰＲＭを更新する、請求項６に記載の方法。
【請求項８】
前記複数のコーディネーションポイントが、
１つ若しくは２つ以上のコーディネータディスク又は
１つ若しくは２つ以上のコーディネーションポイントサーバ、を含む、請求項１に記載の方法。
【請求項９】
プログラム命令を記憶する非一時的コンピュータ可読ストレージ媒体であって、前記プログラム命令は、
行列を生成することであって、
前記行列が、第１のノードによる複数のコーディネーションポイントの各コーディネーションポイントのアクセス可能性を示す情報を含む、生成することと、
前記行列を１つ又は２つ以上の他のノードに送信することと、を実行可能である、非一時的コンピュータ可読ストレージ媒体。
【請求項１０】
前記行列が、第１のコーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
前記第１のノードが、クラスタに参加しようと試みており、
前記１つ又は２つ以上の他のノードがまた、前記第１のノードと共に前記クラスタに参加しようと試みている、請求項９に記載の非一時的コンピュータ可読ストレージ媒体。
【請求項１１】
前記第１のノードが、前記１つ又は２つ以上の他のノードと共同で、前記複数のコーディネーションポイントの大半にアクセスできることを決定することと、
前記決定に基づいて、前記クラスタに参加することと、を更に含む、請求項１０に記載の非一時的コンピュータ可読ストレージ媒体。
【請求項１２】
前記第１のノードから前記１つ又は２つ以上の他のノードに送信された前記第１のＣＰＲＭが、前記１つ又は２つ以上の他のノードによって更新され、
前記更新が、前記１つ又は２つ以上の他のノードの各々による前記複数のコーディネーションポイントのうちの前記コーディネーションポイントの各々のアクセス可能性を示す情報を含む、請求項１０に記載の非一時的コンピュータ可読ストレージ媒体。
【請求項１３】
構成ファイルにアクセスすることと、
前記構成ファイル内の情報に基づいて、前記複数のコーディネーションポイントの合計数を決定することと、を更に含む、請求項１０に記載の非一時的コンピュータ可読ストレージ媒体。
【請求項１４】
前記１つ又は２つ以上の他のノードが、既に前記クラスタの一部であることを決定することであって、
前記第１のノードが、前記１つ又は２つ以上の他のノードの一部ではない、決定することと、
第２のＣＰＲＭを前記クラスタから要求することであって、
前記第２のＣＰＲＭが、前記１つ又は２つ以上の他のノードの各々による前記複数のコーディネーションポイントのうちの前記コーディネーションポイントの各々のアクセス可能性を示す情報を含み、
前記複数のコーディネーションポイントが、前記クラスタの一部である、要求することと、を更に含む、請求項１３に記載の非一時的コンピュータ可読ストレージ媒体。
【請求項１５】
第１のクラスタスナップショットと前記第１のＣＰＲＭからの前記複数のコーディネーションポイントの合計数との積が、第２のクラスタスナップショットと前記第２のＣＰＲＭからの前記複数のコーディネーションポイントの合計数との積に等しいことを決定することと、
前記第１のクラスタスナップショットと前記複数のコーディネーションポイントの前記合計数との積が、前記第１のクラスタスナップショット及び前記第２のスナップショットの組み合わせと前記複数のコーディネーションポイントの前記合計数との積以上であることを決定することと、
前記第１のＣＰＲＭを前記第１のクラスタスナップショットと前記第２のクラスタスナップショットとの前記組み合わせに更新することと、
前記更新された第１のＣＰＲＭを前記クラスタ内の前記第１のノードから前記１つ又は２つ以上の他のノードの各々に送信することと、を更に含み、
前記更新された第１のＣＰＲＭを受信すると、前記１つ又は２つ以上の他のノードの各々が、前記第１のクラスタスナップショットと前記第２のクラスタスナップショットとの組み合わせに基づいて、前記第２のＣＰＲＭを更新する、請求項１４に記載の非一時的コンピュータ可読ストレージ媒体。
【請求項１６】
１つ又は２つ以上のプロセッサと、
前記１つ又は２つ以上のプロセッサに結合されたメモリと、を備え、前記メモリは、前記１つ又は２つ以上のプロセッサによって実行可能なプログラム命令を記憶し、前記プログラム命令は、
行列を生成することであって、
前記行列が、第１のノードによる複数のコーディネーションポイントの各コーディネーションポイントのアクセス可能性を示す情報を含む、生成することと、
前記行列を１つ又は２つ以上の他のノードに送信することと、を実行可能である、システム。
【請求項１７】
前記行列が、第１のコーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
前記第１のノードが、クラスタに参加しようと試みており、
前記１つ又は２つ以上の他のノードがまた、前記第１のノードと共に前記クラスタに参加しようと試みている、請求項１６に記載のシステム。
【請求項１８】
前記第１のノードが、前記１つ又は２つ以上の他のノードと共同で、前記複数のコーディネーションポイントの大半にアクセスできることを決定することと、
前記決定に基づいて、前記クラスタに参加することと、を更に含む、請求項１６に記載のシステム。
【請求項１９】
構成ファイルにアクセスすることと、
前記構成ファイル内の情報に基づいて、前記複数のコーディネーションポイントの合計数を決定することと、を更に含む、請求項１７に記載のシステム。
【請求項２０】
前記１つ又は２つ以上の他のノードが、既に前記クラスタの一部であることを決定することであって、
前記第１のノードが、前記１つ又は２つ以上の他のノードの一部ではない、決定することと、
第２のＣＰＲＭを前記クラスタから要求することであって、
前記第２のＣＰＲＭが、前記１つ又は２つ以上の他のノードの各々による前記複数のコーディネーションポイントのうちの前記コーディネーションポイントの各々のアクセス可能性を示す情報を含み、
前記複数のコーディネーションポイントが、前記クラスタの一部である、要求することと、
第１のクラスタスナップショットと前記第１のＣＰＲＭからの前記複数のコーディネーションポイントの合計数との積が、第２のクラスタスナップショットと前記第２のＣＰＲＭからの前記複数のコーディネーションポイントの合計数との積に等しいことを決定することと、
前記第１のクラスタスナップショットと前記複数のコーディネーションポイントの前記合計数との積が、前記第１のクラスタスナップショット及び前記第２のスナップショットの組み合わせと前記複数のコーディネーションポイントの前記合計数との積以上であることを決定することと、
前記第１のＣＰＲＭを前記第１のクラスタスナップショットと前記第２のクラスタスナップショットとの前記組み合わせに更新することと、
前記更新された第１のＣＰＲＭを前記クラスタ内の前記第１のノードから前記１つ又は２つ以上の他のノードの各々に送信することと、を更に含み、
前記更新された第１のＣＰＲＭを受信すると、前記１つ又は２つ以上の他のノードの各々が、前記第１のクラスタスナップショットと前記第２のクラスタスナップショットとの組み合わせに基づいて、前記第２のＣＰＲＭを更新する、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、分散ストレージ及びコンピュータシステムに関する。特に、本開示は、コーディネーションポイントを実装するマルチノード分散ストレージシステムにおける入力／出力フェンシング動作の最適化に関する。
【背景技術】
【０００２】
クラスタは、処理能力及びストレージリソースを提供するために単一のエンティティとして協働するいくつかのノード（例えばコンピューティングデバイス）を有する分散コンピュータシステムである。クラスタにおいて、コンピュータシステム（例えば、サーバ）の処理負荷は、典型的には、複数のコンピュータ（又はノード）に分散され、それにより、単一の障害ポイントを排除（又は最小化）する。したがって、クラスタ上で実行されているアプリケーション及び／又はプログラムは、クラスタ内の１つのコンピュータ（又はノード）に問題があっても引続き機能することができる。
【０００３】
入力／出力（Ｉ／Ｏ）フェンシング（又はより簡単には、フェンシング）とは、ノードが誤動作する（又は故障したように見える）場合に、クラスタのノードを分離し、及び／又はクラスタの共有リソースを保護するプロセスを指す。クラスタが複数のノードを有する場合、ノードのうちの１つがある時点で障害が生じる可能性がある。障害が生じているノードは、クラスタ内のその他のノードによって使用されている（及び必要とされている）共有ストレージなどの共有リソースを制御することができる。
【０００４】
クラスタは、（上記のように）ノードに障害が生じたときに是正措置を講じることができなければならない。しかし、例えば、異なるサブクラスタ又はネットワークパーティション（クラスタのうちの）内の２つのノードが、非協調的な方法で共有ストレージを制御しようと試みると、データの破損が発生する可能性がある。フェンシングを使用して障害が生じているノードを無効にするか、共有ストレージへのアクセスを禁止することにより、データの整合性を確保し、データの破損を防ぐことができる。したがって、フェンシングが、共有ストレージへの協調されていないアクセスを防止するために使用され得る。
【０００５】
コーディネーションポイント（ＣＰ）が、フェンシング動作を支援するために、クラスタ内に実装され得る。コーディネーションポイントは、クラスタ内の他のノードから共有ストレージ（例えば、データドライブ）をフェンシングオフすることを許可されているノードを決定するためのロックメカニズムを提供する。例えば、ノードは、そのノードが共有ストレージからピアノードをフェンシングすることが許可される前に、ピアノードの登録キーをコーディネーションポイントから取り出さなければならない。
【０００６】
「スプリットブレイン」とは、範囲が重複する２つの別個のデータセットの維持に起因して、データの可用性（例えば共有ストレージからの）が矛盾する状況を指す。例えば、かかる重複は、２つ又はそれ以上のサブクラスタ（クラスタのうちの）がそれぞれのデータセットを通信して同期させることができないネットワークパーティションに起因して、発生する可能性がある。各サブクラスタのデータセットは、他のサブクラスタからの他のデータセットとの協調なしに、独自の固有データセット更新によってクライアントに無作為にサービスすることができる。したがって、クラスタ内でスプリットブレイン状態が発生した場合、クラスタのどのサブ部分を継続して動作させるか（アービトレーションプロセスといい、又は単にアービトレーションという）の決定は、コーディネーションポイントを使用してフェンシング動作を実装することによってなされ得る。
【０００７】
ただし、フェンシング動作中の高可用性クラスタ内の１つ若しくは２つ以上のコーディネーションポイントの欠損（又はオフラインステータス）は、データ整合性の損失につながり、とりわけ、データ破損及び／又はアプリケーションのフェイルオーバーを引き起こす可能性がある。
【発明の概要】
【０００８】
本明細書では、かかるフェンシング動作を支援するためのコーディネーションポイントを実装する高可用性クラスタにおける入出力（Ｉ／Ｏ）フェンシング動作を最適化するための方法、システム、及びプロセスが開示される。一旦、かかる方法は、行列を生成することを含む。行列は、第１のノードによる複数のコーディネーションポイントのうちの各コーディネーションポイントのアクセス可能性を示す情報を含む。次いで、方法は、行列を１つ又は２つ以上の他のノード（例えばクラスタ内の）に送信する。
【０００９】
一実施形態では、行列は、第１のコーディネーションポイント到達可能性行列（ＣＰＲＭ）である。この例では、第１のノードは、クラスタに参加しようと試みており、かつ１つ又は２つ以上の他のノードはまた、第１のノードと共にクラスタに参加しようと試みている。方法は、第１のノードが、１つ又は２つ以上の他のノードと共同でコーディネーションポイントの大半にアクセスすることができることを決定し、決定に基づいてクラスタに参加することを決定する。この例では、第１のノードから１つ又は２つ以上の他のノードに送信された第１のＣＰＲＭが、１つ又は２つ以上の他のノードによって更新される。更新は、１つ又は２つ以上の他のノードの各々によるコーディネーションポイントの各々のアクセス可能性を示す情報を含む。
【００１０】
特定の実施形態では、方法は構成ファイルにアクセスし、構成ファイル内の情報に基づいて、コーディネーションポイントの合計数を決定する。方法はまた、１つ又は２つ以上の他のノードが、既にクラスタの一部であることを決定する。この例では、第１のノードが、１つ又は２つ以上の他のノードの一部ではないことを決定する。次いで、この方法は、クラスタから第２のＣＰＲＭを要求する。第２のＣＰＲＭは、１つ又は２つ以上の他のノードの各々によるコーディネーションポイントの各々のアクセス可能性を示す情報を含む。コーディネーションポイントはクラスタの一部であり、コーディネータディスク及び／又はコーディネーションポイントサーバを含む。
【００１１】
一部の実施形態では、方法は、第１のクラスタスナップショットと第１のＣＰＲＭからのコーディネーションポイントの合計数との積が、第２のクラスタスナップショットと第２のＣＰＲＭからのコーディネーションポイントの合計数との積に等しいことを決定する。方法はまた、第１のクラスタスナップショットと複数のコーディネーションポイントの合計数との積が、第１のクラスタスナップショット及び第２のスナップショットの組み合わせと複数のコーディネーションポイントの合計数との積以上であることを決定する。
【００１２】
一実施形態では、方法は、第１のＣＰＲＭを、第１のクラスタスナップショットと第２のクラスタスナップショットとの組み合わせに更新し、更新された第１のＣＰＲＭを、クラスタ内の第１のノードから１つ又は２つ以上の他のノードの各々に送信する。更新された第１のＣＰＲＭを受信すると、１つ又は２つ以上の他のノードのうちの各々が、第１と第２のクラスタスナップショットとの組み合わせに基づいて、第２のＣＰＲＭを更新する。
【００１３】
別の方法は、ノードがもはやサブクラスタの一部ではないと決定したことに応答して、サブクラスタ内の別のノードを競争者ノードとして指定する。競争者ノードが行列にアクセスすると、行列は、クラスタ内のコーディネーションポイントの大半がサブクラスタ内のノードによってアクセス可能であるかどうかを決定するための情報を含む。アクセスに基づいて、方法は、情報がコーディネーションポイントの大半がノードによってアクセス可能であることを示していることを決定し、情報をブロードキャストする。
【００１４】
一実施形態では、もはやサブクラスタの一部ではないノードが、複数のコーディネーションポイントの大半へのアクセスを以前に提供していた。この例では、ノードがもはやサブクラスタの一部ではないと決定した後で、別のノードを競争者ノードとして指定する前に、方法は、サブクラスタ内のいかなるノードも、コーディネーションポイントの大半へのアクセスを個別に提供することができないことを決定する。一部の実施形態では、情報をブロードキャストすることは、コーディネーションポイントの大半が、サブクラスタ内のノードによってアクセス可能であることを示す情報により、行列を更新することを含む。情報はクラスタにブロードキャストされ、競争者ノードによって実施されるフェンシング競争が成功したことを示す。
【００１５】
他の実施形態では、情報に基づいて、方法は、パーティション化されたノードが、サブクラスタ内のノードによってアクセス可能なコーディネーションポイントの大半のうちの１つ又は２つ以上のコーディネーションポイントにアクセスすることを禁止する。禁止は、既存のスプリットブレイン状態がクラスタ内で発生することを防止する。特定の実施形態では、行列はコーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、ＣＰＲＭはクラスタ内の全てのノードにわたって複製される。他の実施形態では、コーディネーションポイントは、１つ又は２つ以上のコーディネーションポイントサーバを含む。
【００１６】
一部の方法は、クラスタが複数のネットワークパーティションにパーティション化されていることに応答して、第１のネットワークパーティション内の第１のノードを使用して、第１のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取るかどうかを決定することを含む。次いで、第１のノードの決定は、第１のネットワークパーティション内の第２のノードに送信される。更に、方法は、第２のノードを使用して、第２のノードが１つ又は２つ以上の他のコーディネーションポイント（第１のノードによって勝ち取られた）以外の１つ又は２つ以上の他のコーディネーションポイント勝ち取るかどうかを決定する。
【００１７】
一実施形態では、方法は、第２のノードを使用して、第１のノードと第２のノードとが共にコーディネーションポイントの大半を勝ち取るかどうかを決定する。この例では、１つ又は２つ以上のコーディネーションポイントを勝ち取ることは、１つ又は２つ以上のコーディネーションポイントにアクセスすることと、第１のネットワークパーティションにない１つ又は２つ以上のノードの１つ又は２つ以上の登録キーを、１つ又は２つ以上のコーディネーションポイントから取り出すことと、１つ又は２つ以上のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取ることを阻止することと、を含む。
【００１８】
他の実施形態では、方法は、第１のノードと第２のノードとが、共に、複数のコーディネーションポイントのうちのコーディネーションポイントの大半を獲得していない場合、第２のノードの決定を第３のノードに送信する。第３のノードは、第１のネットワークパーティションの一部である。
【００１９】
一部の実施形態では、第１のノードを使用して決定することは、第１のノードを使用して、第１のフェンシング競争を実施することを含み、第２のノードを使用して決定することは、第２のノードを使用して、第２のノードに送信される第１のノードの決定に基づいて、第２のフェンシング競争を実施することを含む。
【００２０】
特定の実施形態では、第１のノードを使用して決定することと、第２のノードを使用して決定することとは、行列にアクセスすることを含む。行列は、コーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、ＣＰＲＭは、クラスタ内の複数のノードのうちの全てのノードにわたって複製される。一部の実施形態では、コーディネーションポイントは、１つ若しくは２つ以上のコーディネータディスク及び／又は１つ若しくは２つ以上のコーディネーションポイントサーバである。一実施形態では、第１のノードは第１の競争者ノードとして指定され、第１の競争者ノードがその決定を第２のノードに送信した後、第２のノードは第２の競争者ノードとして指定される。
【００２１】
前述の内容は概要であり、したがって必然的に、簡略化、一般化、及び詳細の省略を含み、その結果として、当業者であれば、その概要が例示的であるにすぎず、なんら限定的ではないことがわかるであろう。請求項によってのみ規定されるような、本発明の他の態様、創意に富んだ機能、及び利点は、下記に示す非限定的な詳細な説明において明瞭になるであろう。
【図面の簡単な説明】
【００２２】
本開示は、添付図面を参照することによってより良く理解され得、そして、それの大半の対象、機能、及び利点が当業者に明らかにされる。
【００２３】
【図１Ａ】本開示の一実施形態に従う、コンピューティングシステムのブロック図である。
【００２４】
【図１Ｂ】本開示の一実施形態に従う、高可用性クラスタのブロック図である。
【００２５】
【図２】本開示の一実施形態に従う、分散ストレージ環境で実装される高可用性クラスタのブロック図である。
【００２６】
【図３Ａ】本開示の一実施形態に従う、コーディネーションポイントを使用してフェンシング動作を実施するクラスタ内のノードのブロック図である。
【００２７】
【図３Ｂ】本開示の一実施形態に従う、コーディネーションポイントを使用してフェンシング動作を実施するクラスタ内のノードのブロック図である。
【００２８】
【図４】本開示の一実施形態に従う、第１のコーディネーションポイント到達可能性行列（ＣＰＲＭ）の表である。
【００２９】
【図５Ａ】本開示の一実施形態に従う、クラスタを形成してそれに参加するノードのプロセスのフロー図である。
【００３０】
【図５Ｂ】本開示の一実施形態に従う、実行されているクラスタに参加するノードのプロセスのフロー図である。
【００３１】
【図６】本開示の一実施形態に従う、クラスタを離脱するノードのブロック図である。
【００３２】
【図７】本開示の一実施形態に従う、既存のスプリットブレイン条件を有するクラスタのブロック図である。
【００３３】
【図８】本開示の一実施形態に従う、クラスタを離脱したノードを示すＣＰＲＭの表である。
【００３４】
【図９】本開示の一実施形態に従う、既存のスプリットブレインによるデータ破損を防止するためのプロセスのフロー図である。
【００３５】
【図１０Ａ】本開示の一実施形態に従う、クラスタ内のネットワークパーティションを示すＣＰＲＭの表である。
【００３６】
【図１０Ｂ】本開示の一実施形態に従う、クラスタ内のネットワークパーティションを示すＢｉｔｗｉｓｅ  ＯＲテーブルである。
【００３７】
【図１１Ａ】本開示の一実施形態に従う、フェンシング競争を実施するパーティション化クラスタ内のノードのブロック図である。
【００３８】
【図１１Ｂ】本開示の一実施形態に従う、フェンシング動作を実行するパーティション化クラスタ内のノードのブロック図である。
【００３９】
【図１２Ａ】本開示の一実施形態に従う、ネットワークパーティション後の競争者ノードを選出するためのプロセスのフロー図である。
【００４０】
【図１２Ｂ】本開示の一実施形態に従う、競争者ノードがクラスタ内のコーディネーションポイントにアクセスできるかどうかを決定するためのプロセスのフロー図である。
【００４１】
【図１２Ｃ】本開示の一実施形態に従う、１つ又は２つ以上の競争者ノードによりフェンシング動作を実行するためのプロセスのフロー図である。
【００４２】
【図１３】本開示の一実施形態に従う、ＣＰＲＭを生成して送信するためのプロセスのフロー図である。
【００４３】
【図１４】本開示の一実施形態に従う、情報をクラスタにブロードキャストするためのプロセスのフロー図である。
【００４４】
【図１５】本開示の一実施形態に従う、フェンシング競争の結果を、一方ノードから他方のノードに送信するためのプロセスのフロー図である。
【００４５】
【図１６】本開示の一実施形態に従う、フェンシングモジュールがソフトウェア内に実装され得る態様を示す、コンピューティングシステムのブロック図である。
【００４６】
【図１７】本開示の一実施形態に従う、多様なコンピューティングデバイスがネットワークを介して通信し得る態様を示す、ネットワーク化されたシステムのブロック図である。
【００４７】
本開示は、様々な修正形態及び代替形式に影響を受けるけれども、本開示の特定の実施形態は、図面及び詳細な説明において例として提供される。図面及び詳細な説明は、開示内容を開示された特定の形式に限定することを意図しないことを理解されたい。その代わりに、添付の請求項によって規定されるような本開示の趣旨及び範囲内にある全ての修正形態、等価物、及び代替形態を包含することが意図される。
【発明を実施するための形態】
【００４８】
序論
企業が日々の業務のために複雑なコンピュータシステム（例えば、分散ストレージ及び／又はコンピューティングシステム）にますます依存するにつれて、生成されて処理される膨大な量のデータを管理することは重要な課題となっている。大企業は、典型的には、アプリケーションプログラムを使用して、多様なネットワーク及びオペレーティングシステムプラットフォーム全体の異なるタイプのストレージデバイスに格納された大量のデータを管理する。
【００４９】
ホスト用のストレージを提供するために、多くの異なるタイプのストレージデバイスを含むストレージエリアネットワーク（ＳＡＮ）が使用され得る。ＳＡＮは、ストレージデバイス、サブシステム、及びサーバシステムを相互接続するための多様なトポロジと機能を提供する。例えば、これらのコンポーネントを相互接続するために、スイッチ、ハブ、ブリッジなどの多様な相互接続エンティティが使用され得る。これらの多様なトポロジ及び機能により、比較的簡単な構成から非常に複雑な構成まで、ＳＡＮを設計して実装することができる。
【００５０】
前述したように、クラスタは、エンドユーザ及びアプリケーションから１つのコンピュータのように見える複数の相互接続されたコンピュータを含む。クラスタ内で相互接続された各コンピュータはノードと呼ばれる。複数のノードの処理能力を組み合わせることにより、単一のノードから得られるものよりも大きなスループット及びスケーラビリティを提供することができる。高可用性クラスタでは、複数のノードがデータストレージ、複製、及び／又は重複排除の目的で、ストレージデバイスを共有することができる。共有ストレージディスク／デバイス（例えば、クラスタ共有ボリューム（ＣＳＶ））は、クラスタ内の全てのノードによる読み取り及び書き込み動作のために、アクセス可能にされ得る。各クラスタは複数のＣＳＶを有し得る。
【００５１】
フレキシブル共有ストレージ（ＦＳＳ）システムでは、クラスタ内の複数のノードが１つ又は２つ以上のＣＳＶを共有する。したがって、ＦＳＳシステムは、ローカルストレージのクラスタ全体にわたるネットワーク共有を可能にする。ローカルストレージは、直接接続ストレージ（ＤＡＳ）又は内部ディスクドライブの形式で使用され得る。前述したように、ストレージのネットワーク共有は、クラスタのノード間のネットワーク相互接続の使用を通じて可能にされ得る。この機能により、ネットワーク共有ストレージを物理的共有ストレージと共存させることができる。したがって、分散ストレージシステムが、１つ又は２つ以上のストレージデバイスからのデータの高可用性を提供するために、マルチノードクラスタに実装され得る。
【００５２】
したがって、分散コンピューティングシステムは、研究、政府、及びエンタープライズコンピューティングシステムの重要な部分であることは驚くべきことではない。かかるコンピューティングシステムの利点の中には、大規模な計算上の問題、大量のデータ処理状況、及び上記のような高可用性の状況を含む多様な異なるコンピューティングシナリオを処理する能力がある。コンピュータシステムに高可用性（例えば、システムユーザにサービスを提供しながらシステムを維持する能力）が必要とされるアプリケーションでは、マルチノードクラスタの実装が分散コンピューティングモデルに有用である。
【００５３】
上記のように、クラスタは、処理能力及び大容量ストレージリソースを協力して提供するために、単一のエンティティとして協働する分散コンピュータシステムである。クラスタにより、コンピュータシステムの処理負荷は、典型的には、複数のコンピュータに分散され、それにより、単一障害ポイントを排除する。その結果、クラスタ上で実行されているプログラムは、クラスタ内の１つのコンピュータに問題があっても、引続き機能することができる。別の例では、クラスタのうちの１つ又は２つ以上のコンピュータは、クラスタ内の別のコンピュータに障害が生じた場合に、使用可能な状態にされ得る。クラスタ内の各コンピュータは、典型的には、オペレーティングシステムの独立したインスタンスを実行するが、追加のクラスタリングソフトウェアがクラスタ内の各コンピュータで実行され、通信及び所望のクラスタ行為を容易にする。
【００５４】
クラスタにおける１つの既知の問題は、クラスタのうちの１つ又は２つ以上のノードが、他のノードが適切に機能していないか、又はクラスタから離脱したと誤って認識している場合に発生する。この「スプリットブレイン」状態は、クラスタの２つ又はそれ以上のサブクラスタ（「ネットワークパーティション」とも呼ばれる）への効果的なパーティション化をもたらす。スプリットブレイン状態の原因は、とりわけ、ノード間の通信チャネルの障害、及びノード間の通常の通信シーケンスにおける過剰な遅延（例えば、１つのノードが、過剰な時間期間のためにハートビート信号の送信に失敗する）を引き起こす１つのノード上の処理負荷を含む。
【００５５】
例えば、クラスタは、第１のノード上で動作するアプリケーションプログラムによるフェイルオーバー動作のために構成され、クラスタ内に存在する第２のノードが、第１のノードのためにテイクオーバして失敗すると、ネットワークの完全な障害により、第２のノードは第１のノードが障害を生じていると結論付ける。次いで、第２のノードは、第１のノードが実際に障害を生じていなくても動作を開始する。したがって、第１のノード及び第２のノードの両方が、分散ストレージシステム内のストレージデバイスのうちの１つの同じ部分（又は領域）にデータを書き込もうと試みる可能性があり、それにより、データの破損を引き起こす。解決策は、ノードのうちの１つが共有ストレージにアクセスできないようにすることである。上記のように、入力／出力フェンシング（又はより簡単に、単にフェンシングという）は、ノードを共有ストレージから「フェンシングオフ」するために実装され得る。
【００５６】
加えて、ネットワークパーティションは、多様な他の形式をとり、多様な有害な影響を及ぼすことがある。例えば、ノードが既にクラスタから正常に除外された（又は排除された）後、ノードはクラスタに再加入を試みることがある。したがって、再加入するノードは、ノードを除外し、その代わりにパーティションイベントとして解釈するために、クラスタ環境設定に遭遇することがある。更に、ネットワークパーティションは、ノード間に共有ストレージがない場合（例えば、いわゆる「無共有」クラスタ）にも、問題が生じる可能性がある。例えば、クラスタのうちの１つのノードがクライアントと対話するノードとされており、別のノードがネットワークパーティションを検出すると、クライアントは最終的に間違ったノードと通信し、それにより、何らかのエラーをもたらす可能性がある。
【００５７】
ネットワークパーティション中にネットワークの一部に障害が生じた場合など、ノード間の通信に障害が生じた場合、ノードの２つ又はそれ以上のサブクラスタの各々は、ノードの他のサブクラスタが障害を生じた（又は、障害が生じた可能性がある）ことを決定する可能性がある。例えば、ノードのうちの２つ（又はそれ以上）のサブクラスタの間で競争（「フェンシング競争」とも呼ばれる）が発生し、その結果、ノードの各サブクラスタの制御モジュールは、ノードの他のサブクラスタが誤動作していると決定する可能性がある。
【００５８】
前述したように、第１のサブクラスタ（又はネットワークパーティション）内のノードは、ストレージデバイスへのデータ書き込みを実施することができ、一方で、他のサブクラスタ（又は他のネットワークパーティション）内のノードはまた、共有ストレージデバイスの同一部分へのデータ書き込みを実施することができ、データの不一致エラーをもたらす。これらのデータの不一致エラーを防止するために、勝者及び敗者サブクラスタ（又はグループ）を決定する「アービトレーションプロセス」が実施される。
【００５９】
勝者サブクラスタ内のノードは、共有ストレージとの通信を継続するように決定されるが、敗者サブクラスタ内のノードは、これらの共有ストレージデバイスとの通信を停止するように決定される。しかし、勝者サブクラスタ内のノードは、敗者サブクラスタ内のノードがアービトレーションを損失した（したがって、共有ストレージデバイスを使用することを断念する）と結論付ける状況又はその時間を決定しない。したがって、このアービトレーションプロセスに加えて、ノードの勝者サブクラスタの制御モジュールは、残りの分散ストレージシステムから、敗者サブクラスタからノードをフェンシングするフェンシングプロセスを実施することができる。敗者ノードからの不適切なデータ書き込みによって多様なデータの不一致とその他のエラーが生じるため、敗者サブクラスタのノードがストレージデバイスと通信しないようにするために、フェンシングプロセス（又は、より簡単にフェンシング及び／又はフェンシング動作）が実施される。
【００６０】
一般に、フェンシングは２段階で実施され得る。第１段階では、フェンシングは、ノードの敗者サブクラスタをフェンシングしようと試みる。敗者ノードには、アービトレーションの結果及び／又は実装されているフェンシングプロセスについて通知され得る。かかる通知は、敗者サブクラスタがアービトレーションプロセスに負けたことを発見するノードの敗者サブクラスタの制御モジュールを含むことができ、ノードの敗者サブクラスタの制御モジュールは、とりわけ、通信の損失を示す通信エラー及び／又は無効にされている敗者ノードからの通信に遭遇する。
【００６１】
第２段階では、フェンシングは、敗者ノードからのいかなる通信も受け入れないように、共有ストレージデバイス（勝者サブクラスタにアクセス可能な）に指示することなどによって、敗者ノードのストレージデバイスへのアクセスを排除する。この場合、ノードの勝者サブクラスタの制御モジュールが、ノードの敗者サブクラスタが共有ストレージデバイスへのデータ書き込みをもはや実行していないことを確認することができなくても（共有アプリケーションのインスタンスを実行することなどによって）、敗者ノードは、勝者ノードによって使用されているアプリケーションデータにアクセス／変更を行うことができなくなる。実際には、このフェンシングメカニズムは、クラスタの一部が非協調的な方法で、共有ストレージデバイスにアクセスすることを防ぐ。
【００６２】
ただし、フェンシングを実施する場合は、複数のノードのために共有ストレージにアクセスできるようにし、他のノードのためのアクセス（共有ストレージへの）を同時にブロックする、個別のコンピューティングデバイスを使用することが好ましい。かかる個別の（及び独立した）コンピューティングデバイスを使用すると、クラスタ内のノード上で実行されている既存のフェンシングソフトウェアとシームレスに統合する追加のアービトレーションメカニズムを提供することにより、フェンシング動作中に分散ストレージシステムに回復力が与えられる。更に、かかる個別のコンピューティングデバイスは、フェンシング動作の実行（及び管理）専用の中間デバイスとして動作し（又は機能）、これにより分散ストレージシステムの速度及び効率を向上させる。
【００６３】
フェンシング動作により支援する上述の個別のコンピューティングデバイスとして、クラスタ内にコーディネーションポイント（ＣＰ）が実装され得る。コーディネーションポイントは、共有ストレージ（例えば、データドライブ）を、クラスタ内の他のノードからフェンシングオフすることを許可されているノードを決定するためのロック機構を提供する。更に、コーディネーションポイントは、複数のノードのための共有ストレージへのアクセスを可能にする専用デバイスであり、（クラスタ内の）他のノードのためのアクセス（共有ストレージへの）を同時にブロックする。
【００６４】
高可用性クラスタでは、サーバ、ディスク、相互接続、並びに／又は他のハードウェア及び／若しくはソフトウェアアプライアンスが、クラスタ内のハードウェア及び／又はソフトウェアコンポーネントの損失の場合にデータの整合性を保証するために、コーディネーションポイント（クラスタの外部）として実装され（又は使用され）得る。したがって、コーディネーションポイントは、データ保護を提供し、クラスタ内で高可用性を維持する際に不可欠であり、フェンシングに使用されるコーディネーションポイントの損失（又は欠損）は、とりわけ、これらの重要な目標の両方に影響を及ぼす。
【００６５】
残念なことに、フェンシングのコンテキストにおける使用コーディネーションポイントは、いくつかの問題を有する（及び引き起こす）。典型的には、クラスタ内の全てのノードは、全てのコーディネーションポイントへのアクセスを必要とする（例えば、クラスタ内の他のノードが共有リソースにアクセスすることを阻止することにより、フェンシング競争を実施してそれに勝つことができる）。ただし、コーディネーションポイントは（他の問題の中でも）、（１）クラスタ起動の失敗と、（２）準最適なフェンシング競争結果と、（３）非対称／ＦＳＳシステムの問題と、を引き起こすことがある。
【００６６】
第１に、Ｉ／Ｏフェンシングのコンテキストにおけるコーディネーションポイントの使用（又は実装）は、他の欠点の中でも、クラスタの起動の失敗を引き起こすことがある。例えば、スプリットブレイン状態が発生した場合、どのサブクラスタが機能し続けるかを決定するアービトレーションプロセスの定義は、（例えば、フェンシング競争の結果を使用することによって）クラスタ内の各ノードによって、（例えば、特定のサブクラスタ内のノードが１つ又は２つ以上のコーディネーションポイントにアクセスできるかどうかに基づいて）アクセス可能な（又は到達可能な）コーディネーションポイントを使用することによってなされる。ただし、クラスタの起動（又は配置）中にクラスタ内の全てのノードがこれらのコーディネーションポイントのうちの１つにアクセスできない場合でも、クラスタリングスタックは起動するために使用不可能である。したがって、この例では、クラスタの起動に失敗するだけでなく、全てのコーディネーションポイントが単一の障害ポイントに変わる（このため、必要な高可用性の代わりにデータが使用できない状況が発生する）可能性がある。更に、その結果、ノードはクラスタに参加できなくなる。
【００６７】
第２に、フェンシングのコンテキストにおけるコーディネーションポイントの使用は、準最適なフェンシング競争結果を引き起こすことがある。上述したように、アービトレーションプロセスを実行する場合、コーディネーションポイントと通信するためにサブクラスタによって選択されたノードは、競争者ノードと呼ばれる。クラスタ内の他のノードを正常にフェンシングオフするために、競争者ノードは、コーディネーションポイントのうちの少なくとも大半から、それ自体のサブクラスタにないノードを排除できなければならない。この例では、各コーディネーションがクラスタ内の１つ（又は複数）のノードからアクセス可能であっても、コーディネーションポイントの大半にアクセスできる単一のノードが存在しないため、クラスタ全体にアービトレーションプロセスの損失を引き起こし、クラスタ全体の停止を招くことがある。
【００６８】
更に、アービトレーションプロセスの間に、サブクラスタは、コーディネーションポイントの大半にアクセス（又は到達）することができる単一のノードが見つかるまで、異なるノードを競争者ノードとして再選することができる。かかるノードが見つからない場合、ネットワークパーティション（又はサブクラスタ）はフェンシング競争に負け、パニックになる（例えば、クラスタを離脱する）。この競争者再選のプロセスは、アービトレーションプロセスの遅延を引き起こし、アプリケーションフェイルオーバーを招くことがある。更に、競争者再選はまた、フェンシング競争に勝つより小さい及び／又はそれほど重要でないパーティションを招くことがある。更に、サブクラスタのいずれもが、コーディネーションポイントの大半に到達（又はアクセス）できるノードを有していない場合、全てのパーティション（又はサブクラスタ）はフェンシング競争に負け、パニックになる。この状況は、分散コンピューティングシステムの著しいダウンタイムを引き起こす。
【００６９】
第３に、クラスタ起動の失敗及び準最適フェンシング競争結果の上記の問題は、非対称／ＦＳＳシステムにおいて更に重要である。例えば、ＦＳＳ環境では、典型的に、コーディネーションポイントへの非対称接続性を許可するフェンシング構成が可能である（例えば、全てのノードがコーディネーションポイントにアクセス可能である必要はない）。更に、ＦＳＳ環境は、共有ストレージ（例えば、計算ノード）への接続性を有していないノードを含むことが多い。したがって、ＦＳＳ環境であっても、ノードのいくつか（又はまったくなし）がコーディネーションポイントの大半にアクセス（又は到達）することができることがある。かかる状況はまた、分散ストレージシステム及び／又はアプリケーションフェイルオーバーの著しいダウンタイムを引き起こすことがある。
【００７０】
したがって、フェンシング動作を実施するためにコーディネーションポイントを使用する高可用性クラスタにおけるフェンシングを最適化するための、並びにかかるコーディネーションポイントの使用によって引き起こされる、クラスタ起動の失敗、準最適フェンシング競技結果、及び非対称／ＦＳＳシステムに関連する、欠点を改善するための、プロセス、方法、及びシステムが本明細書に記載される。
コーディネーションポイントを使用するＩ／Ｏフェンシングシステムの例
【００７１】
図１Ａは、一実施形態に従う、フェンシングモジュールを実装するコンピューティングシステムのブロック図である。図１Ａは、ネットワーク２０を介して相互に接続されたクライアント１０及びサーバ３０を含む。ネットワーク２０は、ストレージエリアネットワーク（ＳＡＮ）又は任意の他のタイプの相互接続であってもよい。クライアント１０及びサーバ３０は、サーバ、デスクトップ、ラップトップ、タブレットなどを含む任意のタイプのコンピューティングデバイスであってもよい。クライアント１０は、構成ファイル１５０を含む。
【００７２】
サーバ３０は、プロセッサ４０及びメモリ５０を含む。メモリ５０は、クラスタ１１０内にＩ／Ｏフェンシング環境を実装する。クラスタ１１０はノード１２０を更に含む。ノード１２０は、サーバ、デスクトップ、ラップトップ、タブレットなどを含む任意のタイプのコンピューティングデバイスとすることができる。ノード１２０は、フェンシングドライバ１４０及び構成１５０を更に含む、フェンシングモジュール１３０を実装する。ノード１２０はまた、コーディネーションポイント到達可能性行列（ＣＰＲＭ）１６０を含む。サーバ３０は、１つ又は２つ以上のクラスタを実装することができ、１つ又は２つ以上のクラスタは、各々、複数のノードを実装することができることに留意すべきである。
【００７３】
構成ファイル１５０は、クライアント１０によって生成され、ネットワーク２０を介してサーバ３０に送信されてもよい。構成ファイル１５０は、コーディネーションポイントに関する情報を含む。例えば、構成１５０は、図１Ａのコンピューティングシステム（図示せず）に実装されるコーディネーションポイントを識別することができ、コーディネーションポイントの合計数に関する情報も含むことができる。例えば、構成ファイル１５０は、３つのコーディネーションポイントの合計が分散コンピューティングシステムに実装されていることを識別してもよい。一実施形態では、構成ファイル１５０は、クライアント１０の管理者及び／又はユーザによって作成されてもよい。クライアント１０によって生成されると、構成ファイル１５０はサーバ３０に送信され、例えば、構成ポイントの合計数を識別するためにノード１２０によって使用されてもよい。
【００７４】
図１Ｂは、一実施形態に従う、コーディネーションポイントを用いて実装されるＩ／Ｏフェンシング環境のブロック図である。図示されるように、クラスタ１１０は、ノード１２０（１）、１２０（２）及び１２０（３）を含む。ノード１２０（１）は、フェンシングドライバ１４０（１）を更に含む、フェンシングモジュール１３０（１）を実装する。ノード１２０（１）はまた、構成ファイル１５０（１）及びＣＰＲＭ１６０（１）含む。ノード１２０（２）は、フェンシングドライバ１４０（２）を更に含むフェンシングモジュール１３０（２）を実装する。ノード１２０（２）はまた、構成ファイル１５０（２）及びＣＰＲＭ１６０（２）を含む。同様に、ノード１２０（３）は、フェンシングドライバ１４０（３）を更に含む、フェンシングモジュール１３０（３）を実装する。ノード１２０（３）はまた、構成ファイル１５０（３）及びＣＰＲＭ１６０（３）も含む。前述したように、フェンシングモジュールは、各ノード上で（例えば、クライアント１０によって）実装されてもよい。一部の実施形態では、フェンシングモジュールはカーネルモジュールであってもよい。フェンシングモジュール１３０（１）〜（３）は、メンバーシップアービトレーション（例えば、上記のアービトレーションプロセス）を介して、有効で最新のクラスタメンバーシップ（又はメンバーシップ変更）を保証する役割を担う。
【００７５】
一部の実施形態では、フェンシングモジュール１３０（１）〜（３）はまた、ノード１２０（１）〜（３）をコーディネーションポイント（ＣＰ）１７０により、それぞれ登録する。例えば、フェンシングモジュール１３０（１）は、フェンシングドライバ１４０（１）を使用して、ノード１２０（１）を識別する登録キーをコーディネーションポイント１７０上に配置（又はインストール）することができる。同様に、フェンシングモジュール１３０（２）及び１３０（３）は、フェンシングドライバ１４０（２）及び１４０（３）を使用して、各々、ノード１２０（２）及び１２０（３）をそれぞれ識別する登録キーを、コーディネーションポイント１７０上にそれぞれ配置する。したがって、図１Ｂに示されるような登録キー１８０は、ノード１２０（１）〜（３）の登録キーを含むことができる。図示されるように、図１Ｂはまた、（ノード１２０（１）〜（３）によって共有される（ストレージとして））データディスク１９０を含む。
【００７６】
ノード１２０（１）〜（３）の構成ファイル１５０（１）〜（３）は同じ情報を含むことに留意すべきである。例えば、構成ファイル１５０（１）〜（３）によって識別されるコーディネーションポイントの数は、固定され、事前構成されている。結果として、ノード１２０（１）〜（３）は、同じ数のコーディネーションポイントへのアクセス（又は潜在的アクセス）を有する。
【００７７】
図２は、一実施形態に従う、コーディネーションポイントを実装するＦＳＳシステムのブロック図である。図２に示されるように、ノード１２０（１）〜（３）は、各々、直接接続ストレージ（ＤＡＳ）２１０（１）〜（３）に接続される。図２のＦＳＳシステムはまた、ノード１２０（１）〜（３）にそれぞれ関連付けられているローカルストレージアレイ２２０（１）〜（３）、及び部分共有ストレージアレイ２４０を含む。図２のコーディネーションポイント１７０は、完全共有ストレージアレイ２３０である。したがって、コーディネーションポイントは、ＦＳＳシステムでは、ローカルストレージ（例えば、ＤＡＳ２１０（１）〜（３））のクラスタ全体の共有を可能にするために使用されてもよい。このようにして、ネットワーク化共有ストレージは、物理的共有ストレージと共存することができる。
【００７８】
一実施形態では、ノード１２０（１）〜（３）の各々は、完全共有ストレージアレイ２３０へのアクセスを必要とする。ＦＳＳシステムのノードは同じ共有ストレージへのアクセスを必要としないが、Ｉ／Ｏフェンシングは、完全に共有される（クラスタ内の全てのノードによって）コーディネーションポイントを必要とする。したがって、この例では、完全共有ストレージアレイ２３０が、コーディネーションポイントとして選択される。
コーディネーションポイントの例
【００７９】
前述したように、コーディネーションポイントは、フェンシング動作を支援するために、クラスタ内に実装され得る。コーディネーションポイントは、共有ストレージ（例えば、データドライブ）を、クラスタ内の他のノードからフェンシングオフすることを許可されているノードを決定するためのロック機構を提供する。例えば、ノードは、そのノードが共有ストレージからピアノードをフェンシングすることが許可される前に、ピアノードの登録キーをコーディネーションポイントから取り出さなければならない。コーディネーションポイントは、ディスク又はサーバのいずれか、又はその両方であってもよい。典型的には、一実施形態では、クラスタ１１０は、ディスク及び／又はサーバの組み合わせであり得る、少なくとも３つのコーディネーションポイントを含む。
【００８０】
コーディネーションポイントとして機能するディスクは、コーディネータディスクと呼ばれる。一実施形態では、コーディネータディスクは、クラスタ再構成中（例えば、クラスタが形成される前）に、Ｉ／Ｏフェンシングのために用意された３つの標準ディスク又はＬＵＮ（論理ユニット番号）である。コーディネータディスク（及びコーディネーションポイント）は、クラスタ内の他の記憶目的（例えば、データストレージ又はユーザデータ用のディスクグループへの包含など）には作用しない。ＳＣＳＩ−３永続的予約（ＳＣＳＩ−３  ＰＲ）をサポートするディスクは全て、コーディネータディスクとなり得る。別の実施形態では、コーディネーションポイントはまた、コーディネーションポイントサーバと呼ばれるサーバであってもよい。コーディネーションポイントサーバは、リモートコンピューティングシステム又はクラスタ上で実行されるソフトウェアソリューションである。
【００８１】
したがって、コーディネーションポイントがコーディネータディスクであるかコーディネーションポイントサーバであるかにかかわらず、コーディネーションポイントは、クラスタ内のノードに、少なくとも、（１）登録してクラスタのメンバになることと、（２）他のノードが同じクラスタのメンバとして正常に登録されたことを決定することと、（３）クラスタから登録解除されることと、（４）他のノードをクラスタのメンバとして強制的に登録解除して阻止することと、を許可する。
【００８２】
一部の実施形態では、コーディネーションポイントは、最小でも、３つのコーディネータディスク又はコーディネーションポイントサーバ（又はその２つの任意の組み合わせ）であり、これらのコーディネーションポイントの制御のための競争（例えば、フェンシング競争）がクラスタメンバーシップを決定するために使用されるため、グローバルロックデバイスとして共に作用する。クラスタの制御は、コーディネーションポイントの大半の制御を獲得する（又は勝つ）ノードに与えられるため、常に奇数個のコーディネーションポイント（例えば、奇数個のコーディネータディスク及び／又はコーディネーションポイントサーバの任意の組み合わせ）が存在しなければならない。一実施形態では、最大３つのコーディネータディスク又はコーディネーションポイントサーバ（又はその２つの任意の組み合わせ）が実装される。
【００８３】
前述のように、フェンシングは、存続するパーティションだけが共有ストレージに書き込むことができるように、ネットワークパーティションを経験したクラスタ内で、１つのパーティション（又はサブクラスタ）のみが存続するようにするために使用され得る。フェンシングは、フェンシング競争を使用して、どのパーティション又はサブクラスタが、他のサブクラスタ又はパーティション内のノードをフェンシングオフするかを決定する。一実施形態では、共有ストレージへのアクセスを管理するためにコーディネーションポイントが使用されるため、フェンシング競争は、コーディネーションポイントの大半へのアクセスを獲得する（又はそこへ到達する）異なるサブクラスタ又はパーティション内のノードを指す。したがって、フェンシング競争とは、コーディネーションポイントの大半への接続性（又はアクセス可能性）を有するノードのパーティション又はサブクラスタを指す。
【００８４】
サブクラスタ（又はパーティション）内のノードは、１つだけのコーディネーションポイントをクラスタに利用可能にすると、単一ポイント障害が発生する可能性があるため、コーディネーションポイントの大半にアクセスする必要があることに留意すべきである。例えば、何らかの理由で１つのコーディネーションポイントに障害が生じた場合、クラスタは動作能力を損失する可能性がある。更に、２つ（又は偶数個）のコーディネーションポイント（例えば、４つ、６つなど）を使用することにより、異なるサブクラスタ内のノードが、同じ数であるが異なっているコーディネーションポイントにアクセスし得るため、いずれのサブクラスタもフェンシング競争に決定的に勝つことのない状況（例えば、クラスタが２つ又は４つの利用可能なコーディネーションポイントを有する２つのサブクラスタにパーティション化されている状況）を招くことがある。
【００８５】
したがって、１つのコーディネーションポイント又は偶数のコーディネーションポイントを使用すると、両方のサブクラスタ内のノードが共有ストレージにデータを書き込むことを招き、それによりデータの破損を引き起こすことがある。したがって、パーティション化されたクラスタ内で所望のパーティションを動作可能に保つために、サブクラスタ内のノードは、単独で、又はそのサブクラスタ内の他のノードと共同で、クラスタに利用可能なコーディネーションポイントの大半にアクセスする（又はそれを勝ち取る）ことが可能でなければならない（例えば、奇数個のコーディネーションポイントが利用可能になる場合に、全ての状況において決定的に達成され得るのみのタスク）。
【００８６】
コーディネーションポイントは、概して、フェンシング決定を実行するために実行可能であるか、又は使用することができる（例えば、コーディネーションポイント１７０を使用して、パーティションイベント後のクラスタ１１０のスプリットブレインシナリオを解決することができる）任意のタイプ又は形態のコンピューティングデバイスを表す。例えば、コーディネーションポイント１７０は、１つ若しくは２つ以上のコーディネーションディスク及び／又はフェンシング決定を決定するために使用することができる１つ又は２つ以上のコーディネーションサーバを表すことができる。コーディネーションポイント１７０の例として、多様なデータベースサービスを提供し、かつ／又は特定のソフトウェアアプリケーション、ストレージデバイス（ディスク又はディスクアレイなど）、ラップトップ、デスクトップ、携帯電話、パーソナルデジタルアシスタント（ＰＤＡ）、マルチメディアプレーヤ、組み込みシステム、及び／若しくはそれらの１つ若しくは２つ以上の組み合わせを実行するように構成されたアプリケーションサーバ及びデータベースサーバが挙げられるが、これらに限定されない。
コーディネーションポイント到達可能性行列（ＣＰＲＭ）の使用例
【００８７】
一部の実施形態では、クラスタ１１０内のノードは、コーディネーションポイント到達可能性行列（「ＣＰＲＭ」又は単に「行列」という）を使用し、各ノードのアクセス可能性（又は到達可能性）に関する情報を、クラスタ１１０に提供される１つ又は２つ以上のコーディネーションポイントに対して交換する。ＣＰＲＭは、クラスタ内の各ノードを識別する情報を含み、また、ノードが１つ若しくは２つ以上のコーディネーションポイントにアクセスするか又は到達できるかどうかを決定するための情報も含む。
【００８８】
ＣＰＲＭは、例えば、フェンシングモジュール１３０（図１Ａに示されるような）を使用することによって、クラスタ内の任意のノードによって生成されてもよい。ＣＰＲＭはまた、ＣＰＲＭによって提供される情報が全てのノードで利用可能であるように、クラスタ内の全てのノードにわたって複製され（及び共有され）てもよい。例えば、図２に示されるようなフェンシングモジュール１３０（１）は、ＣＰＲＭ（例えば、ＣＰＲＭ１６０（１））を生成し、そのＣＰＲＭをクラスタ内の残っているノードにわたって複製して（例えば、ノード１２０（２）上のＣＰＲＭ１６０（２）及びノード１３０（３）上のノードＣＰＲＭ１６０（３）として）もよい。
【００８９】
図３Ａは、一実施形態に従う、コーディネーションポイントを使用してフェンシング動作を実施するクラスタ内のノードのブロック図である。図３Ａは、ノード１２０（１）、１２０（２）、１２０（３）、１２０（４）及び１２０（５）の５つのノードと、コーディネーションポイント１７０（１）、１７０（２）及び１７０（３）の３つのコーディネーションポイントとを含む。各ノードは、コーディネーションポイント１７０（１）〜（３）の各々への接続性を有するか又は有さない。各ノードはまた、ＣＰＲＭ（ノード１２０（１）〜（５）にそれぞれ対応するＣＰＲＭ１６０（１）〜（５）として示される）を有する。
【００９０】
フェンシング競争を行う前に、サブクラスタが競争者ノードを選出する。競争者は、サブクラスタによって指定されたノードであり、ノードがクラスタに利用可能な１つ又は２つ以上のコーディネーションポイントにアクセスできるか（全体として）どうかを決定する。典型的には、競争者ノードは、ノードＩＤに基づいてクラスタによって選択される（又は指定される）。しかし、ノードＩＤ以外によって競争者ノードを選択しかつ／又は指定する他の方法も考えられることに留意すべきである。
【００９１】
一実施形態では、フェンシングモジュール１３０（１）は、行列（例えば、ＣＰＲＭ  １６０（１））を生成する。行列は、第１のノード（例えば、ノード１２０（１））による各コーディネーションポイントのアクセス可能性を示す情報を含む。次いで、フェンシングモジュール１３０（１）は、行列をクラスタ内の他のノードに送信する。行列は、各コーディネーションポイントに対するノードのアクセス可能性ステータスを有するクラスタ内の各ノードによって更新されてもよく、更新された行列は、クラスタ内の全てのノードが各コーディネーションポイントへの各ノードの接続性情報（例えば、行列から）を有するように、クラスタ内の全てのノードにわたって複製されかつ共有されてもよい。
【００９２】
ＣＰＲＭが使用されないシナリオでは、図３Ａの両方のサブクラスタは、フェンシング競争に負けることになる。例えば、図３Ａは、２つのサブクラスタ（又は２つのパーティション）を作成する、５つのノードクラスタのネットワークパーティション（２つの「Ｘ」記号によって示される）を示す。ノード１２０（１）〜（３）は第１のサブクラスタに属し、ノード１２０（４）〜（５）は第２のサブクラスタに属する。更に、ノード１２０（１）〜（５）は、３つのコーディネーションポイント、すなわちコーディネーションポイント１７０（１）〜（３）を利用することができる。
【００９３】
図３Ａに示されるように、コーディネーションポイント（cooridination points）１７０（１）〜（３）への接続性は、全てのノードから非対称である。例えば、ノード１２０（１）はコーディネーションポイント１７０（３）にのみアクセスでき、ノード１２０（２）はコーディネーションポイント１７０（２）にのみアクセスでき、ノード１２０（３）はコーディネーションポイント１７０（１）にのみアクセスできる。前述のように、ノードは、それぞれの登録キーを所与のコーディネーションポイントにインストールすること（又は配置すること）に基づいて、コーディネーションポイントへのアクセスを正常に獲得することができる。
【００９４】
ネットワークパーティション（図３Ａに示されるような）において、第１のサブクラスタ（ノード１２０（１）〜（３）の）は、ノード１２０（１）を競争者ノードとして選出する（例えばノード１２０（１）のノードＩＤに基づいて）。ノード１２０（１）は、半分を超えるコーディネーションポイント（cooridination points）に到達（又はアクセス）できないため（例えば、ノード１２０（１）がコーディネーションポイント１７０（３）へのアクセスのみを有しているため）、第１のサブクラスタはノード１２０（２）を競争者ノードとして再選する。しかし、第１のサブクラスタ（ノード１２０（１）、１２０（２）、又は１２０（３））内の３つのノードのいずれも、各々がコーディネーションポイントの大半へのアクセスを個別に有していない。
【００９５】
同じ状況が、第２のサブクラスタ内で発生する可能性がある。ノード１２０（４）も１２０（５）も、ノード１２０（４）がコーディネーションポイント１７０（１）にのみにアクセスでき、ノード１２０（５）がコーディネーションポイント１７０（２）にのみにアクセスできるため、各々がコーディネーションポイントの大半に個別にアクセスできない。したがって、ＣＰＲＭが使用されない場合、両方のパーティション（例えば、第１のサブクラスタ及び第２のサブクラスタ）は、パーティション競争に負ける。いずれのパーティションも存続しないため、全てのクラスタの停止が発生し得る（例えば、全てのノードがパニックになり、クラスタを離れる）。
【００９６】
しかし、ＣＰＲＭが実装されている場合（例えば、ＣＰＲＭ１６０（１）〜（５））、第１のサブクラスタはフェンシング競争に勝ち、第１のサブクラスタのパーティションは存続する。例えば、一実施形態では、ＣＰＲＭは、クラスタ内の各ノードの各コーディネーションポイントへの接続性（又は到達可能性）を示す。したがって、現在の例では、ノード１２０（２）が競争者ノードとして再選された後、第１のサブクラスタは、ＣＰＲＭにアクセスすることによって（例えば、ノード１２０（２）が、競争者ノードとして再選されると、ＣＰＲＭ１６０（２）にアクセスする）、ノード１２０（１）及び１２０（２）は、共同で、コーディネーションポイントの大半（例えば、それぞれコーディネーションポイント１７０（２）及び１７０（３））へのアクセスを有していることを決定することができる。したがって、競争者ノードとしてのノード１２０（３）の再選は必要とされず（図３Ａに「Ｘ」で示されている）、第１のサブクラスタはフェンシング競争に勝ち、存続する。このようにして、ＣＰＲＭの使用は、コーディネーションポイントがフェンシング動作に使用されるとき、ネットワークパーティションに起因する欠損を回避することができる。
【００９７】
図３Ｂは、一実施形態に従う、コーディネーションポイントを使用してフェンシング動作を実行するクラスタ内のノードのブロック図である。図３Ａのように、図３Ｂは、ネットワークパーティションを受ける５つのノードクラスタを示す。前述のように、Ｉ／Ｏフェンシングを実施するためにコーディネーションポイントを使用することの１つの欠点は、クラスタがパーティション化されている場合、より小さいパーティション（又はサブクラスタ）がフェンシング競争に勝つ結果になる可能性があることである。この準最適フェンシング競争結果は、ノードの数がより多いサブクラスタが、ネットワークパーティション上のフェンシング競争（例えば、高可用性、アプリケーションフェイルオーバーなどを提供するため）から存続しなければならないため、好ましくない。
【００９８】
したがって、ＣＰＲＭが使用されない場合、図３Ｂの第２のサブクラスタ（例えば、ノード１２０（４）及び１２０（５）を有するサブクラスタ）は、フェンシング競争に勝つ結果となり、したがって、より好ましい第１のサブクラスタ内のノード（例えばノード１２０（１）〜（３））をパニック状態にしてクラスタから離れさせることができる。例えば、図３Ｂに示すように、ノード１２０（４）は、コーディネーションポイント１７０（１）及び１７０（２）へのアクセスを有するが、ノード１２０（１）は、コーディネーションポイント１７０（３）へのアクセスのみを有する。前述したように、競争者ノードを選択する１つの方法は、ノードのノードＩＤを使用することである。したがって、この例では、ノード１２０（１）が第１のサブクラスタの競争者ノードに選択され、ノード１２０（４）が第２のサブクラスタの競争者ノードとして選択される。
【００９９】
ノード１２０（１）はコーディネーションポイントの大半へのアクセスを有していないため、第１のサブクラスタは、ノード１２０（２）を競争者ノードとして再選することに留意されたい。しかしながら、第２のサブクラスタによって競争者ノードとして単独で選択されるノード１２０（４）は、コーディネーションポイントの大半（例えば、コーディネーションポイント１７０（１）及び１７０（２））へのアクセスを有する。したがって、競争者再選（例えば、ノード１２０（５）を競争者ノードとして選択する）は、第２のサブクラスタ内では不要であり、第２のサブクラスタはフェンシング競争に勝つことができ、つまり望ましくない結果である。
【０１００】
その結果、第２のサブクラスタが遅延された開始を経験しても（例えば、第２のサブクラスタが、第１のサブクラスタが競争者ノードを選択し、第２のサブクラスタの前にフェンシング競争を開始することを待つ場合）、第２のサブクラスタが競争者の再選を必要としないので、第２のサブクラスタはフェンシング競争に勝つ。残念なことに、第１のサブクラスタがＣＰＲＭを使用しない場合、第１のサブクラスタが、コーディネーションポイント（例えば、図３Ｂに示されるようなノード１２０（３））の大半へのアクセスを提供することができる（健全な）競争者ノードを見つけることができるまで、複数の競争者再選（又はハンドオフ）を経なければならないため、第１のサブクラスタはフェンシング競争に負ける。より小さいパーティションが存続するため、クラスタは欠損（又は可用性が低い）を経験する可能性がある。
【０１０１】
したがって、一実施形態では、ＣＰＲＭがクラスタ内のノードによって使用される。その結果、ノード１２０（１）及びノード１２０（２）は、各々がＣＰＲＭにアクセスして、ノード１２０（１）及びノード１２０（２）がコーディネーションポイント（例えば、コーディネーションポイント１７０（２）及び１７０（３））の大半へのアクセスを（共同で）有していることを決定するため、第１のサブクラスタによる競争者ノードとしてのノード１２０（３）の再選は必要とされない。したがって、第１の（より大きい）サブクラスタはフェンシング競争に勝ち、第２の（より小さい）サブクラスタをフェンシングすることを可能にする、つまり所望の結果である。
【０１０２】
図４は、一実施形態に従う、コーディネーションポイント到達可能性行列（ＣＰＲＭ）の表である。前述したように、一実施形態では、ＣＰＲＭはクラスタ内の任意のノードによって生成されてもよく（例えば、フェンシングモジュール及び／又はフェンシングドライバを使用して）、別の実施形態では、クラスタ内の全てのノードにわたって複製されて共有されてもよい。一部の実施形態では、ＣＰＲＭはクラスタ全体に原子的に維持され、ＣＰＲＭは新しいノードがクラスタに参加するたびにクラスタ内で更新され、交換される。
【０１０３】
例えば、新しいノードがクラスタに参加するまで、その新しいノードの多様なコーディネーションポイントへの到達可能性（又は可視性及び／又はアクセス可能性）は不明である（クラスタ内の他のノードによって）。ただし、新しいノードがクラスタに参加すると、新しいノードはＣＰＲＭを更新することによってその到達可能性をクラスタにブロードキャストする。次いで、ＣＰＲＭは、クラスタ内の他の（アクティブな）ノードと共有、複製、及び／又は交換される。新しいノードはまた、クラスタに参加すると、ＣＰＲＭのコピーも提供される。
【０１０４】
ＣＰＲＭ（例えば、ＣＰＲＭ１６０）は、クラスタ内の各ノードによって使用され、クラスタ内の１つ又は２つ以上のノードが、単独又は互いと共同のいずれかで、コーディネーションポイントの大半にアクセスできるかどうかを決定する。図４に示されるように、ノード１２０（１）はクラスタ（例えば、クラスタ１１０）を形成しようと試みる。ノード１２０（１）は、コーディネーションポイントにアクセスすることができない（ほとんどのコーディネーションポイントの他に）ため、ノード１２０（１）はクラスタを形成することが許可されない。したがって、ノード１２０（１）がクラスタを形成しようと試みる結果により、結果４１０に「いいえ」が示される。クラスタメンバ４２０及びクラスタスナップショット４３０の列もまた空である（又はヌル）。同様に、ノード１２０（２）がまたコーディネーションポイントの大半にアクセスすることができないため（例えば、ノード１２０（２）はコーディネーションポイント１７０（１）及び１７０（２）にのみアクセスできる）、ノード１２０（２）はまたクラスタを形成することは許可されない。ここでの例では、ノード１２０（３）、１２０（４）及び１２０（５）はまだクラスタを形成しようと試みていないことに留意すべきである。
【０１０５】
図４に示されように、５つのコーディネーションポイントが、形成される任意の（潜在的な）クラスタに提供される（例えば、構成ファイル１５０は、５つのコーディネーションポイントが利用可能であることを示す）。図４に示されるように、スナップショット（例えば、クラスタスナップショット４３０）は、クラスタ内のノードによって使用されている全てのコーディネーションポイントのリストである。一実施形態では、ノード１２０（３）及び１２０（４）は同時に起動する。ＣＰＲＭが使用されない（又は利用可能ではない）場合、ノード１２０（３）及び１２０（４）がコーディネーションポイントの大半に個別にアクセスすることができないため、ノード１２０（２）及び１２０（４）はクラスタを形成することが許可されないことがある。
【０１０６】
しかし、特定の実施形態では、ノード１２０（３）及び１２０（４）は、起動してクラスタを形成しようと試みるときに、各々、独自のＣＰＲＭを生成してもよい。この例では、ノード１２０（３）のＣＰＲＭは、ノード１２０（３）が、コーディネーションポイント１７０（３）及び１７０（５）へのアクセスを有していることを示す。同様に、ノード１２０（４）のＣＰＲＭは、ノード１２０（４）がコーディネーションポイント１７０（４）へのアクセスを有していることを示す。ノード１２０（３）及び１２０（４）は共に出現し（例えば、同時に起動してクラスタを形成しようと試みる）、ノード１２０（３）及び１２０（４）は自身のＣＰＲＭ（生成していたもの）を生成し、互いに交換する。自身のそれぞれのＣＰＲＭの比較に基づいて、ノード１２０（３）及び１２０（４）は、コーディネーションポイントの大半へのアクセスを共に有している（又は到達できる）ことを決定してもよい。したがって、このようにして、ノード１２０（３）及び１２０（４）は共にクラスタを形成することが許可される。
【０１０７】
ノード１２０（３）及び１２０（４）が共にクラスタを形成して参加すると、結果４１０が「はい」を示し、クラスタメンバ４２０が｛３、４｝を示し、クラスタスナップショット４３０が「ＣＤＥ」を示すように、ＣＰＲＭが更新される。ノード１２０（５）がクラスタに参加しようと試みると、ノード１２０（５）がコーディネーションポイントの大半へのアクセスを有していることを示すようにノード１２０（５）に要求することなく、なぜならノード１２０（３）及びノード１２０（４）がこの要件を既に満たしているため、ノード１２０（５）はクラスタに参加することが許可される。したがって、ＣＰＲＭは、ノード１２０（５）が（実行されている）クラスタに正常に参加したことを示すように更新される（例えば、結果４１０が「はい」であり、クラスタメンバ４２０が｛３、４、５｝であり、クラスタスナップショット４３０が「ＡＢＣＤＥ」である）。この時点では、（１）クラスタが起動して実行されている（例えば、クラスタが動作可能である）、（２）コーディネーションポイントの大半が、単独又は共同のいずれかで、１つ又は２つ以上のノードによって到達可能であるという要件が、ノード１２０（３）、１２０（４）、及び１２０（５）によって満たされているため、ノード１２０（１）及び１２０（２）もまた、（実行されている）クラスタに正常に参加することが許可される。この例では、新しいノードがクラスタに参加するたびにＣＰＲＭが更新され、ＣＰＲＭが更新されるたびにクラスタ内の全てのノードでＣＰＲＭが複製され／共有される。
【０１０８】
図５Ａは、一実施形態に従う、ＣＰＲＭを使用してクラスタを形成するためのプロセスのフロー図である。プロセスは、構成ファイルにアクセスする（例えば、ノード１２０（１）が構成ファイル１５０にアクセスする）ことによって、５０５で開始する。５１０で、ノード（クラスタを形成しようと試みている）は、構成ファイルから（利用可能な）コーディネーションポイントの合計数を得る（又は読み取る）。５１５で、プロセスは、かかる他のノードが、クラスタを形成しかつ／又はそれに参加しようと試みている場合、他のノードとＣＰＲＭを交換する（例えば、ノード１２０（１）がＣＰＲＭ  １６０（１）を生成し、それを、起動してノード１２０（１）と同時にクラスタに対する形成／参加を試みる他のノードと交換する）。
【０１０９】
５２０で、プロセスは、ノードが共にコーディネーションポイントの大半にアクセスできるかどうかを決定する。ノードが共にコーディネーションポイントの大半にアクセス（又は到達）できない場合、ノードはパニックになり、５２５で、脱出する（例えば、１２０（４）が出現してクラスタを形成しようと試みる前の、図４に関して上述したようなノード１２０（１）及び１２０（２）ノード１２０（３））。しかし、ノードが共にコーディネーションポイントの大半にアクセス（又は到達）できる場合、ノードは、５３０で、クラスタ（例えば、図４に示されるノード１２０（３）及び１２０（４））を形成する。次いで、プロセスは終了する（例えば、クラスタの形成により）。
【０１１０】
図５Ｂは、一実施形態に従う、実行されているクラスタに参加するためのプロセスのフロー図である。プロセスは、ノードが実行されているクラスタに参加しているかどうかを決定することによって、５３５で開始する。ノードが、実行されているクラスタに参加している場合、プロセスは、５４０で、第１のＣＰＲＭを生成する（例えば、クラスタに参加しているノードは１つ又は２つ以上の利用可能なコーディネーションポイントに対するノードのアクセス可能性を示す第１のＣＰＲＭを生成する）。５４５で、プロセスは、（実行されている）クラスタから、第２のＣＰＲＭを取得する（又は要求する）（例えば、第２のＣＰＲＭは、クラスタ内の各ノードにわたってＣＰＲＭが複製されて共有されるため、実行されているクラスタ内のあらゆるノードから取得されるか又はアクセスされ得る）。第２のＣＰＲＭは、クラスタ内の各アクティブノードの１つ又は２つ以上の（利用可能な）コーディネーションポイントへのアクセス可能性を示す。このプロセスは、第１のＣＰＲＭ（クラスタへの参加を試みるノードによって生成される）と、第２のＣＰＲＭ（クラスタから受信される）とを比較する。
【０１１１】
５５０で、プロセスは、クラスタへ参加することを試みるノードの第１のスナップショットと、コーディネーションポイントの数（Ｓ１．Ｎ）との積が、クラスタの第２のスナップショットとコーディネーションポイントの数（Ｓ２．Ｎ）との積に等しいかどうかを決定する。Ｓ１．ＮがＳ２．Ｎと等しくない場合、ノードは、５６０で、パニックになり退却する（例えばＳ１．ＮがＳ２．Ｎに等しくないことは、クラスタ及び／又はコーディネーションポイント構成において潜在的なエラーを示す可能性がある）。前述の通り、Ｎはノードの構成ファイル内のコーディネーションポイントの数である。Ｎは、ノードのＣＰＲＭ内で維持されてもよい。［Ｓ１．Ｎ≠Ｓ２．Ｎ］のチェックは、ノードの構成ファイルにより、Ｎの設定値が誤っているクラスタに参加しているノードから保護する。
【０１１２】
しかし、Ｓ１．ＮがＳ２．Ｎに等しい場合、プロセスは５５５で、（クラスタに参加しようと試みるノードの）第１のスナップショットとコーディネーションポイントの数（例えばＳ１．Ｎ）との積が、（クラスタの）第１のスナップショット及び第２のスナップショットの和（又は組み合わせ及び／又は合計）とコーディネーションポイントの数（例えば、和（Ｓ１、Ｓ２）．Ｍ）との積より小さいかどうかを決定する。Ｓ１．Ｎが（Ｓ１、Ｓ２）．Ｍより小さい場合、ノードは、５６０で、パニックを起こして退却する。しかし、Ｓ１．Ｎが（Ｓ１、Ｓ２）．Ｍ以上である場合、プロセスは、５６５で、第１のＣＰＲＭ（クラスタに参加しようと試みるノードによって生成された）を（Ｓ１、Ｓ２）の和に更新する。５７０で、プロセスは、（更新された）第１のＣＰＲＭを、クラスタ（例えば、クラスタ内の他のノード）にブロードキャストすることによって終了する。ブロードキャストされた（及び更新された）第１のＣＰＲＭを受信すると、第２のＣＰＲＭも更新され（例えば、第２のＣＰＲＭは情報を更新された第１のＣＰＲＭに組み込む）、単一の（最新で包括的な）ＣＰＲＭ（クラスタ全体を表す）が複製されてクラスタ内の全てのノードで共有される。
【０１１３】
上記の例では、Ｍは、結合演算（例えば、（Ｓ１、Ｓ２）．Ｍ）の結果として、クラスタにより可視（又はアクセス可能）であるコーディネーションポイントの合計数を指す。このチェック又は演算は、クラスタに対して構成された（例えば、管理者によって）コーディネーションポイントとは異なるコーディネーションポイントにより、クラスタに参加しているノードから保護する。例えば、第２のノードが、Ｎ値７でクラスタに参加しようと試みる場合、Ｓ１．Ｎが７で、Ｓ２．Ｎが５であることに起因して、第１のチェック（５５０）が失敗するため、第２のノードはクラスタに参加できなくなる。第３のノードが、Ｎ値５でクラスタに参加しようとし、第３のノードが、２つのコーディネーションポイント｛Ｄ、Ｅ｝へのアクセスを有している場合、クラスタはこれらのコーディネーションポイントにアクセスできない（この時点では）。したがって、２つのＣＰＲＭの和は、｛ＡＢＣＤＥ｝のクラスタスナップショットをもたらす。チェック５５５は、Ｎが５で、Ｍが５であるために失敗する。したがって、ノード３はクラスタに参加することになる。しかし、第４のノードが、Ｎ値５で参加しようとし、第４のノードの要求が、２つのコーディネーションポイント｛Ｆ、Ｇ｝へのアクセスを有する場合、この例における和（５５５）は、｛ＡＢＣＤＥＦＧ｝のクラスタスナップショットをもたらし、Ｍ値は７になる。この場合、Ｎが５で、Ｍが７であるため、チェック５５５は合格となり、ノード４はクラスタに参加しない。
【０１１４】
このようにして、１つ又は２つ以上のＣＰＲＭが、ノードによって生成されて実装され、新しいクラスタを形成し、かつ／又はＩ／Ｏフェンシングを実行するためにコーディネーションポイントを使用する既存のクラスタに参加することができる。更に、コーディネーションポイントを実装する環境でＩ／Ｏフェンシングを実施するためにＣＰＲＭを使用することは、とりわけ、（１）フェンシング競争に起因する欠損と、（２）上記のような準最適なフェンシング競争結果と、の課題を解決する。
既存のスプリットブレインによるデータ破損の防止の例
【０１１５】
しかしながら、上述した方法でＣＰＲＭを実装する利点にもかかわらず、少なくとも２つの更なる課題及び／又は欠点がもたらされる場合がある。第１に、何らかの理由でノードが実行されているクラスタを離脱する（又は脱出する）場合、クラスタ内に残っているノードは、コーディネーションポイントの大半（例えば、コーディネーションポイントの半分又はそれ以上）へのアクセスを損失する可能性がある。例えば、クラスタを離脱するか又は脱出するノードは、少なくとも１つのコーディネーションポイントへのアクセスを提供している可能性があり、そのため、コーディネーションポイントの大半へのアクセスの要件を、単独又は共同のいずれかで（クラスタ内の残っているノードと共に）満たす必要があり得る。したがって、別の（又は次の）パーティショニングイベント（例えば、ネットワークパーティション）において、クラスタ内の残っているノード（例えば、新しく形成されたサブクラスタ）は、ノードを離脱せずにフェンシング競争に正常に勝つことができない可能性がある。かかる状況では、クラスタが使用できなくなる可能性がある。
【０１１６】
第２に、ノードが、何らかの理由で、既にパーティション化されたクラスタを離脱する（又は脱出する）場合（例えば、クラスタがパーティション化された状態）、クラスタの一部であり、以前は非アクティブであった（例えば、これらのノードが起動されていないか、又は以前にアクティブでなかった場合）ノードがブートアップ（又は起動）する状況が存在することがある。かかる状況では、アクティブになるクラスタの、このように以前は非アクティブであったノードは、パーティション化された状態（例えば、２つのパーティション内のノード間に共通のコーディネーションポイントが存在しない場合がある）で出現する（又はクラスタに参加する）ことになる。その結果、パーティション化された状態でクラスタに参加するノードは、コーディネーションポイント上の他のノードの登録キーを識別することができず、既存のスプリットブレインが存在しないと仮定することになる。これらのノードが起動するか又は出現すると、これらのノードによって共有ストレージに書き込まれたデータは、データ破壊を引き起こす可能性がある。
【０１１７】
したがって、特定の実施形態では、ノードがもはやサブクラスタの一部ではないと決定したことに応答して、サブクラスタ内の別のノードが競争者ノードとして指定される（例えば、サブクラスタは、ノードＩＤに基づいて競争者ノードを選出する）。この例では、競争者ノードは行列（例えば、ＣＰＲＭ）にアクセスする。行列は、クラスタ内のコーディネーションポイントの大半がサブクラスタ内のノードによってアクセス可能であるかどうかを決定するための情報を含む。アクセスに基づいて、競争者ノードは、情報がコーディネーションポイントの大半がノード（競争者ノードのサブクラスタ内の）によってアクセス可能であることを示すという決定をなす。この情報は、競争者ノードによってクラスタ内の他のノードにブロードキャストされる。
【０１１８】
一実施形態では、ノードがもはやサブクラスタの一部ではないと決定した後で、サブクラスタ内の別のノードを競争者ノードとして指定する前に、サブクラスタ内の残っているノードは、サブクラスタ内のいずれのノードも大半のコーディネーションポイントへのアクセス（例えば、サブクラスタ内のノード間で複製されて共有されるＣＰＲＭにアクセスすることによって）を個別に提供することができないことを決定することができる。
【０１１９】
他の実施形態では、情報を（クラスタに）ブロードキャストすることは、コーディネーションポイントの大半がサブクラスタ内の１つ又は２つ以上のノードによってアクセス可能であることを示す情報により、行列（例えば、ＣＰＲＭ）を更新することを含む。この情報はまた、競争者ノードによって実行されるフェンシング競争が成功したことを示し得る。この情報に基づいて、クラスタは、パーティション化されたノードが、サブクラスタ内のノードによってアクセス可能な１つ又は２つ以上のコーディネーションポイントにアクセスすることを禁止することができる。この例では、禁止は、既存のスプリットブレイン状態がクラスタ内で発生することを防止する。
【０１２０】
図６は、一実施形態に従う、クラスタを離脱するノードのブロック図である。図６に示されるように、クラスタは３つのノード（例えば、ノード１２０（１）、１２０（２）及び１２０（３））と、３つのコーディネーションポイント（例えば、コーディネーションポイント１７０（１）、１７０  （２）及び１７０（３））とを有する。ノード１２０（３）が何らかの理由でシャットダウンし、パニックになり、クラスタを離脱しかつ／又は脱出する場合、ノード１２０（１）及び１２０（２）は、単独又は共同のいずれかで、コーディネーションポイントの大半へのアクセスを有さない（例えば、ノード１２０（３）がコーディネーションポイント１７０（１）及び１７０（２）へのアクセスを単独で提供したため）。かかる状況では、ネットワークパーティションが発生したとき（例えば、ノード１２０（１）と１２０（２）との間に、いずれのノード（又は競争者）も、フェンシング競争に勝つことができない。結果として、ノード１２０（１）及び１２０（２）の両方がパニックになり、クラスタを離脱すると、完全なクラスタ停止につながり得る。
【０１２１】
図７は、一実施形態に従う、既存のスプリットブレイン状態を有するクラスタのブロック図である。図７に示されるように、ノード１２０（３）は、何らかの理由でノード１２０（１）、１２０（２）、及び１２０（３）のサブクラスタを離脱する。しかし、クラスタは実行され続け、以前に非アクティブであったノード１２０（４）及び１２０（５）は、パーティション化状態で出現する。ノード１２０（３）はクラスタを離脱したため、ノード１２０（１）及び１２０（２）の第１のパーティションとノード１２０（４）及び１２０（５）の第２のパーティションとの間に共通の構成ポイントは存在しない。したがって、ノード１２０（４）及び１２０（５）は、クラスタが既にパーティション化されたことを決定することができない（例えば、ノード１２０（４）及び１２０（５）がコーディネーションポイント１７０（３）にアクセスできないため、コーディネーションポイント１７０（３）がノード１２０（１）の登録キーを含むことを決定できない）。その結果、ノード１２０（４）及び１２０（５）がクラスタに参加すると、データ破損が発生することがある。
【０１２２】
図８は、一実施形態に従う、クラスタを離脱したノードを示すＣＰＲＭの表である。図６及び図７を参照して説明した課題は、ＣＰＲＭの実装に起因して生じることに留意すべきである。例えば、ＣＰＲＭは、全てのコーディネーションポイントに対する接続性、アクセス可能性、及び／又は到達可能性を有さずに、ノードがクラスタを形成し、クラスタに参加することを可能にするため、クラスタを離脱するノードは、図６及び図７を参照して記載される課題を引き起こし得る。図８は、ＣＰＲＭ１６０を示し、ノード１２０（２）がクラスタを離脱したことを示す。例えば、ノード１２０（２）は、メッセージをノード１２０（１）、１２０（３）、１２０（４）、及び１２０（５）にブロードキャストする。メッセージは、ノード１２０（２）がクラスタを離脱したことを示す。その結果、ノード１２０（１）、１２０（３）、１２０（４）及び１２０（５）は、それぞれの状態マシンにおける離脱ノード（例えば、ノード１２０（２））の状態、及びデータ構造をクリアする。
【０１２３】
図８のＣＰＲＭ１６０は、図６及び図７を参照して上述した課題を解決するために実装されてもよい。例えば、一実施形態では、各ノードはＣＰＲＭを維持する。ＣＰＲＭは、クラスタ内で最初に出現する任意のノード（例えば、クラスタを形成しかつ／又はそれに参加する第１のノードであるノード）によって生成される。ＣＰＲＭは、新しいノードがクラスタに参加するたびに、クラスタ内で更新され、交換される。図８では、「０」は所与のノードからコーディネーションポイントに到達可能でないことを示し、「１」は所与のノードからコーディネーションポイントに到達可能であることを示す。ノードがクラスタを離脱するとき（例えば、ノードの正常な終了時）、クラスタは、競争者ノード（又は単に競争者という）を選択する（又は選定しかつ／又は指定する）。競争者は、競争者自身のパーティション（又はサブクラスタ）内のノードが、コーディネーションポイントの大半に到達（又はアクセス）（単独又は共同のいずれかで）できるかどうかを決定する。図８では、ノード１２０（３）、１２０（４）、及び１２０（５）は共にコーディネーションポイントの大半にアクセスすることができる。
【０１２４】
競争者独自のパーティション（又はサブクラスタ）のノードがコーディネーションポイントの大半に到達（又はアクセス）できない場合、競争者は（フェンシング）競争に負けたことを宣言する（そしてクラスタ内のノードはパニックになり、クラスタを離脱する）。しかし、競争者自身のパーティション（又はサブクラスタ）内のノードが、実際にコーディネーションポイントの大半（図８に示されるように）に到達（又はアクセス）できる場合、競争者は（フェンシング）競争に勝ったことを宣言し、クラスタは実行され続ける（例えば、動作し続ける）。
【０１２５】
ノード１２０（２）がリブートされてクラスタに参加しようと試みる場合、ノード１２０（１）は競争者に選択されてもよく、ノード１２０（１）（競争者として作用する）は、５つのコーディネーションポイントのうち３つがクラスタ（全体として）によって（例えばノード１２０（３）、１２０（４）、及び１２０（５）によって）アクセス可能であるか又は到達可能であることを決定してもよい。その結果、ノード１２０（２）は既存のスプリットブレイン検出に失敗するため、ノード１２０（２）（パーティション化されたノードである）は出現することができない（例えば、ノード１２０（２）はクラスタに参加することが妨げられる）。したがって、このようにして、データ破損は回避され得る。
【０１２６】
図９は、一実施形態に従う、既存のスプリットブレインによるデータ破損を防止するためのプロセスのフロー図である。プロセスは、ノードがクラスタを離脱したかどうか（例えば、ノードが正常に停止したかどうか）を決定することによって、９０５で開始する。９１０で、プロセスはＣＰＲＭにアクセスする。例えば、ＣＰＲＭにアクセスするためにクラスタによって競争者ノードが指定されてもよい。９１５で、プロセスは、サブクラスタ（例えば、離脱するノードに関連付けられているサブクラスタ）がコーディネーションポイントの大半へのアクセスを有しているかどうか（例えば、サブクラスタ内の残っているノードが、単独又は共同のいずれかで、コーディネーションポイントの大半へのアクセスを有しているかどうか）を決定する。サブクラスタがコーディネーションポイントの大半へのアクセスを有していない場合、競争者ノードは、（フェンシング）競争に負けたことをサブクラスタ内の他のノードにブロードキャストしてもよい。（フェンシング）競争に負けたというブロードキャストを受信すると、サブクラスタ内の他のノードがパニックになりクラスタを脱出する。
【０１２７】
しかし、サブクラスタが実際にコーディネーションポイントの大半へのアクセスを有している場合、プロセスは、９２０で、離脱するノードの状態をリセットし（例えば、各残っているノードの状態マシン及びデータ構造内に）、（フェンシング）競争に勝ったことをブロードキャストすることによって、９２５で終了する。パーティション化されたノードがクラスタに参加しようと試みると、パーティション化されたノードは、少なくとも１つのコーディネーションポイント（オーバーラップコーディネーションポイントと呼ばれる）がクラスタ内の残っているノードとパーティション化されたノードとの間で今度は共通になるため、既存のスプリットブレイン検出に失敗する。その結果、パーティション化されたノードは、クラスタ内の既存のパーティションに警告される。このようにして、図９は、既存のスプリットブレインに関連付けられているデータの破損を防止する。
パーティションアービトレーションの最適化の例
【０１２８】
一実施形態では、ＣＰＲＭは、フェンシング競争の結果をパーティション内の各競争者の累積レース結果に依存させることによって、パーティションアービトレーションを最適化するために使用され得る。例えば、一実施形態では、クラスタが２つ又はそれ以上のネットワークパーティションにパーティション化されたことに応答して、第１のネットワークパーティション内の第１のノード（２つ又はそれ以上のネットワークパーティションの）が、第１のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取るかどうかを決定するために使用され得る。この例では、決定（第１のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取ることに成功したかどうか）が、第１のノードから第２ノード（同様に第１のネットワークパーティション内の）に、送信される（又はブロードキャストされかつ／又は通信される）。第２のノードは、第２のノードが第１のノードによって勝ち取られた１つ又は２つ以上のコーディネーションポイントとは異なる１つ又は２つ以上のコーディネーションポイントを勝ち取るかどうかを決定するために使用される。
【０１２９】
一部の実施形態では、例えば、第２のノードが、第１のノード及び第２のノードが共にコーディネーションポイントの大半を勝ち取るどうかを判定し得るため、フェンシング競争の結果は、パーティション内の各競争者の累積競争結果に依存させられてもよい。このようにして、新しい競争者（例えば、第２のノード）は、残っているコーディネーションポイント（例えば、第１のノードによって勝ち取られた１つ又は２つ以上のコーディネーションポイントとは異なる１つ又は２つ以上のコーディネーションポイント）で、フェンシング競争を効果的に再開する。
【０１３０】
特定の実施形態では、１つ又は２つ以上のコーディネーションポイントを勝ち取ることは、１つ又は２つ以上のコーディネーションポイントにアクセスすることと、１つ又は２つ以上のコーディネーションポイントから第１のネットワークパーティションにない１つ又は２つ以上のノードの１つ又は２つ以上の登録キーを取り出すことと、１つ又は２つ以上のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取ることを阻止することと、を含む。
【０１３１】
他の実施形態では、２つ又はそれ以上のノードからの累積レース結果は、別のノードに送信されてもよい。例えば、第２のノードの決定は、例えば、第１のノード及び第２のノードが共にコーディネーションポイントの大半を勝ち取らない場合、第３のノード（第１のネットワークパーティション内の）に送信されてもよい。
【０１３２】
図１０Ａは、一実施形態に従う、クラスタ内のネットワークパーティションを示すＣＰＲＭの表である。図１０Ｂは、別の実施形態に従う、クラスタ内のネットワークパーティションも示す、Ｂｉｔｗｉｓｅ  ＯＲテーブルである。図１０Ａ及び図１０Ｂでは、「０」は所与のノード（又はノードのパーティション）からコーディネーションポイントに到達可能ではないことを示し、「１」はコーディネーションポイントが、所与のノード（又はノードのパーティション）から到達可能であることを示す。
【０１３３】
前述したように、各パーティションは、１つ又は２つ以上のコーディネーションポイント（例えば、フェンシング競争）を勝ち取るために、競争者ノードを選出してもよい。一実施形態では、競争者が最終的にフェンシング競争に勝つことができないと決定すると、競争者はあらゆるコーディネーションポイントを制御するために競争する前ですら、競争に負けたことを宣言してもよい。競争者は、図１０Ａに示されるように、ＣＰＲＭ１６０にアクセスすることによってこの決定を行ってもよい（例えば、ＣＰＲＭに相談し、パーティション又はサブクラスタ内のノードが共にコーディネーションポイントの大半へのアクセスを有しておらず、このため１つのコーディネーションポイントの制御（又は勝利）のために競争する目的を破る）。このようにして、ＣＰＲＭは、敗者パーティションを強制的にクラスタから早期に退出させることにより、より高速のフェンシング競合結果を提供し、それによりクラスタの動作を高速化することができる。
【０１３４】
更に、（図１０Ａに示すような）ネットワークパーティション（及び各パーティション又はサブクラスタ内のノード）を示すＣＰＲＭを使用することにより、より少ないハンドオフ及び競争者再選択につながり得る。例えば、パーティション又はサブクラスタ内のノードが単独又は共同のいずれかで、コーディネーションポイントの大半へのアクセスを有していないことを早期に決定され得る場合、競争者ノードの役割を一方のノードから他方のノードへハンドオフする（例えば、競争者再選により）必要がないこともある。
【０１３５】
例えば、図１０Ａでは、ノード１２０（１）が、第１のサブクラスタ（例えばノード１２０（１）及び１２０（２））の競争者ノードとして選択されるか又は指定され得る。ノード１２０（１）は、コーディネーションポイント１７０（５）のための競争のみを行う（例えば、ノード１２０（１）がＣＰＲＭ１６０によって示されるように他のコーディネーションポイントへのアクセスを有していないため）。コーディネーションポイント１７０（５）を勝ち取った後、ノード１２０（２）は競争者ノードとして選出される（競争者再選を介して、かつノード１２０（１）がコーディネーションポイントの大半を勝ち取ることができないため）。しかし、ノード１２０（１）が既にコーディネーションポイント１７０（５）を勝ち取ったという事実は、より速いフェンシング競争結果を生成するためにノード１２０（２）によって使用することができる。この重要な情報は、無駄にされかつ／又は使用されない必要はない。
【０１３６】
したがって、ノード１２０（１）が既にコーディネーションポイント１７０（５）を勝ち取ったという決定は、競争者再選中にノード１２０（１）によってノード１２０（２）に送信される。その結果、ノード１２０（１）は既にコーディネーションポイント１７０（５）を勝ち取り、つまりコーディネーションポイントの大半を勝ち取っているため、ノード１２０（２）は２つのより多くのコーディネーションポイント（例えば、コーディネーションポイント１７０（１）及び１７０（２））を勝ち取るためだけに競争する。したがって、ノード１２０（２）がコーディネーションポイント１７０（１）及び１７０（２）を勝ち取ると、ノード１２０（２）はそれ以上競争することなく競争に勝ったことを宣言することができる。このようにして、ノード１２０（２）は、パーティション又はサブクラスタ内の別のノードによって勝ち取られなかったコーディネーションポイント上でフェンシング競争を再開することができ、より高速なフェンシング競争の結果につながる。
【０１３７】
同様に、ノード１２０（３）は、第２のサブクラスタ（例えば、ノード１２０（３）、１２０（５）及び１２０（５））によって、競争者ノードとして選択されるか又は指定されてもよい。ノード１２０（３）はコーディネーションポイントの大半（例えば、コーディネーションポイント１７０（３）、１７０（４）、及び１７０（５））にアクセスし、それらを勝ち取ることができるため、競争者再選は第２のサブクラスタによって要求されない（及び回避される）。このように、クラスタは、コーディネーションポイントの大半が、個別のノードではなく、全体としてのサブクラスタから到達可能又はアクセス可能でなければならないため、クラスタはより良い生存の機会を有する。
【０１３８】
図１１Ａは、一実施形態に従う、フェンシング競争を実施するパーティション化されたクラスタ内のノードのブロック図である。この例では、フェンシング競争の結果は、パーティション（又はサブクラスタ）内の各競争者ノードの累積競争結果に依存する。図１１Ａに示されるように、ノード１２０（１）は競争者ノードとして選出される。ノード１２０（１）はコーディネーションポイント１７０（３）へのアクセスのみを有しているため、第１のサブクラスタ（例えば、ノード１２０（１）、１２０（２）及び１２０（３））が、ノード１２０（２）を競争者ノードとして選出しなければならない。しかし、ノード１２０（１）がコーディネーションポイント１７０（３）へのアクセスを有しているため、ノード１２０（１）が競争者ノードの役割をノード１２０（２）へハンドオフする前に、ノード１２０（１）はコーディネーションポイント１７０（３）を勝ち取る。更に、ノード１２０（１）は、ノード１２０（１）がコーディネーションポイント１７０（３）を勝ち取ったという情報をノード１２０（２）に送信する。この時点で、ノード１２０（２）はノード１２０（１）によってノード１２０（２）に提供された以前のフェンシング競争の累積結果を使用して、フェンシング競争を再開する。ノード１２０（２）が、第１のサブクラスタ内のノードがコーディネーションポイントの大半を勝ち取ったことを示す情報を有しているため、ノード１２０（２）は、コーディネーションポイント１７０（２）を勝ち取り、競争に勝ったことを宣言する。ノード１２０（３）の競争者再選は不要である。
【０１３９】
同様に、ノード１２０（４）は、第２のサブクラスタ（例えば、ノード１２０（４）及び１２０（５））内の競争者ノードとして選出される。サブクラスタ内のいずれのノードもコーディネーションポイント１７０（１）のために競争しなかったため、ノード１２０（４）はコーディネーションポイント１７０（１）へのアクセスを有し、それを勝ち取った（例えば、第１のサブクラスタ内のノード（例えば、ノード１２０（１）、１２０（２）、及び１２０（３））は、コーディネーションポイント１７０（１）のために競争する必要なく、フェンシング競争に勝った）。したがって、ノード１２０（４）が、コーディネーションポイント１７０（１）を勝ち取るが、ノード１２０（４）（及びその他ノード１２０（５））は、コーディネーションポイント１７０（２）を勝ち取ることはない（かつ勝ち取ることはできない）（例えば、コーディネーションポイントはノード１２０（２）によって既に勝ち取られており、ノード１２０（４）及び１２０（５）の登録キーは、ノード１２０（２）によってコーディネーションポイント１７０（２）から取り出されているため）。更に、ノード１２０（４）及び１２０（５）は、コーディネーションポイント１７０（３）へのアクセスを有していないため、第２のサブクラスタは、フェンシング競争に負けることになる（例えば、ノード１２０（５）が競争者ノードとして再選されるとしても）。したがって、第１のサブクラスタはフェンシング競争に勝ち、クラスタに留まり、第２のサブクラスタ内のノード１２０（４）及び１２０（５）はパニックになり、クラスタを離脱する（例えば、退却する）。このように、フェンシング競争の結果（コーディネーションポイントを獲得するため）を以前の競争者ノードの累積競争結果に依存させるように要求することは、ネットワークパーティションによって引き起こされた既存のスプリットブレインに関連付けられている以前に特定された問題を防止する。
【０１４０】
図１１Ｂは、一実施形態に従う、フェンシング動作を実施するパーティション化されたクラスタ内のノードのブロック図である。図１１Ｂに従うと、ノード１２０（１）、１２０（２）及び１２０（３）は、第１のサブクラスタの一部であり、ノード１２０（４）及び１２０（５）は第２のサブクラスタの一部である。一部の実施形態では、ノード１２０（４）及び１２０（４）は、ＣＰＲＭ（例えばＣＰＲＭ  １６０（４）及び１６０（５）それぞれ）にアクセスし、ノード１２０（４）及び１２０（５）は、単独又は共同のいずれかで、コーディネーションポイントの大半にアクセスすることはできない。この決定があると、ノード１２０（４）と１２０（５）の両方がパニックになり、クラスタを離脱する（例えば、退却する）。一方で、第１のサブクラスタ内のノードは共にコーディネーションポイントの大半に到達することができる（例えば、ＣＰＲＭによって示されるように）。したがって、第１のサブクラスタは、ノード１２０（１）を競争者ノードとして選択する。ノード１２０（１）がコーディネーションポイント１７０（３）を勝ち取り、競争者ノードの役割を、ノード１２０（１）がコーディネーションポイント１７０（３）を勝ち取ったという情報と共に、ノード１２０（２）にハンドオフする。この時点で、ノード１２０（２）はフェンシング競争を再開し、コーディネーションポイント１７０（１）及び１７０（２）を勝ち取る。したがって、第１のパーティション（又は第１のサブクラスタ）は、１回のハンドオフのみでフェンシング競争に勝ち、このためクラスタのためのフェイルオーバー時間は最小化される。
【０１４１】
図１２Ａは、一実施形態に従う、ネットワークパーティションの後の競争者ノードを選択するためのプロセスのフロー図である。このプロセスは、ネットワークパーティションが発生したかどうかを決定することによって、１２０５で開始する。クラスタが２つ又はそれ以上のパーティション（又はサブクラスタ）にパーティション化された場合、プロセスは、１２１０で、第１のサブクラスタ（２つ又はそれ以上のサブクラスタのうちの）内の競争者ノードを選出する。前述したように、ノードは、ノードのノードＩＤに基づいて、又は他の何らかの方法で、競争者ノードとして、選出され、選択され、かつ／又は指定されてもよい。
【０１４２】
１２１５で、プロセスは、ネットワークパーティション（例えば、第１のサブクラスタ）内のノードが共にコーディネーションポイントの大半へのアクセスを有しているかどうかを決定する。上述したように、この決定は、ＣＰＲＭ（例えば、図１０Ａに示されるようなＣＰＲＭ１６０）にアクセスすることによってなされ得る。ネットワークパーティション（例えば、第１のサブクラスタ）内のノードが共にコーディネーションポイントの大半へのアクセスを有していない場合、プロセスは、１２２０で、（フェンシング）競争に負けたことをクラスタ全体（例えば、クラスタ内の全てのノード）にブロードキャストする。しかし、ネットワークパーティション（例えば、第１のサブクラスタ）内のノードが共にコーディネーションポイントへの大半へのアクセスを有している場合、プロセスは（選出された）競争者ノードが任意のコーディネーションポイントにアクセスできるかどうかを決定することによって、１２２５で終了する。
【０１４３】
図１２Ｂは、本開示の一実施形態に従う、競争者ノードがクラスタ内のコーディネーションポイントにアクセスできるかどうかを判定するためのプロセスのフローチャートである。プロセスは、競争者ノードが任意のコーディネーションポイントにアクセスできるかどうかを決定することによって、１２３０で開始する。競争者ノードが１つ又は２つ以上のコーディネーションポイントにアクセスすることができる場合、プロセスは、１２３５で、競争者ノードとのフェンシング競争（例えば、コーディネーションポイント上の他のノードの登録キーを取り出すことによって、コーディネーションポイントを「勝ち取り」、それにより他のノードがそのコーディネーションポイントを勝ち取ることを阻止するための競争）を開始する。
【０１４４】
しかし、競争者ノードが１つ又は２つ以上のコーディネーションポイントにアクセスできない場合、プロセスは、１２４０で、競争者ノードがネットワークパーティション内の最後のノードであるかどうか（例えば、競争者ノードが属する他のノードの所与のサブクラスタがあるかどうか）を決定する。競争者ノードが最後のノードでない場合、１２４５で、プロセスは新しい競争者ノード（例えば、所与のサブクラスタ内の別のノード）を選出する。しかし、競争者ノードが最後のノード（サブクラスタ内の）である場合、プロセスは、競争に負けたことを（例えば、クラスタ内の他のノードに）ブロードキャストすることによって、１２５０で終了する。
【０１４５】
図１２Ｃは、一実施形態に従う、１つ又は２つ以上の競争者ノードによりフェンシング動作を実施するためのプロセスのフロー図である。このプロセスは、競争者ノードとのフェンシング競争を開始することによって、１２５５で開始する。１２６０で、プロセスは、１つ又は２つ以上のコーディネーションポイント（競争者ノードがアクセスするか又は到達することができる）から他のノードの登録キーを取り出す。一実施形態では、競争者ノードは、１つ又は２つ以上のコーディネーションポイントから競争者ノード自身のパーティション（又はサブクラスタ）にないノードの登録キーのみを取り出す。別の実施形態では、競争者ノードは、１つ又は２つ以上のコーディネーションポイントから、競争者ノード自身の登録キー以外のノードの全ての登録キーを取り出す。
【０１４６】
１２６５で、プロセスは、競争者ノードによって勝ち取られたコーディネーションポイントが、利用可能なコーディネーションポイントの大半であるかどうかを決定する。競争者ノードがコーディネーションポイントの大半を獲得した場合、プロセスは（フェンシング）競争に勝ったことを宣言することによって、１２７０で終了する。しかし、競争者ノードがコーディネーションポイントの大半に勝ち取っていない場合、プロセスは、１２７５で、競争者ノードがネットワークパーティション内の最後のノードであるかどうか（例えば、例えば、競争者ノードが属している他のノードの所与のサブクラスタがあるかどうか）を決定する。競争者ノードがネットワークパーティションの最後のノードでない場合、プロセスは、１２８０で、新しい競争者ノードを選出し、新しい競争者ノードでフェンシング競争を再開する。しかし、競争者ノードがネットワークパーティション内の最後のノードである場合、プロセスは、１２８５で、（フェンス）競争に負けたことをブロードキャストすることによって終了する。
コーディネーションポイントを使用するＩ／Ｏフェンシングシステムを最適化するプロセス
【０１４７】
一実施形態では、ノード起動時に、フェンシングモジュール１３０は、フェンシングドライバ１４０を使用して、コーディネーションポイントを使用してクラスタ（例えば、クラスタ１１０）内の１つ又は２つ以上のノードのＩ／Ｏフェンシング動作を設定する。一部の実施形態では、３（５）つ又は５つのコーディネーションポイント（例えば、奇数個のコーディネーションポイント）が、フェンシング動作（例えば、構成ファイル１５０によって示されるような）のために提供される。また、前述したように、コーディネーションポイントは、コーディネータディスク又はコーディネーションポイントサーバ、又はそれらの任意の組み合わせであってもよい。
【０１４８】
一部の実施形態では、ノードがシャットダウン（例えば、ノードが何らかの理由で存在する場合、及び／又はクラスタを離脱する場合）、フェンシングモジュール１３０は、ＣＰＲＭ１６０を使用して、サブクラスタがコーディネーションポイントの大半（パーティション内の残っているノード）へのアクセスを有していることを決定する。ＣＰＲＭ１６０が、サブクラスタがコーディネーションポイントの大半へのアクセスを有していないことを示す場合、フェンシングモジュール１３０は、フェンシング競争に負けたこと及びパーティションのパニックを宣言する（例えば、残っているノードもまたクラスタを離脱する）。しかし、ＣＰＲＭ１６０が、サブクラスタがコーディネーションポイントの大半へのアクセスを有していることを示す場合、フェンシングモジュール１３０はフェンシング競争に勝ったこと及び、パーティションの存続を宣言する（例えば、残っているノードは動作を継続する）。
【０１４９】
他の実施形態では、あるノードのフェンシングモジュールは、コーディネーションポイントを勝ち取るための競争の結果を、別のノードのフェンシングモジュールに送信する。例えば、ノード１２０（１）が競争者ノードとして選出され、１つ（又はそれ以上）のコーディネーションポイントを勝ち取る場合、フェンシングモジュール１６０（１）は、ノード１２０（２）が競争者ノードとして選出されたときに、この情報をフェンシングモジュール１６０（２）に送信する。このようにして、コーディネーションポイントを勝ち取る競争は、競争者ノードとして作用する各ノードから漸増式に実施される。
【０１５０】
図１３は、一実施形態に従う、（ノードの）ＣＰＲＭを生成して送信するためのプロセスのフロー図である。このプロセスは、１３０５で、コーディネーションポイント到達可能性行列（ＣＰＲＭ）を生成することによって開始する。クラスタ内の各ノードは、クラスタに最初に参加するときに自身のＣＰＲＭ（例えば、ノードＣＰＲＭ）を生成することができる。更に、ノードがクラスタに正常に参加すると、ＣＰＲＭは、クラスタ内の全てのノードの、クラスタで利用可能な１つ又は２つ以上のコーディネーションポイント（例えば、クラスタＣＰＲＭ）へのアクセス可能性を追跡するために利用され得る。前述したように、クラスタのＣＰＲＭは、新しいノードがクラスタに参加するかどうか、及び／又は既存のノードがクラスタを離脱するかどうかに基づいて、クラスタ内の１つ又は２つ以上のノードにわたって更新されて複製され得る。更に、ノード（例えば競争者ノード）によってコーディネーションポイントが勝ち取られることは、クラスタのＣＰＲＭの更新ももたらし得る。プロセスは、（ノードの）ＣＰＲＭをクラスタ内の他のノードに送信する（例えば、クラスタのＣＰＲＭとマージされ、結合されかつ／又は更新される）ことによって、１３１０で終了する。
【０１５１】
図１４は、本開示の一実施形態に従う、情報をクラスタにブロードキャストするためのプロセスのフロー図である。プロセスは、ノードが依然としてクラスタの一部であるかどうかを決定することによって、１４０５で開始する。ノードがもはやクラスタの一部でない場合、プロセスは、１４１０で、ノードのサブクラスタ内の別のノードを競争者ノードとして指定する。１４１５で、プロセスはＣＰＲＭにアクセスする。１４２０で、プロセスは、ＣＰＲＭ内の情報が、コーディネーションポイントの大半がアクセス可能である（サブクラスタ内の残っているノードによって、単独又は共同のいずれかで）ことを示すことを決定する。１４２５で、プロセスはこの情報をクラスタにブロードキャストすることによって終了する。
【０１５２】
図１５は、一実施形態に従う、一方のノードから他方のノードへのフェンシング競争の結果を送信するためのプロセスのフロー図である。プロセスは、クラスタがパーティション化されているかどうかを決定することによって、１５０５で開始する。クラスタがパーティション化されている場合、プロセスは、１５１０で、パーティション内の第１のノード（例えば、（第１の）競争者ノード第１のサブクラスタ）を使用して、フェンシング競争を実施する（コーディネーションポイントを勝ち取るために）。１５１５で、プロセスは、パーティション内の第１のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取るが、コーディネーションポイントの大半は勝ち取らないことを決定する。１５２０で、プロセスは、この決定をパーティション内の第２のノード（例えば、第１のサブクラスタ内の（第２の）競争者ノード）に送信する。プロセスは、第２のノードとフェンシング競争を実施（又は継続）することによって（第１のノードからの送信された（及び受信された）決定に基づいて）、１５２０で終了する。
【０１５３】
本明細書で説明するシステム、方法、及びプロセスは、コーディネーションポイントを利用するコンピューティングシステムにおいて、Ｉ／Ｏフェンシング動作を最適化することが理解されよう。
例示的なコンピューティング環境
【０１５４】
図１６は、本開示の一実施形態に従う、フェンシングモジュールがソフトウェア内に実装され得る態様を示す、コンピューティングシステムのブロック図である。コンピューティングシステム１６００は、コンピュータ可読命令を実行することができる任意の単一又はマルチプロセッサコンピューティングデバイス又はシステムを広く表す。コンピューティングシステム１６００の例としては、ワークステーション、パーソナルコンピュータ、ラップトップ、クライアント側端末、サーバ、分散型コンピューティングシステム、携帯用デバイス、ネットワークアプライアンス、ストレージ制御装置などを含む任意の１つ又は２つ以上の様々なデバイスが挙げられるが、これらに限定されない。コンピューティングシステム１６００は、少なくとも１つのプロセッサ４０と、メモリ５０と、を含んでもよい。サーバ３０を実装するソフトウェアを実行することによって、コンピューティングシステム１６００は、コーディネーションポイントを利用するコンピューティングシステムにおけるＩ／Ｏ動作を最適化するように構成された専用コンピューティングデバイスになる。
【０１５５】
プロセッサ４０は、概して、データの処理、又は命令の解釈及び実行ができる任意のタイプ又は形式の処理装置を表す。特定の実施形態では、プロセッサ４０は、ソフトウェアアプリケーション又はモジュールから命令を受け取ってもよい。これらの命令は、プロセッサ４０に、本明細書に記載及び／又は例示する実施形態のうちの１つ又は２つ以上の機能を実施させてもよい。例えば、プロセッサ４０は、本明細書に記載する動作の全部又は一部を実行してもよく、及び／又は実行するための手段であってもよい。プロセッサ４０は、また、本明細書に記載又は例示する任意の他の動作、方法、及びプロセスを実行してもよく、及び／又は実行するための手段であってもよい。
【０１５６】
メモリ５０は、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式の揮発性又は不揮発性ストレージデバイス若しくは媒体を概して表す。例としては、限定することなく、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、フラッシュメモリ、又は任意の他の好適なメモリデバイスが挙げられる。必要でないけれども、特定の実施例では、コンピューティングシステム１６００は、揮発性メモリユニット及び不揮発性ストレージデバイスの両方を含んでもよい。一例では、フェンシングモジュール１３０を実装するプログラム命令が、メモリ５０にロードされてもよい。
【０１５７】
特定の実施形態において、コンピューティングシステム１６００は、また、プロセッサ４０及びメモリ５０に加えて、１つ若しくは２つ以上の構成要素又は要素を含んでもよい。例えば、図１６に示すように、コンピューティングシステム１６００は、メモリコントローラ１６２０と、入力／出力（Ｉ／Ｏ）コントローラ１６３５と、通信インターフェース１６４５と、を含んでもよく、これらの各々は、通信インフラストラクチャ１６０５を介して相互接続されてもよい。通信インフラストラクチャ１６０５は、コンピューティングデバイスの１つ又は２つ以上の構成要素間の通信を容易にすることが可能な任意のタイプ又は形式のインフラストラクチャを概して表す。通信インフラストラクチャ１６０５の例としては、限定することなく、通信バス（例えば、業界標準アーキテクチャ（ＩＳＡ）、周辺構成要素相互接続（ＰＣＩ）、ＰＣＩエクスプレス（ＰＣＩｅ）、又は類似のバス）、及びネットワークが挙げられる。
【０１５８】
メモリコントローラ１６２０は、メモリ若しくはデータを取り扱うことが可能な、又はコンピューティングシステム１６００の１つ又は２つ以上の構成要素の間の通信を制御することが可能な任意のタイプ又は形式のデバイスを概して表す。例えば、特定の実施形態では、メモリコントローラ１６２０は、通信インフラストラクチャ１６０５を介して、プロセッサ４０、メモリ５０、及びＩ／Ｏコントローラ１６３５間の通信を制御してもよい。特定の実施形態では、メモリコントローラ１６２０は、本明細書に記載又は例示する１つ若しくは２つ以上の動作又は機能を単独又は他の要素との組み合わせのいずれかで実行してもよく、及び／又は実行するための手段であってもよい。
【０１５９】
Ｉ／Ｏコントローラ１６３５は、コンピューティングデバイスの入出力機能を調整及び／又は制御することが可能な任意のタイプ又は形式のモジュールを概して表す。例えば、Ｉ／Ｏコントローラ１６３５は、プロセッサ４０、メモリ５０、通信インターフェース１６４５、表示アダプタ１６１５、入力インターフェース１６２５、及びストレージインターフェース１６４０などのコンピューティングシステム１６００の１つ又は２つ以上の要素間のデータの転送を制御してもよく、又はそれを容易にしてもよい。
【０１６０】
通信インターフェース１６４５は、コンピューティングシステム１６００と、１つ若しくは２つ以上の追加のデバイスとの間の通信を容易にすることが可能な任意のタイプ又は形式の通信デバイス又はアダプタを広く表す。例えば、特定の実施形態において通信インターフェース１６４５は、コンピューティングシステム１６００と追加のコンピューティングシステムを含む私的又は公的ネットワークとの間の通信を容易にしてもよい。通信インターフェース１６４５の例としては、限定することなく、有線ネットワークインターフェース（ネットワークインターフェースカードなど）、無線ネットワークインターフェース（無線ネットワークインターフェースカードなど）、モデム、及び任意の他の好適なインターフェースが挙げられる。少なくとも１つの実施形態では、通信インターフェース１６４５は、インターネットなどのネットワークへの直接的なリンクを介して、リモートサーバへの直接的な接続を提供してもよい。通信インターフェース１６４５はまた、例えば、ローカルエリアネットワーク（イーサネット（登録商標）ネットワークなど）、パーソナルエリアネットワーク、電話若しくはケーブルネットワーク、セルラ電話接続、衛星データ接続、又は任意の他の好適な接続を通じて、かかる接続を間接的に提供してもよい。
【０１６１】
特定の実施形態では、通信インターフェース１６４５はまた、外部バス又は通信チャネルを介して、コンピューティングシステム１６００と、１つ若しくは２つ以上の追加のネットワーク又はストレージデバイスとの間の通信を容易にするように構成されたホストアダプタを表してもよい。ホストアダプタの例としては、限定することなく、スモールコンピュータシステムインターフェース（ＳＣＳＩ）ホストアダプタ、ユニバーサルシリアルバス（ＵＳＢ）ホストアダプタ、米国電気電子技術者協会（ＩＥＥＥ）１３９４ホストアダプタ、シリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ）、シリアルアタッチトＳＣＳＩ（ＳＡＳ）、及びエクスターナルＳＡＴＡ（ｅＳＡＴＡ）ホストアダプタ、アドバンスドテクノロジーアタッチメント（ＡＴＡ）、及びパラレルＡＴＡ（ＰＡＴＡ）ホストアダプタ、ファイバチャネルインターフェースアダプタ、イーサネット（登録商標）アダプター等が挙げられる。通信インターフェース１６４５はまた、コンピューティングシステム１６００が分散又は遠隔コンピューティングに関与することを可能にしてもよい。例えば、通信インターフェース１６４５は、実行のために、遠隔デバイスから命令を受信するか、又は遠隔デバイスに命令を送信してもよい。
【０１６２】
図１６に示すように、コンピューティングシステム１６００はまた、表示アダプタ１６１５を介して、通信インフラストラクチャ１６０５に連結される少なくとも１つの表示デバイス１６１０を含んでもよい。表示デバイス１６１０は、表示アダプタ１６１５によって転送された情報を視覚的に表示することが可能な任意のタイプ又は形式のデバイスを概して表す。同様に、表示アダプタ１６１５は、表示デバイス１６１０上に表示するために、通信インフラストラクチャ１６０５から（又は当該技術分野において既知のように、フレームバッファから）、グラフィックス、テキスト、及び他のデータを転送するように構成された任意のタイプ又は形式のデバイスを概して表す。
【０１６３】
図１６に示すように、コンピューティングシステム１６００は、また、入力インターフェース１６２５を介して通信インフラストラクチャ１６０５に連結される少なくとも１つの入力デバイス１６３０を含んでもよい。入力デバイス１６３０は、コンピュータ又はヒトのいずれかによって生成された入力を、コンピューティングシステム１６００に提供することが可能な任意のタイプ又は形式の入力デバイスを概して表す。入力デバイス１６３０の例としては、限定することなく、キーボード、ポインティングデバイス、音声認識デバイス、又は任意の他の入力デバイスが挙げられる。
【０１６４】
図１６に示すように、コンピューティングシステム１６００は、また、ストレージインターフェース１６４０を介する通信インフラストラクチャ１６０５へのストレージデバイス１６５０を含んでもよい。ストレージデバイス１６５０は、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式のストレージデバイス又は媒体を概して表す。例えば、ストレージデバイス１６５０は、磁気ディスクドライブ（例えば、いわゆるハードドライブ）、フロッピーディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュドライブなどを含み得る。ストレージインターフェース１６４０は、コンピューティングシステム１６００のストレージデバイス１６５０と他の構成要素との間でデータを転送及び／又は送信するための任意のタイプ又は形式のインターフェース又はデバイスを概して表す。
【０１６５】
特定の実施形態では、ストレージデバイス１６５０は、コンピュータソフトウェア、データ、又は他のコンピュータ可読情報を記憶するように構成された取り外し可能なストレージユニットから読み取るように、及び／又はそれに書き込むように構成されてもよい。好適な取り外し可能なストレージユニットの例としては、限定することなく、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリデバイスなどが挙げられる。ストレージデバイス１６５０は、また、コンピュータソフトウェア、データ、又は他のコンピュータ可読命令が、コンピューティングシステム１６００にロードされることを可能にするための他の類似の構造又はデバイスを含んでもよい。例えば、ストレージデバイス１６５０は、ソフトウェア、データ、又は他のコンピュータ可読情報を読み取り、及び書き込むように構成されてもよい。ストレージデバイス１６５０は、また、コンピューティングシステム１６００の一部であってもよく、又は他のインターフェースシステムによってアクセスされる別個のデバイスであってもよい。
【０１６６】
多くの他のデバイス又はサブシステムは、コンピューティングシステム１６００に接続されてもよい。逆に、図１６に示す構成要素及びデバイスの全てが、本明細書において説明及び／又は例示される実施形態を実践するために存在する必要があるわけではない。上記で述べたデバイス及びサブシステムはまた、図１６に示すものとは異なる様式で相互接続されてもよい。
【０１６７】
コンピューティングシステム１６００はまた、任意の数のソフトウェア、ファームウェア、及び／又はハードウェア構成を採用してもよい。例えば、本明細書において開示される実施形態のうちの１つ又は２つ以上は、コンピュータ可読ストレージ媒体上にコンピュータプログラム（コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、又はコンピュータ制御論理とも称される）としてコード化され得る。コンピュータ可読ストレージ媒体の例としては、磁気ストレージ媒体（例えば、ハードディスクドライブ、及びフロッピーディスク）、光ストレージメディア（例えば、ＣＤ−、又はＤＶＤ−ＲＯＭ）、電子ストレージ媒体（例えば、ソリッドステートドライブ、及びフラッシュメディア）等が挙げられる。そのようなコンピュータプログラムは、また、インターネットなどのネットワークを介してメモリに又はキャリア媒体に記憶するためにコンピューティングシステム１６００に転送されてもよい。
【０１６８】
コンピュータプログラムを含むコンピュータ可読媒体は、コンピューティングシステム１６００にロードされてもよい。コンピュータ可読媒体上に記憶されたコンピュータプログラムの全部又は一部分は、次に、メモリ５０及び／又はストレージデバイス１６５０の種々の部分に記憶されてもよい。プロセッサ４０によって実行されるとき、コンピューティングシステム１６００にロードされたコンピュータプログラムは、本明細書において説明及び／又は例示する実施形態のうちの１つ若しくは２つ以上の機能をプロセッサ４０に実施させてもよく、及び／又はそれらを実施するための手段であってもよい。付加的に又は代替的に、本明細書に説明及び／又は例示される例示的な実施形態のうちの１つ又は２つ以上は、ファームウェア及び／又はハードウェアに実装され得る。例えば、コンピューティングシステム１６００は、本明細書において開示される実施形態のうちの１つ又は２つ以上を実装するように適合された特定用途向け集積回路（ＡＳＩＣ）として構成されてもよい。
例示的なネットワーキング環境
【０１６９】
図１７は、本開示の一実施形態に従う、多様なコンピューティングデバイスがネットワークを介して通信し得る態様を示す、ネットワーク化されたシステムのブロック図である。特定の実施形態では、ネットワーク接続型ストレージ（ＮＡＳ）デバイスは、ネットワークファイルシステム（ＮＦＳ）、サーバメッセージブロック（ＳＭＢ）、又はコモンインターネットファイルシステム（ＣＩＦＳ）などの様々なプロトコルを使用してクラスタ１１０と通信するように構成されてもよい。
【０１７０】
ネットワーク２０は、複数のコンピューティングデバイスの間での通信を容易にすることができる任意のタイプ又は形式のコンピュータネットワーク又はアーキテクチャを概して表す。ネットワーク２０は、クラスタ１１０とストレージユニット１７２０との間での通信を容易にしてもよい。特定の実施形態では、そして、図１６のコンピューティングシステム１６００に関して、図１６の通信インターフェース１６４５などの通信インターフェースは、クラスタ１１０とネットワーク２０との間に接続性を提供するために使用されてもよい。本明細書に記載及び／又は例示する実施形態は、インターネット又は任意の特定のネットワークベース環境に限定されないことに留意されたい。例えば、ネットワーク２０は、ストレージエリアネットワーク（ＳＡＮ）であってもよい。
【０１７１】
少なくとも１つの実施形態では、本明細書で開示される１つ若しくは２つ以上の実施形態のうちの全て又は一部は、コンピュータプログラムとしてコード化されてもよく、クラスタ１１０、サーバ３０、クライアント１０、及びノード１２０（１）〜（Ｎ）、又はこれらの任意の組み合わせにロードされて実行されてもよい。更に、本明細書に開示される１つ又は２つ以上の実施形態のうちの全て又は一部はまた、コンピュータプログラムとしてコード化され、クライアント１０、サーバ３０、クラスタ１１０、及び／又はノード１２０（１）〜（Ｎ）に格納され、ネットワーク２０を通じて分散されてもよい。
【０１７２】
いくつかの例では、図１Ａ、図１Ｂ及び図２のコンピューティングデバイスの全部又は一部分は、クラウドコンピューティング又はネットワークベース環境の部分を表してもよい。クラウドコンピューティング環境は、インターネットを介して、種々のサービス及びアプリケーションを提供し得る。これらのクラウドベースのサービス（例えば、サービスとしてのソフトウェア、サービスとしてプラットフォーム、サービスとしてのインフラストラクチャなど）は、ウェブブラウザ又は他の遠隔インターフェースを通じて、アクセス可能であり得る。本明細書において説明される種々の機能は、遠隔デスクトップ環境又は任意の他のクラウドベースのコンピューティング環境を通じて提供され得る。
【０１７３】
加えて、本明細書に記載の構成要素のうちの１つ又は２つ以上は、データ、物理的デバイス、及び／又は物理的デバイスの表現を、ある形態から他の形態に変換し得る。例えば、クライアント１０、サーバ３０、及び／又はノード１２０（１）〜（Ｎ）は、コンピューティングデバイス、クラスタ及び／又はサーバにＩ／Ｏフェンシング操作を最適化させるために、コンピューティングデバイス、クラスタ、及び／又はサーバの挙動を変換する。
１．
ノードがもはやサブクラスタの一部ではないと決定することに応答して、
サブクラスタ内の別のノードを競争者ノードとして指定することであって、
競争者ノードが行列にアクセスし、
行列が、クラスタ内の複数のコーディネーションポイントのうちの大半がサブクラスタ内の複数のノードによってアクセス可能であるかどうかを決定するための情報を含む、指定することと、
アクセスに基づいて、情報が、コーディネーションポイントの大半が複数のノードによってアクセス可能であることを示していることを決定することと、
情報をブロードキャストすることと、を含む、方法。
２．
もはやサブクラスタの一部ではないノードが、複数のコーディネーションポイントの大半へのアクセスを以前に提供していた、請求項１に記載の方法。
３．
ノードがもはやサブクラスタの一部ではないと決定した後で、別のノードを競争者ノードとして指定する前に、サブクラスタ内のいずれのノードも、コーディネーションポイントの大半へのアクセスを個別に提供することができないと決定すること、を更に含む、請求項１に記載の方法。
４．
情報をブロードキャストすることは、複数のコーディネーションポイントのうちの大半がサブクラスタ内の複数のノードによってアクセス可能であることを示す情報により、行列を更新することを含み、
情報がクラスタにブロードキャストされ、
情報がまた、競争者ノードによって実施されるフェンシング競争が成功したことを示す、請求項１に記載の方法。
５．
情報に基づいて、パーティション化されたノードが、サブクラスタ内の複数のノードによってアクセス可能な複数のコーディネーションポイントの大半のうちの１つ又は２つ以上のコーディネーションポイントにアクセスすることを禁止すること、を更に含み、
禁止が、既存のスプリットブレイン状態がクラスタ内で発生することを防止する、請求項４に記載の方法。
６．
行列が、コーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
ＣＰＲＭがクラスタ内の複数のノードのうちの全てのノードにわたって複製される、請求項１に記載の方法。
７．
複数のコーディネーションポイントが、
１つ若しくは２つ以上のコーディネータディスク又は
１つ若しくは２つ以上のコーディネーションポイントサーバ、を含む、請求項１に記載の方法。
８．
プログラム命令を記憶する非一時的コンピュータ可読ストレージ媒体であって、プログラム命令は、
ノードがもはやサブクラスタの一部ではないと決定することに応答して、
サブクラスタ内の別のノードを競争者ノードとして指定することであって、
競争者ノードが行列にアクセスし、
行列が、クラスタ内の複数のコーディネーションポイントのうちの大半がサブクラスタ内の複数のノードによってアクセス可能であるかどうかを決定するための情報を含む、指定することと、
アクセスに基づいて、情報が、コーディネーションポイントの大半が複数のノードによってアクセス可能であることを示していることを決定することと、
情報をブロードキャストすることと、を実行可能である、非一時的コンピュータ可読ストレージ媒体。
９．
もはやサブクラスタの一部ではないノードが、複数のコーディネーションポイントの大半へのアクセスを以前に提供していた、請求項８に記載の非一時的コンピュータ可読ストレージ媒体。
１０．
ノードがもはやサブクラスタの一部ではないと決定した後で、別のノードを競争者ノードとして指定する前に、サブクラスタ内のいずれのノードも、コーディネーションポイントの大半へのアクセスを個別に提供することができないと決定すること、を更に含む、請求項８に記載の非一時的コンピュータ可読ストレージ媒体。
１１．
情報をブロードキャストすることは、複数のコーディネーションポイントのうちの大半がサブクラスタ内の複数のノードによってアクセス可能であることを示す情報により、行列を更新することを含み、
情報がクラスタにブロードキャストされ、
情報はまた、競争者ノードによって実施されるフェンシング競争が成功したことを示す、請求項８に記載の非一時的コンピュータ可読ストレージ媒体。
１２．
情報に基づいて、パーティション化されたノードが、サブクラスタ内の複数のノードによってアクセス可能な複数のコーディネーションポイントの大半のうちの１つ又は２つ以上のコーディネーションポイントにアクセスすることを禁止することを更に含み、
禁止が、既存のスプリットブレイン状態がクラスタ内で発生することを防止する、請求項１１に記載の非一時的コンピュータ可読ストレージ媒体。
１３．
行列が、コーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
ＣＰＲＭがクラスタ内の複数のノードのうちの全てのノードにわたって複製される、請求項８に記載の非一時的コンピュータ可読ストレージ媒体。
１４．
１つ又は２つ以上のプロセッサと、
１つ又は２つ以上のプロセッサに結合されたメモリと、を備え、メモリは、１つ又は２つ以上のプロセッサによって実行可能なプログラム命令を記憶し、プログラム命令は、
ノードがもはやサブクラスタの一部ではないと決定することに応答して、
サブクラスタ内の別のノードを競争者ノードとして指定することであって、
競争者ノードが行列にアクセスし、
行列が、クラスタ内の複数のコーディネーションポイントのうちの大半がサブクラスタ内の複数のノードによってアクセス可能であるかどうかを決定するための情報を含む、指定することと、
アクセスに基づいて、情報が、コーディネーションポイントの大半が複数のノードによってアクセス可能であることを示していることを決定することと、
情報をブロードキャストすることと、を実行可能である、システム。
１５．
もはやサブクラスタの一部ではないノードが、複数のコーディネーションポイントの大半へのアクセスを以前に提供していた、請求項１４に記載のシステム。
１６．
ノードがもはやサブクラスタの一部ではないと決定した後で、別のノードを競争者ノードとして指定する前に、サブクラスタ内のいずれのノードも、コーディネーションポイントの大半へのアクセスを個別に提供することができないと決定すること、を更に含む、請求項１４に記載のシステム。
１７．
情報をブロードキャストすることは、複数のコーディネーションポイントのうちの大半がサブクラスタ内の複数のノードによってアクセス可能であることを示す情報により、行列を更新することを含み、
情報がクラスタにブロードキャストされ、
情報がまた、競争者ノードによって実施されるフェンシング競争が成功したことを示す、請求項１４に記載のシステム。
１８．
情報に基づいて、パーティション化されたノードが、サブクラスタ内の複数のノードによってアクセス可能な複数のコーディネーションポイントの大半のうちの１つ又は２つ以上のコーディネーションポイントにアクセスすることを禁止することを更に含み、
禁止が、既存のスプリットブレイン状態がクラスタ内で発生することを防止する、請求項１７に記載のシステム。
１９．
行列が、コーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
ＣＰＲＭがクラスタ内の複数のノードのうちの全てのノードにわたって複製される、請求項１４に記載のシステム。
２０．
複数のコーディネーションポイントが、
１つ若しくは２つ以上のコーディネータディスク又は
１つ若しくは２つ以上のコーディネーションポイントサーバ、を含む、請求項１４に記載のシステム。
１．
クラスタが複数のネットワークパーティションにパーティション化されていることに応答して、
複数のネットワークパーティションのうちの第１のネットワークパーティション内の第１のノードを使用して、第１のノードが複数のコーディネーションポイントのうちの１つ又は２つ以上のコーディネーションポイントを勝ち取るかどうかを決定することと、
第１のノードの決定を第１のネットワークパーティション内の第２のノードに送信することと、
第２のノードを使用して、第２のノードが１つ又は２つ以上のコーディネーションポイント以外の１つ又は２つ以上の他のコーディネーションポイントを獲得するかどうかを決定することと、を含む、方法。
２．
第２のノードを使用して決定することが、
第１のノード及び第２のノードが、共同で、複数のコーディネーションポイントのうちのコーディネーションポイントの大半を勝ち取ることを更に含む、請求項１に記載の方法。
３．
１つ又は２つ以上のコーディネーションポイントを勝ち取ることが、
１つ又は２つ以上のコーディネーションポイントにアクセスすることと、
第１のネットワークパーティションにない１つ又は２つ以上のノードの１つ又は２つ以上の登録キーを、１つ又は２つ以上のコーディネーションポイントから抜き出すことと、
１つ又は２つ以上のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取ることを阻止することと、を含む、請求項１に記載の方法。
４．
第１のノード及び第２のノードが共に複数のコーディネーションポイントの大半のコーディネーションポイントを勝ち取っていない場合、第２のノードの決定を第３のノードに送信することを更に含み、
第３のノードが、第１のネットワークパーティションの一部である、請求項２に記載の方法。
５．
第１のノードを使用して決定することが、第１のノードを使用して、第１のフェンシング競争を実施することを含み、
第２のノードを使用して決定することが、第２のノードに送信された第１のノードの決定に基づいて、第２のノードを使用して、第２のフェンシング競争を実施することを含む、請求項１に記載の方法。
６．
第１のノードを使用して決定することと、第２のノードを使用して決定することとは、行列にアクセスすることを含み、
行列が、コーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
ＣＰＲＭがクラスタ内の複数のノードのうちの全てのノードにわたって複製される、請求項１に記載の方法。
７．
複数のコーディネーションポイントが、
１つ若しくは２つ以上のコーディネータディスク又は
１つ若しくは２つ以上のコーディネーションポイントサーバ、を含む、請求項１に記載の方法。
８．
第１のノードが、第１の競争者ノードとして指定され、
第１の競争者ノードが決定を第２のノードに送信した後で、
第２のノードが、第２の競争者ノードとして指定される、請求項１に記載の方法。
９．
プログラム命令を記憶する非一時的コンピュータ可読ストレージ媒体であって、プログラム命令は、
クラスタが複数のネットワークパーティションにパーティション化されていることに応答して、
複数のネットワークパーティションのうちの第１のネットワークパーティション内の第１のノードを使用して、第１のノードが複数のコーディネーションポイントのうちの１つ又は２つ以上のコーディネーションポイントを勝ち取るかどうかを決定することと、
第１のノードの決定を第１のネットワークパーティション内の第２のノードに送信することと、
第２のノードを使用して、第２のノードが１つ又は２つ以上のコーディネーションポイント以外の１つ又は２つ以上の他のコーディネーションポイントを獲得するかどうかを決定することと、を実行可能である、非一時的コンピュータ可読ストレージ媒体。
１０．
第２のノードを使用した決定が、
第１のノード及び第２のノードが、共同で、複数のコーディネーションポイントのうちのコーディネーションポイントの大半を勝ち取ることを更に含む、請求項９に記載の非一時的コンピュータ可読ストレージ媒体。
１１．
１つ又は２つ以上のコーディネーションポイントを勝ち取ることが、
１つ又は２つ以上のコーディネーションポイントにアクセスすることと、
第１のネットワークパーティションにない１つ又は２つ以上のノードの１つ又は２つ以上の登録キーを、１つ又は２つ以上のコーディネーションポイントから抜き出すことと、
１つ又は２つ以上のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取ることを阻止することと、を含む、請求項９に記載の非一時的コンピュータ可読ストレージ媒体。
１２．
第１のノード及び第２のノードが、共に、複数のコーディネーションポイントの大半のコーディネーションポイントを獲得していない場合、第２のノードの決定を第３のノードに送信することであって、
第３のノードが、第１のネットワークパーティションの一部である、送信することと、を更に含む、請求項１０に記載の非一時的コンピュータ可読ストレージ媒体。
１３．
第１のノードを使用して決定することが、第１のノードを使用して、第１のフェンシング競争を実施することを含み、
第２のノードを使用して決定することが、第２のノードに送信された第１のノードの決定に基づいて、第２のノードを使用して、第２のフェンシング競争を実施することを含む、請求項９に記載の非一時的コンピュータ可読ストレージ媒体。
１４．
第１のノードを使用して決定することと、第２のノードを使用して決定することとは、行列にアクセスすることを含み、
行列が、コーディネーションポイント到達可能性行列（ＣＰＲＭ）であり、
ＣＰＲＭがクラスタ内の複数のノードのうちの全てのノードにわたって複製される、請求項９に記載の非一時的コンピュータ可読ストレージ媒体。
１５．
１つ又は２つ以上のプロセッサと、
１つ又は２つ以上のプロセッサに結合されたメモリと、を備え、メモリは、１つ又は２つ以上のプロセッサによって実行可能なプログラム命令を記憶し、プログラム命令は、
クラスタが複数のネットワークパーティションにパーティション化されていることに応答して、
複数のネットワークパーティションのうちの第１のネットワークパーティション内の第１のノードを使用して、第１のノードが複数のコーディネーションポイントのうちの１つ又は２つ以上のコーディネーションポイントを勝ち取るかどうかを決定することと、
第１のノードの決定を第１のネットワークパーティション内の第２のノードに送信することと、
第２のノードを使用して、第２のノードが１つ又は２つ以上のコーディネーションポイント以外の１つ又は２つ以上の他のコーディネーションポイントを獲得するかどうかを決定することと、を実行可能である、システム。
１６．
第２のノードを使用した決定が、
第１のノード及び第２のノードが、共同で、複数のコーディネーションポイントのうちのコーディネーションポイントの大半を勝ち取ることを更に含む、請求項１５に記載のシステム。
１７．
１つ又は２つ以上のコーディネーションポイントを勝ち取ることが、
１つ又は２つ以上のコーディネーションポイントにアクセスすることと、
第１のネットワークパーティションにない１つ又は２つ以上のノードの１つ又は２つ以上の登録キーを、１つ又は２つ以上のコーディネーションポイントから抜き出すことと、
１つ又は２つ以上のノードが１つ又は２つ以上のコーディネーションポイントを勝ち取ることを阻止することと、を含む、請求項１５に記載のシステム。
１８．
第１のノード及び第２のノードが共に複数のコーディネーションポイントの大半のコーディネーションポイントを勝ち取っていない場合、第２のノードの決定を第３のノードに送信することを更に含み、
第３のノードが、第１のネットワークパーティションの一部である、請求項１６に記載のシステム。
１９．
第１のノードを使用して決定することが、第１のノードを使用して、第１のフェンシング競争を実施することを含み、
第２のノードを使用して決定することが、第２のノードに送信された第１のノードの決定に基づいて、第２のノードを使用して、第２のフェンシング競争を実施することを含む、請求項１５に記載のシステム。
２０．
第１のノードが、第１の競争者ノードとして指定され、
第１の競争者ノードが決定を第２のノードに送信した後で、
第２のノードが、第２の競争者ノードとして指定される、請求項１５に記載のシステム。
【０１７４】
本開示がいくつかの実施形態と関連して説明されたけれども、本開示は、本明細書で述べた特定の形式に限定されるように意図されていない。逆に、添付の請求項によって規定されるような本開示の範囲内に合理的に含まれ得るような代替形態、修正形態、及び等価物を包含するように意図されている。
【図１Ａ】
2018534665.tif 000003
【図１Ｂ】
2018534665.tif 000004
【図２】
2018534665.tif 000005
【図３Ａ】
2018534665.tif 000006
【図３Ｂ】
2018534665.tif 000007
【図４】
2018534665.tif 000008
【図５Ａ】
2018534665.tif 000009
【図５Ｂ】
2018534665.tif 000010
【図６】
2018534665.tif 000011
【図７】
2018534665.tif 000012
【図８】
2018534665.tif 000013
【図９】
2018534665.tif 000014
【図１０Ａ】
2018534665.tif 000015
【図１０Ｂ】
2018534665.tif 000016
【図１１Ａ】
2018534665.tif 000017
【図１１Ｂ】
2018534665.tif 000018
【図１２Ａ】
2018534665.tif 000019
【図１２Ｂ】
2018534665.tif 000020
【図１２Ｃ】
2018534665.tif 000021
【図１３】
2018534665.tif 000022
【図１４】
2018534665.tif 000023
【図１５】
2018534665.tif 000024
【図１６】
2018534665.tif 000025
【図１７】
2018534665.tif 000026
【国際調査報告】
2018534665.tif 000027
2018534665.tif 000028
2018534665.tif 000029