(57)【要約】      （修正有）【課題】クラスタを少なくとも第１及び第２パーティションへ分割してコンピューティングノードのクラスタを管理する。【解決手段】クラスタはオブジェクトストア１１６を提供するためにノード１１１Ａ〜Ｄのローカルストレージリソースを集約し、オブジェクトストア内に格納されたオブジェクトを、データコンポーネントに分割する。第１のオブジェクトを含むデータコンポーネントの大多数が第１パーティション内のノード内に格納され、第２オブジェクトを含むデータコンポーネントの大多数が第２パーティション内のノード内に格納される。構成オブジェクトは、第２パーティションから第１オブジェクトへのアクセスを拒絶し、第１パーティション内の第１のオブジェクトに対し行われることが許可され、第１パーティションから第２オブジェクトへのアクセスを拒絶し、第２パーティション内の第２オブジェクトに対して行われることが許可される。【選択図】図２
2018049644.tif 000002
【特許請求の範囲】
【請求項１】
クラスタを少なくとも第１のパーティションと第２のパーティションに分割する失敗事象または管理事象を受けてコンピューティングノードのクラスタを管理する方法であって、（ｉ）前記クラスタはオブジェクトストアを提供するために前記コンピューティングノードの各々のローカルストレージリソースを集約し、（ｉｉ）前記オブジェクトストアに格納されたオブジェクトは前記コンピューティングノードを介して格納されるデータコンポーネントに分割され、前記方法は、
前記オブジェクトストアに格納された第１のオブジェクトを含むデータコンポーネントの大多数が前記第１のパーティション内のコンピューティングノード内に格納されるということを判断する工程と、
前記オブジェクトストア内に格納された第２のオブジェクトを含むデータコンポーネントの大多数が前記第２のパーティション内のコンピューティングノード内に格納されるということを判断する工程と、
前記第２のパーティションから前記第１のオブジェクトへのいかなるアクセスを拒絶しつつ、構成オペレーションが前記第１のパーティション内の前記第１のオブジェクトに対して行われることを許可する工程と、
前記第１のパーティションから前記第２のオブジェクトへのいかなるアクセスを拒絶しつつ、構成オペレーションが前記第２のパーティション内の前記第２のオブジェクトに対して行われることを許可する工程とを含む方法。
【請求項２】
前記第１のオブジェクトを含むデータコンポーネントの大多数がさらに前記第１のオブジェクトを含むすべてのデータを含むということを判断する工程と、
前記第１のパーティション内の前記コンピューティングノードのうちの１つの上で実行される要求処理により前記第１のパーティション内の前記第１のオブジェクトに対しＩ／Ｏオペレーションが行われることを許可する工程とをさらに含む請求項１に記載の方法。
【請求項３】
前記要求処理は仮想マシンであり、前記第１のオブジェクトは前記仮想マシンの仮想ディスクを表す、請求項２に記載の方法。
【請求項４】
構成オペレーションが、前記オブジェクトストア内に格納されたオブジェクトの容量、可用性またはＩＯＰＳを修正するオペレーションを含む、請求項１に記載の方法。
【請求項５】
前記コンピューティングノードの各々は、前記オブジェクトストア内に格納された各オブジェクトの現在の構成を追跡するとともに、オブジェクトが前記コンピューティングノードによりアクセス可能かどうかを示すメモリ内データベースのローカルコピーを維持する、請求項１に記載の方法。
【請求項６】
前記第１のパーティション内のコンピューティングノードにより前記第１のオブジェクトに対し行われるいかなるオペレーションもログ内に格納する工程をさらに含む請求項５に記載の方法。
【請求項７】
故障事象から回復した場合、
前記第１のパーティションの前記コンピューティングノード内の前記メモリ内データベースの前記ローカルコピーを前記第２のパーティションのリーダノードからの前記メモリ内データベースの置換コピーで置換する工程と、
前記メモリ内データベースの前記置換コピーが更新されて前記第１のパーティションで行われたオペレーションを含むように前記ログ内の前記オペレーションを再生する工程とをさらに含む請求項６に記載の方法。
【請求項８】
前記第１のパーティションと前記第２のパーティションをマージした場合、前記第１のパーティション内のコンピューティングノード内に格納された前記第１のオブジェクトのデータコンポーネントと前記第２のパーティション内に格納された前記第１のオブジェクトの任意の他のデータコンポーネントとを調整する工程をさらに含む請求項１に記載の方法。
【請求項９】
前記調整する工程は、前記第１のオブジェクトになされた更新をマージされたクラスタのリーダノードで再生する工程をさらに含む、請求項８に記載の方法。
【請求項１０】
プロセッサで実行されると、クラスタを少なくとも第１のパーティションと第２のパーティションに分割する失敗事象または管理事象を受けてコンピューティングノードのクラスタを管理するオペレーションを行う命令を格納する非一時的コンピュータ可読記憶媒体であって、（ｉ）前記クラスタはオブジェクトストアを提供するために前記コンピューティングノードの各々のローカルストレージリソースを集約し、（ｉｉ）前記オブジェクトストアに格納されたオブジェクトは前記コンピューティングノードを介して格納されるデータコンポーネントに分割され、前記オペレーションは、
前記オブジェクトストアに格納された第１のオブジェクトを含むデータコンポーネントの大多数が前記第１のパーティション内のコンピューティングノード内に格納されるということを判断すること、
前記オブジェクトストア内に格納された第２のオブジェクトを含むデータコンポーネントの大多数が前記第２のパーティション内のコンピューティングノード内に格納されるということを判断すること、
前記第２のパーティションから前記第１のオブジェクトへのいかなるアクセスも拒絶しつつ、構成オペレーションが前記第１のパーティション内の前記第１のオブジェクトに対して行われることを許可すること、
前記第１のパーティションから前記第２のオブジェクトへのいかなるアクセスも拒絶しつつ、構成オペレーションが前記第２のパーティション内の前記第２のオブジェクトに対して行われることを許可することを含む、コンピュータ可読記憶媒体。
【請求項１１】
前記オペレーションは、
前記第１のオブジェクトを含むデータコンポーネントの大多数がさらに前記第１のオブジェクトを含むすべてのデータを含むということを判断すること、
前記第１のパーティション内の前記コンピューティングノードのうちの１つの上で実行される要求処理により前記第１のパーティション内の前記第１のオブジェクトに対しＩ／Ｏオペレーションが行われることを許可することをさらに含む、請求項１０に記載のコンピュータ可読記憶媒体。
【請求項１２】
前記要求処理は仮想マシンであり、前記第１のオブジェクトは前記仮想マシンの仮想ディスクを表す、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１３】
構成オペレーションが、前記オブジェクトストア内に格納されたオブジェクトの容量、可用性またはＩＯＰＳを修正するオペレーションを含む、請求項１０に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記コンピューティングノードの各々は、前記オブジェクトストア内に格納された各オブジェクトの現在の構成を追跡するとともに、オブジェクトが前記コンピューティングノードによりアクセス可能かどうかを示すメモリ内データベースのローカルコピーを維持する、請求項１０に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記オペレーションは、前記第１のパーティション内のコンピューティングノードにより前記第１のオブジェクトに対し行われたいかなるオペレーションもログ内に格納することをさらに含む、請求項１４に記載のコンピュータ可読記憶媒体。
【請求項１６】
故障事象から回復した場合、前記オペレーションは、
前記第１のパーティションの前記コンピューティングノード内の前記メモリ内データベースの前記ローカルコピーを前記第２のパーティションのリーダノードからの前記メモリ内データベースの置換コピーで置換すること、
前記メモリ内データベースの前記置換コピーが更新されて前記第１のパーティションで行われたオペレーションを含むようにログ内の前記オペレーションを再生することをさらに含む、請求項１５に記載のコンピュータ可読記憶媒体。
【請求項１７】
前記第１のパーティションと前記第２のパーティションをマージした場合、前記オペレーションは、前記第１のパーティション内のコンピューティングノード内に格納された前記第１のオブジェクトのデータコンポーネントと前記第２のパーティション内に格納された前記第１のオブジェクトの任意の他のデータコンポーネントとを調整することをさらに含む、請求項１０に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記調整することは、前記第１のオブジェクトに対しなされた更新をマージされたクラスタのリーダノードで再生することをさらに含む、請求項１７に記載のコンピュータ可読記憶媒体。
【請求項１９】
システムであって、
プロセッサと、
前記プロセッサで実行されると、クラスタを少なくとも第１のパーティションと第２のパーティションに分割する失敗または管理事象を受けてコンピューティングノードのクラスタを管理するオペレーションを行うアプリケーションをホストするメモリとを備え、（ｉ）前記クラスタはオブジェクトストアを提供するために前記コンピューティングノードの各々のローカルストレージリソースを集約し、（ｉｉ）前記オブジェクトストアに格納されたオブジェクトは前記コンピューティングノードを介して格納されるデータコンポーネントに分割され、前記オペレーションは、
前記オブジェクトストアに格納された第１のオブジェクトを含むデータコンポーネントの大多数が前記第１のパーティション内のコンピューティングノード内に格納されるということを判断すること、
前記オブジェクトストア内に格納された第２のオブジェクトを含むデータコンポーネントの大多数が前記第２のパーティション内のコンピューティングノード内に格納されるということを判断すること、
前記第２のパーティションから前記第１のオブジェクトへのいかなるアクセスも拒絶しつつ、構成オペレーションが前記第１のパーティション内の前記第１のオブジェクトに対して行われることを許可すること、
前記第１のパーティションから前記第２のオブジェクトへのいかなるアクセスも拒絶しつつ、構成オペレーションが前記第２のパーティション内の前記第２のオブジェクトに対して行われることを許可することを含む、システム。
【請求項２０】
前記オペレーションは、
前記第１のオブジェクトを含むデータコンポーネントの大多数がさらに前記第１のオブジェクトを含むすべてのデータを含むということを判断すること、
前記第１のパーティション内の前記コンピューティングノードのうちの１つの上で実行される要求処理により前記第１のパーティション内の前記第１のオブジェクトに対しＩ／Ｏオペレーションが行われることを許可することをさらに含む、請求項１９に記載のシステム。
【請求項２１】
前記要求処理は仮想マシンであり、前記第１のオブジェクトは前記仮想マシンの仮想ディスクを表す、請求項２０に記載のシステム。
【請求項２２】
構成オペレーションが、前記オブジェクトストア内に格納されたオブジェクトの容量、可用性またはＩＯＰＳを修正するオペレーションを含む、請求項１９に記載のシステム。
【請求項２３】
前記コンピューティングノードの各々は、前記オブジェクトストア内に格納された各オブジェクトの現在の構成を追跡するとともにオブジェクトが前記コンピューティングノードによりアクセス可能かどうかを示すメモリ内データベースのローカルコピーを維持する、請求項１９に記載のシステム。
【請求項２４】
前記オペレーションは、前記第１のパーティション内のコンピューティングノードにより前記第１のオブジェクトに対し行われたいかなるオペレーションもログ内に格納することをさらに含む、請求項２３に記載のシステム。
【請求項２５】
故障事象から回復した場合、前記オペレーションは、
前記第１のパーティションの前記コンピューティングノード内の前記メモリ内データベースの前記ローカルコピーを前記第２のパーティションのリーダノードからの前記メモリ内データベースの置換コピーで置換すること、
前記メモリ内データベースの前記置換コピーが更新されて前記第１のパーティションで行われたオペレーションを含むようにログ内の前記オペレーションを再生することをさらに含む、請求項２４に記載のシステム。
【請求項２６】
前記第１のパーティションと前記第２のパーティションをマージした場合、前記オペレーションは、前記第１のパーティション内のコンピューティングノード内に格納された前記第１のオブジェクトのデータコンポーネントと前記第２のパーティション内に格納された前記第１のオブジェクトの任意の他のデータコンポーネントとを調整することをさらに含む、請求項１９に記載のシステム。
【請求項２７】
前記調整することは、前記第１のオブジェクトになされた更新をマージされたクラスタのリーダノードで再生することをさらに含む、請求項２６に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
分散システムは、ネットワーク内の複数のクライアントが共用資源のプールへアクセスできるようにする。例えば、分散ストレージシステムは、ホストコンピュータのクラスタが各ホストコンピュータ内に位置するか、または各ホストコンピュータに取り付けられたローカルディスク（例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）ベースのフラッシュストレージ、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴ  Ａｔｔａｃｈｍｅｎｔ）またはＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）磁気ディスク）を集約してストレージの単一かつ共有プールを生成できるようにする。このストレージのプール（本明細書では「データストア（ｄａｔａｓｔｏｒｅ）」または「ストア（ｓｔｏｒｅ）」と呼ぶことがある）は、クラスタ内のすべてのホストコンピュータによりアクセス可能であり、ストレージエンティティの単一名前空間（ファイルの場合は階層ファイルシステム名前空間、オブジェクトの場合は一意的識別子のフラット名前空間など）として提示され得る。ストレージクライアント（ｓｔｏｒａｇｅ  ｃｌｉｅｎｔ）（ホストコンピュータ上に生み出された仮想マシンなど）は、例えばその動作中に仮想マシンによりアクセスされる仮想ディスクを格納するためにデータストアを使用し得る。データストアを構成する共有ローカルディスクは異なる性能特性（例えば、容量、毎秒当り入力／出力動作すなわちＩＯＰＳ能力など）を有し得るので、仮想ディスクまたはその一部を格納するこのような共有ローカルディスクの使用量は、各所与の仮想マシンのニーズに基づき仮想マシン間で分散され得る。
【０００２】
この手法は企業に費用効率の高い性能を提供する。例えば、プールされたローカルディスクを使用する分散ストレージは安価でありかつ高度にスケーラブルであり、かつ管理することが比較的簡単である。このような分散ストレージはクラスタ内に市販品ディスクを使用し得るので、企業は追加のストレージインフラストラクチャに投資する必要は無い。しかし、ホストコンピュータ（または「ノード」）の「クラスタ」のローカルストレージにより支援されるデータストアに伴って生じる１つの問題は、１つまたは複数のノードが失敗し、不活性になり得るか、またはそうでなければオフラインとなり得、したがってノードは、クラスタ内の他のノードからはもはや見えなくなることである。例えば、クラスタは、ノード同士を接続するネットワーク内の失敗または間違い設定のためにサブクラスタの多くの「パーティション」に再分割され得る。ノード障害は、しばしば、ネットワーク分断（ｎｅｔｗｏｒｋ  ｐａｒｔｉｔｉｏｎ）では識別不可能であり、この分断影響を診断すること、およびこれに対応することが困難となる。ノード障害に起因する特定のパーティション内のノードは正常に通信し続け得るが、他のパーティション内のノードを介して通信することができない（「分離脳（ｓｐｌｉｔ  ｂｒａｉｎ）」状況と呼ばれる）。このような「分離脳」状況では、異なるパーティション内のノードは、他のパーティション内のノードとの調整無しにデータのそれらのローカルコピーへアクセスまたはそれを修正するオペレーションを実行し得、全クラスタにわたって一貫しないまたは不正確なデータを生じる。このような問題を回避するために、既存の分散ストレージシステムは、クラスタの最大で１つのパーティションが任意の時点で機能できるようにする。しかし、この手法は保守的であり、この手法は、クラスタの様々なノード内のデータの特定の分布および複製特徴（ｒｅｐｌｉｃａｔｉｏｎ  ｃｈａｒａｃｔｅｒｉｓｔｉｃ）を所与として、特定のパーティション内で安全にアクセスされ得るあるデータへのアクセスを却下し得る。
【発明の概要】
【課題を解決するための手段】
【０００３】
本明細書において開示される１つまたは複数の実施形態は、クラスタを少なくとも第１のパーティションと第２のパーティションに分割する失敗事象または管理事象を受けてコンピューティングノードのクラスタを管理する方法を提供する。クラスタはオブジェクトストアを提供するためにコンピューティングノードの各々のローカルストレージリソースを集約し、オブジェクトストアに格納されたオブジェクトはコンピューティングノードを介して格納されるデータコンポーネントに分割される。本方法は通常、オブジェクトストアに格納された第１のオブジェクトを含むデータコンポーネントの大多数が第１のパーティション内のコンピューティングノード内に格納されるということが判断される工程を含む。本方法はまた、オブジェクトストア内に格納された第２のオブジェクトを含むデータコンポーネントの大多数が第２のパーティション内のコンピューティングノード内に格納されるということが判断される工程を含む。本方法は、第２のパーティションから第１のオブジェクトへのいかなるアクセスも拒絶しつつ、構成オペレーションが第１のパーティション内の第１のオブジェクトに対して行われることを許可する工程を含む。本方法はまた、第１のパーティションから第２のオブジェクトへのいかなるアクセスも拒絶しつつ、構成オペレーションが第２のパーティション内の第２のオブジェクトに対して行われることを許可する工程を含む。
【０００４】
他の実施形態は、限定しないが、開示された方法の１つまたは複数の態様を処理ユニットが実施できるようにする命令を含むコンピュータ可読媒体と、プロセッサ、メモリ、および開示された方法の１つまたは複数の態様を実施するように構成されたアプリケーションプログラムとを有するシステムとを含む。
【図面の簡単な説明】
【０００５】
【図１】一実施形態による例示的コンピューティング環境を示す。
【図２】一実施形態による、オブジェクトストア内に編成されたオブジェクト（仮想ディスクを表す）の例示的階層構造を示す。
【図３】一実施形態によるＶＳＡＮモジュールの構成要素を示す。
【図４】一実施形態による、規定のストレージポリシーに基づき仮想ディスクオブジェクトを生成するための方法フローチャートを示す。
【図５】一実施形態による、複合オブジェクトがノードのクラスタのパーティションからアクセス可能かどうかを判断するためのフローチャートを示す。
【図６】一実施形態による、パーティションが単一クラスタのノードに戻る場合の調整のフローチャートを示す。
【図７】一実施形態による、ＶＭから発するＩ／Ｏオペレーションの対処を示す。
【発明を実施するための形態】
【０００６】
本明細書において開示される実施形態は、ノードまたはネットワーク故障またはネットワークまたは他のタイプの間違った設定などの故障事象が発生した場合にクラスタ内のノードの複数のパーティションを容認するための技術を提供する。クラスタ内の各ノードは集約型オブジェクトストア（ａｇｇｒｅｇａｔｅ  ｏｂｊｅｃｔ  ｓｔｏｒｅ）（オブジェクトストア内に格納されたオブジェクトの一部または「コンポーネント」がクラスタ内の異なるノードのストレージにより支援され得る）を提供するようにローカルストレージに寄与する。以下にさらに詳細に説明されるように、クラスタの分断を生じる故障事象が発生した場合に、本明細書の技術は、分断脳シナリオを防止するために特定のパーティションへの完全アクセスを拒絶するのではなく「オブジェクト毎」ベースで、クラスタ内に格納されたデータのアクセス可能性を評価する。以下にさらに詳細に説明されるように、本明細書の技術は、並列パーティションが共存できるようにするとともに、所与のパーティション内に存在するそのコンポーネントの定足数（例えば、大多数）を有するオブジェクトに対しいくつかのオペレーションを実行できるようにする。オブジェクトの「オーナ」ノードは、オブジェクトに対する定足数のコンポーネントが存在するかどうかを判断し、そうであればパーティション内のオブジェクトへのアクセスを調整する。
【０００７】
その例を添付図面に示すいくつかの実施形態を以下に詳細に参照する。実行可能なときはいつも添付図面では同様なまたは類似の参照番号が使用され得、これらは同様なまたは類似の機能を指し得ることに留意されたい。添付図面は例示目的のためだけの実施形態を描写する。当業者は、本明細書で示される構造および方法の代替実施形態が本明細書に記載の原理から逸脱することなく採用され得るということを以下の説明から容易に認識することになる。
【０００８】
以下では、仮想コンピューティング環境内のソフトウェア定義ストレージエリアネットワークの例が、分散資源システム内のクラスタ分断を容認する参考例として使用される。この参考例は本明細書で説明する実施形態の理解を助けるために含まれる。しかし、実施形態は共用資源に関するクラスタ分断耐性（ｃｌｕｓｔｅｒ  ｐａｒｔｉｔｉｏｎ  ｔｏｌｅｒａｎｃｅ）に関係する他の文脈で使用されるように適合化され得るということは当業者にとって明白である。
【０００９】
同様に、多くの特定の詳細は実施形態の完全な理解を助けるために提供される。実施形態はこれら特定の詳細無しに実施され得るということを当業者は理解することになる。別の事例では、周知の処理オペレーションおよび実装詳細は本開示の新規な態様を不必要にあいまいにすることを回避するために詳細に説明されなかった。
【００１０】
図１は一実施形態によるコンピューティング環境１００を示す。図示のように、コンピューティング環境１００は、ノード上で実行される仮想マシン（ＶＭ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）１１２に集約型オブジェクトストア１１６を提供するためにクラスタ１１０のホストサーバまたはノード１１１に収容されるか、または直接取り付けられた市販品ローカルストレージを活用するソフトウェアベース「仮想ストレージエリアネットワーク」（ＶＳＡＮ：ｖｉｒｔｕａｌ  ｓｔｏｒａｇｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）環境である。以下、用語「収容された」または「内に収容された」の使用は、内に収容されるか、またはそうでなければ直接取り付けられたことの両方を包含するように使用され得る。ノード１１１内に収容されるか、またはそうでなければノード１１１に直接取り付けられたローカル市販品ストレージは、ソリッドステートドライブ（ＳＳＤ：ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅ）１１７、磁気または回転ディスク１１８、および任意の他のタイプの不揮発性メモリのうちの少なくとも一つの組み合わせを含み得る。いくつかの実施形態では、ＳＳＤ１１７は、Ｉ／Ｏ性能を高めるために磁気ディスク１１８の前の読み出しキャッシュおよび書き込みバッファのうちの少なくとも一つとして働く。以下にさらに論述されるように、各ノード１１１は、ストレージ管理ワークフローを自動化する（例えば、オブジェクトストア内にオブジェクトを生成する等）し、かつオブジェクトストア内のオブジェクトに対し指定された所定ストレージポリシーに基づきオブジェクトストア内のオブジェクトへのアクセスを提供する（例えば、オブジェクトストア内のオブジェクトに対するＩ／Ｏオペレーションに対処する等）ために、ストレージ管理モジュール（本明細書では、「ＶＳＡＮモジュール」と呼ぶ）を含み得る。例えば、ＶＭは、その使用目的に依存してその「仮想ディスク」の特定のストレージ要件（例えば、容量、可用性、ＩＯＰＳなど）を有するようにアドミニストレータにより当初構成され得るので、アドミニストレータはこのような可用性、容量、ＩＯＰＳなどを規定するＶＭ毎のストレージプロファイルまたはポリシーを定義し得る。以下にさらに説明するように、ＶＳＡＮモジュールは、規定ポリシーに基づきオブジェクトストアの物理的ストレージリソースにより支援することにより指定仮想ディスクの「オブジェクト」を生成し得る。
【００１１】
仮想化管理プラットホーム１０５はノード１１１のクラスタ１１０と関連付けられる。仮想化管理プラットホーム１０５は、アドミニストレータが様々なノード１１１上のＶＭの構成と生成を管理できるようにする。図１の実施形態に描写するように、各ノード１１１は、仮想化層またはハイパーバイザ１１３、ＶＳＡＮモジュール１１４、ハードウェア１１９（ノード１１１のＳＳＤ１１７と磁気ディスク１１８を含む）を含む。ハイパーバイザ１１３を介し、ノード１１１は複数のＶＭ１１２を立ち上げ動作させることができる。ハイパーバイザ１１３は、ひとつには、ＶＭ１１２毎にコンピューティングリソース（例えば、処理能力、ランダムアクセスメモリなど）を適切に割り振るようにハードウェア１１９を管理する。さらに、以下にさらに説明するように、各ハイパーバイザ１１３は、その対応するＶＳＡＮモジュール１１４を介して、仮想ディスク（またはその一部）のストレージとして使用するためのハードウェア１１９内に配置されたストレージリソース（例えば、ＳＳＤ１１７と磁気ディスク１１８）へのアクセスと、クラスタ１１０内のノード１１１のうちの任意のノード内に存在する任意のＶＭ１１２によりアクセスされ得る他の関連ファイルへのアクセスとを提供する。特定の実施形態では、ヴィエムウェア（ＶＭｗａｒｅ）社（ＶＭｗａｒｅ）のヴィ・スフィア・ハイパーバイザ（ｖＳｐｈｅｒｅ  Ｈｙｐｅｒｖｉｓｏｒ）がハイパーバイザ１１３としてノード１１１上にインストールされ得、ヴィエムウェア（ＶＭｗａｒｅ）のヴィ・センタサーバ（ｖＣｅｎｔｅｒ  Ｓｅｒｖｅｒ）が仮想化管理プラットホーム１０５として使用され得る。
【００１２】
一実施形態では、ＶＳＡＮモジュール１１４はハイパーバイザ１１３内の「ＶＳＡＮ」デバイスドライバとして実装される。このような実施形態では、ＶＳＡＮモジュール１１４は概念的「ＶＳＡＮ」１１５へのアクセスを提供し、ＶＳＡＮ１１５を介しアドミニストレータはオブジェクトストア１１６により支援される多くのトップレベル「デバイス」または名前空間オブジェクトを生成し得る。１つの共通シナリオでは、名前空間オブジェクトの生成中に、アドミニストレータは、名前空間オブジェクトの特定のファイルシステムを規定し得る（したがって、このような名前空間オブジェクトは本明細書では「ファイルシステムオブジェクト」とも呼ばれる）。例えば、一実施形態では、各ノード１１１内の各ハイパーバイザ１１３は、ブート処理中に、ＶＳＡＮモジュール１１４により露出される概念的グローバル名前空間の／ｖｓａｎ／ルートノードを発見し得る。例えば、ＶＳＡＮモジュール１１４により露出されるＡＰＩへアクセスすることにより、ハイパーバイザ１１３は、ＶＳＡＮ１１５内に現在存在するすべてのトップレベルファイルシステムオブジェクト（または他のタイプのトップレベル名前空間オブジェクト）を判断し得る。ＶＭ（または他のクライアント）がファイルシステムオブジェクトのうちの１つにアクセスしようとすると、ハイパーバイザ１１３はファイルシステムオブジェクトを動的に「自動マウント」し得る。ＶＳＡＮ１１５を介しアクセス可能なファイルシステムオブジェクト（例えば、／ｖｓａｎ／ｆｓ＿ｎａｍｅ１など）は、同時アクセス中のホスト間の同時制御を提供するように設計されたヴィエムウェア（ＶＭｗａｒｅ）の分散またはクラスタ化ファイルシステム（ＶＭＦＳ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｆｉｌｅ  Ｓｙｓｔｅｍ））など特定のファイルシステムのセマンティクスに一致するオブジェクトストア１１６内に格納された他のデータ（例えば、ファイルシステムのファイル）に関係するメタデータを格納し得る。次に、このようなＶＭＦＳファイルシステムオブジェクトは、ＶＭＦＳに従ってフォーマット化された物理的ストレージデバイスと同様なやり方で、ハイパーバイザ１１３内のＶＭＦＳファイルシステムドライバと相互作用することができるだろう（例えば、仮想ストレージデバイスのように）。ＶＳＡＮ１１５は複数のファイルシステムオブジェクトを支援するので、ＶＳＡＮ１１５はいかなる特定のクラスタ化ファイルシステムの制限により限定されることなくオブジェクトストア１１６を介しストレージリソースを提供することができる。例えば、多くのクラスタ化ファイルシステム（例えば、ＶＭＦＳなど）はある量のノード１１１を支援するためにだけスケーリングし得る。複数のトップレベルファイルシステムオブジェクト支援を提供することにより、ＶＳＡＮ１１５はこのようなクラスタ化ファイルシステムのスケーラビリティ制限を克服する。
【００１３】
以下の図２の文脈でさらに詳細に説明するように、ファイルシステムオブジェクト自体は、クラスタ１１０内で実行されるＶＭ１１２によりアクセス可能な多くの仮想ディスク記述子ファイル（例えば、ヴィ・スフィア（ｖＳｐｈｅｒｅ）環境内のｖｍｄｋファイル）へのアクセスを提供し得る。これらの仮想ディスク記述子ファイルは、仮想ディスクの実データを含むとともに、オブジェクトストア１１６により別々に支援される仮想ディスク「オブジェクト」に対する参照を含む。仮想ディスクオブジェクト自体は、階層的または「複合」オブジェクトであり得、階層的または「複合」オブジェクトは、以下にさらに説明するように、仮想ディスクを当初生成する際にアドミニストレータにより生成される対応するストレージプロファイルまたはポリシーのストレージ要件（例えば、容量、可用性、ＩＯＰＳなど）を反映する「コンポーネント」オブジェクト（再びオブジェクトストア１１６により別々に支援される）でさらに構成される。以下にさらに論述されるように、各ＶＳＡＮモジュール１１４は（以下にさらに説明する実施形態における、クラスタ監視、メンバーシップおよびディレクトリサービスすなわち「ＣＭＭＤＳ：ｃｌｕｓｔｅｒ  ｍｏｎｉｔｏｒｉｎｇ，ｍｅｍｂｅｒｓｈｉｐ  ａｎｄ  ｄｉｒｅｃｔｏｒｙ  ｓｅｒｖｉｃｅｓ」サブモジュールを介し）、他のノード１１１の他のＶＳＡＮモジュール１１４と通信して、オブジェクトストア１１６内に格納された様々なオブジェクト間の位置、構成、ポリシー、および関係を記述するメタデータを含むメモリ内メタデータデータベース（例えば、各ノード１１１のメモリ内に別々にではあるが同期されたやり方で維持される）を生成および維持する。このメモリ内メタデータデータベースは、例えば第１のアドミニストレータがＶＭの仮想ディスクを生成する場合だけでなく、ＶＭが実行中であり仮想ディスクに対してＩ／Ｏオペレーション（例えば、読み取りまたは書き込み）を行う場合に、ノード１１１上のＶＳＡＮモジュール１１４により利用される。図３の文脈で以下にさらに論述されるように、ＶＳＡＮモジュール１１４は（以下にさらに説明する一実施形態における分散オブジェクトマネジャまたは「ＤＯＭ」サブモジュールを介し）、Ｉ／Ｏオペレーションを受ける仮想ディスクの一部を支援する実際の物理的ローカルストレージを収容するノード（または、ノード群）へＩ／Ｏオペレーション要求を適切に送るために、メモリ内データベース内のメタデータを使用してオブジェクトの階層を横断する。
【００１４】
図２は、一実施形態による、オブジェクトストア１１６内に編成されたオブジェクト（仮想ディスクを表す）の例示的階層構造を示す。上で既に論述されたように、ノード１１１のうちの１つで動作しているＶＭ１１２は、オブジェクトストア１１６内に階層的または複合オブジェクト２００として格納される仮想ディスク上のＩ／Ｏオペレーションを行い得る。ハイパーバイザ１１３は、ＶＳＡＮモジュール１１４を介しＶＳＡＮ１１５のアブストラクションとインターフェースすることにより（例えば、一実施形態において既に論述されたように仮想ディスクオブジェクトに対応するトップレベルファイルシステムオブジェクトを自動マウントすることにより）、ＶＭ１１２に仮想ディスクへのアクセスを提供する。例えば、ＶＳＡＮモジュール１１４は、メモリ内メタデータデータベースのそのローカルコピーに問い合わせすることにより、以下にさらに説明するようにメタデータまたは仮想ディスクの記述子ファイル２１０（例えば、ｖｍｄｋファイルなど）を格納するＶＳＡＮ１１５内に格納された特定のファイルシステムオブジェクト２０５（例えば、一実施形態におけるＶＭＦＳファイルシステムオブジェクト等）を識別することができる。ファイルシステムオブジェクト２０５は仮想化環境を支援する際に仮想マシン構成ファイル（例えば、ヴィ・スフィア（ｖＳｐｈｅｒｅ）環境内のｖｍｘファイル等）などその目的に合致する多種多様な他のメタデータまたは記述子ファイルを格納し得るということを認識すべきである。いくつかの実施形態では、各ファイルシステムオブジェクトは特定のＶＭに対応するそれらの仮想ディスク（例えば、「ＶＭ毎」ファイルシステムオブジェクト）だけを支援するように構成され得る。
【００１５】
記述子ファイル２１０は、オブジェクトストア１１６内に別々に格納されるとともに仮想ディスクを概念的に表す（したがって本明細書では時に仮想ディスクオブジェクトとも呼ばれる）複合オブジェクト２００に対する参照を含む。複合オブジェクト２００は、仮想ディスクを生成する際にアドミニストレータにより生成された当該ストレージプロファイルまたはポリシー内のストレージ要件（例えば、容量、可用性、ＩＯＰなど）またはサービスレベルアグリーメント（ＳＬＡ：ｓｅｒｖｉｃｅ  ｌｅｖｅｌ  ａｇｒｅｅｍｅｎｔ）に適合する仮想ディスクのストレージ編成または構成（本明細書では時に仮想ディスク「ブループリント」と呼ばれる）について記述するメタデータを格納する。例えば、図２の実施形態では、複合オブジェクト２００は、仮想ディスクの２つのミラー・コピー（例えば、ミラー）が各々さらにＲＡＩＤ  ０構成においてストライプ化されるＲＡＩＤ  １構成について記述する仮想ディスクブループリント２１５を含む。したがって、複合オブジェクト２２５は、仮想ディスクミラーの各々における各ストライプ（例えば、仮想ディスクのデータパーティーション）に対応する多数の「リーフ（ｌｅａｆ）」または「コンポーネント」オブジェクト２２０ｘに対する参照を含み得る。各コンポーネントオブジェクト２２０（例えば、各ストライプ）のメモリ内メタデータデータベースにおいてＶＳＡＮモジュール１１４によりアクセス可能なメタデータは、（このような物理資源内のストライプの位置だけでなく）ストライプを実際に格納する物理的ストレージリソース（例えば、磁気ディスク１１８など）を収容するクラスタ１１０内の特定のノード１１１ｘに対するマッピングを提供するか、またはそうでなければ同特定のノード１１１ｘを識別する。
【００１６】
図３は、一実施形態によるＶＳＡＮモジュール１１４の構成要素を示す。先に説明したように、いくつかの実施形態では、ＶＳＡＮモジュール１１４は、ＶＳＡＮ１１５のアブストラクションをハイパーバイザ１１３へ露出するデバイスドライバとして実行し得る。ＶＳＡＮモジュール１１４の様々なサブモジュールは、異なる責務を担い、このような責務に応じてユーザ空間３１５内またはカーネル空間３２０内のいずれかで動作し得る。図３の実施形態に描写するように、ＶＳＡＮモジュール１１４は、ユーザ空間３１５において動作するクラスタレベルオブジェクト管理（ＣＬＯＭ：ｃｌｕｓｔｅｒ  ｌｅｖｅｌ  ｏｂｊｅｃｔ  ｍａｎａｇｅｍｅｎｔ）サブモジュール３２５を含む。ＣＬＯＭサブモジュール３２５は、アドミニストレータによる仮想ディスクの生成中に仮想ディスクブループリントを生成し、このような仮想ディスクブループリントのために生成されたオブジェクトがアドミニストレータにより設定されたストレージプロファイルまたはポリシー要件を満足するように構成されることを保証する。オブジェクト生成（例えば、仮想ディスクの）中にアクセスされることに加えて、ＣＬＯＭサブモジュール３２５はまた、（例えば、仮想ディスクブループリントを、またはオブジェクトストア１１６内の実際の物理的ストレージデバイスへの仮想ディスクブループリントのマッピングを動的に修正するか、またはそうでなければ更新するために）オブジェクトに関係するストレージプロファイルまたはポリシーに対しアドミニストレータにより変更がなされるか、またはクラスタまたは作業負荷に対する変更が現在のストレージプロファイルまたはポリシーに準拠しないオブジェクトを生じると、アクセスされ得る。
【００１７】
一実施形態では、アドミニストレータが仮想ディスクオブジェクト２００などの複合オブジェクトのストレージプロファイルまたはポリシーを生成すれば、ＣＬＯＭサブモジュール３２５は、多種多様な発見的方法および分散アルゴリズムのうちの少なくとも一方を適用して、ストレージポリシーを満足するか、またはそうでなければストレージポリシーに適するクラスタ１１０内の構成（例えば、ミラーリングにより所望の冗長性を実現しストライピングによりアクセス性能を達成するＲＡＩＤ構成：負荷バランスなどを達成するためにどのノードのローカルストレージが仮想ディスクのいくつかの部分／パーティション／ストライプを格納すべきか）を記述する仮想ディスクブループリント２１５を生成する。例えば、ＣＬＯＭサブモジュール３２５は、一実施形態では、仮想ディスクがアドミニストレータにより最初に生成されると、図２における仮想ディスクオブジェクト２００のＲＡＩＤ  １／ＲＡＩＤ  ０構成について記述するブループリント２１５を生成する責任を負う。既に論述されたように、ストレージポリシーは、容量、ＩＯＰＳ、可用性および信頼性の要件を規定し得る。ストレージポリシーはまた、作業負荷特徴（例えば、ランダムまたはシーケンシャルアクセス、Ｉ／Ｏ要求サイズ、キャッシュサイズ、予想キャッシュヒット率など）を規定し得る。加えて、アドミニストレータはまた、いくつかのノード１１１（またはノード１１１中に収容されたローカルディスク）を優先的に使用するためにＶＳＡＮモジュール１１４に対する親和度を規定し得る。例えば、ＶＭの新しい仮想ディスクを設ける際、アドミニストレータは、仮想ディスクは４００ＧＢの予備容量、１５０読み出しＩＯＰＳの留保、３００書き込みＩＯＰＳの留保および９９．９９％の所望可用性を有するということを規定する仮想ディスクのストレージポリシーまたはプロファイルを生成し得る。生成されたストレージポリシーを受信すると、ＣＬＯＭサブモジュール３２５は、生成されたストレージポリシーに適する複合オブジェクト（例えば、仮想ディスクオブジェクト）の仮想ディスクブループリントを生成するためにそのＶＳＡＮモジュール１１４により維持されるメモリ内メタデータデータベースを調べてクラスタ１１０の現在状態を判断する。以下にさらに論述されるように、このとき、ＣＬＯＭサブモジュール３２５は、その対応する分散オブジェクトマネジャ（ＤＯＭ：ｄｉｓｔｒｉｂｕｔｅｄ  ｏｂｊｅｃｔ  ｍａｎａｇｅｒ）サブモジュール３４０にブループリントを伝達し、分散オブジェクトマネジャ（ＤＯＭ）サブモジュール３４０は、オブジェクトストア１１６と相互作用して、例えばクラスタ１１０の様々なノード１１１内の物理ストレージ位置へ複合オブジェクトのコンポーネントオブジェクト（例えば、ストライプ）を割り付けるか、またはそうでなければマッピングすることによりブループリントを実施する。
【００１８】
ＣＬＯＭサブモジュール３２５とＤＯＭサブモジュール３４０に加えて、図３でさらに描写するように、ＶＳＡＮモジュール１１４はまた、クラスタ１１０の状態に関する情報をＶＳＡＮモジュール１１４の他のサブモジュールに提供するために、既に論述されたメモリ内メタデータデータベースを維持するとともに、クラスタ１１０内の各ノード１１１の状態、アクセス可能性および可視性を監視することによりクラスタ１１０の全般的「健康」を追跡するクラスタ監視、メンバーシップおよびディレクトリサービス（ＣＭＭＤＳ：ｃｌｕｓｔｅｒ  ｍｏｎｉｔｏｒｉｎｇ，ｍｅｍｂｅｒｓｈｉｐ  ａｎｄ  ｄｉｒｅｃｔｏｒｙ  ｓｅｒｖｉｃｅｓ）サブモジュール３３５を含み得る。メモリ内メタデータデータベースは、様々なノード１１１、ノード１１１中に収容されたノード１１１内のストレージリソース（ＳＳＤ、磁気ディスクなど）およびその特性／能力、ノード１１１の現在状態およびそれらの対応するストレージリソース、ノード１１１間のネッワーク経路などのＶＳＡＮ環境の物理インベントリを維持するディレクトリサービスとして働く。既に論述されたように、物理インベントリを維持することに加えて、メモリ内メタデータデータベースは、さらに、オブジェクトストア１１６に格納されたオブジェクトのメタデータのカタログ（例えば、どんな複合およびコンポーネントオブジェクトが存在するか、どんなコンポーネントオブジェクトがどんな複合オブジェクトに属するか、どのノードがどのオブジェクトへのアクセスを制御する「コーディネータ」または「オーナ」として働くか、オブジェクト毎のサービス品質要件、オブジェクト構成、物理ストレージ位置へのオブジェクトのマッピングなど）を提供する。既に論述されたように、ＶＳＡＮモジュール１１４内の他のサブモジュールは、更新のためにＣＭＭＤＳサブモジュール３３５（図３では関連線により表される）へアクセスして、クラスタトポロジーとオブジェクト構成の変更を学習する。例えば、既に論述されたように、仮想ディスク生成中に、ＣＬＯＭサブモジュール３２５は、仮想ディスクブループリントを生成するためにメモリ内メタデータデータベースへアクセスする。ＤＯＭサブモジュール３４０は、実行中ＶＭ１１２からのＩ／Ｏオペレーションに対処するために、メモリ内メタデータデータベースへアクセスして、対応する複合オブジェクト（例えば、仮想ディスクオブジェクト）のコンポーネントオブジェクト（例えば、ストライプ）を格納するノード１１１と、Ｉ／Ｏオペレーションに応じるためにそれらのノードが到達可能な経路とを判定する。
【００１９】
前に論述したように、ＤＯＭサブモジュール３４０は、オブジェクト生成中だけでなくＩ／Ｏオペレーションの対処中に、ＤＯＭサブモジュール３４０が実行される特定のノード１１１のローカルストレージ内に格納されたオブジェクトストア１１６内のそれらのコンポーネントオブジェクトおよびそのノード１１１が「コーディネータ」または「オーナ」として現在指定されているいくつかの他の複合オブジェクトへのアクセスを制御し、これらのオペレーションに対処する。例えば、ＶＭからのＩ／Ｏオペレーションに対処する際、いくつかの実施形態における複合オブジェクトの階層的性質に起因して、ターゲット複合オブジェクト（例えば、Ｉ／Ｏオペレーションを受ける仮想ディスクオブジェクト）のコーディネータとして働くＤＯＭサブモジュール３４０は、第２のノード１１１（またはノード群）内の異なるＤＯＭサブモジュール３４０とネットワークを介してさらに通信する必要があるかもしれない。第２のノード１１１（またはノード群）は、第２のノード１１１のローカルストレージ内に格納され、かつＩ／Ｏオペレーションを受ける仮想ディスクの一部分である仮想ディスクオブジェクトの特定のコンポーネントオブジェクト（例えば、ストライプなど）のコーディネータとして働く。Ｉ／Ｏオペレーションを発行するＶＭが、仮想ディスクオブジェクトのコーディネータとはまた異なるノード１１１上に存在すれば、ＶＭを動作させるノードのＤＯＭサブモジュール３４０はまた、仮想ディスクオブジェクトのコーディネータのＤＯＭサブモジュール３４０とネットワークを介して通信する必要があるだろう。いくつかの実施形態では、Ｉ／Ｏオペレーションを発行するＶＭが、Ｉ／Ｏオペレーションを受ける仮想ディスクオブジェクトのコーディネータと異なるノード上に存在すれば、２つのノードの２つのＤＯＭサブモジュール３４０は、ＶＭを動作させるノードへ仮想ディスクオブジェクトのコーディネータの役割を変更するために互いに通信し得る（例えば、これにより、ＶＭを動作させるノードと仮想ディスクオブジェクトのコーディネータとして働くノードとの間のＩ／Ｏオペレーションを調整するために必要とされるネットワーク通信の量が低減される）。
【００２０】
ＤＯＭサブモジュール３４０はまた同等に、オブジェクト生成中に互いに通信し合う。例えば、仮想ディスクの生成中にＣＬＯＭモジュール３２５により生成された仮想ディスクブループリントは、どのノード１１１がその対応するコンポーネントオブジェクト（ストライプなど）としてだけでなく仮想ディスクオブジェクトのコーディネータとして働くべきかを指定する情報を含み得る。このような指定ノードのＤＯＭサブモジュール３４０の各々には、オブジェクトに関するメタデータによりメモリ内メタデータデータベースを更新するために、各々のオブジェクトを生成し、このようなオブジェクトへローカルストレージを（必要に応じ）割り振り、それらのオブジェクトをそれらの対応するＣＭＭＤＳサブモジュール３３５へ通知する要求が発行される（例えば、実施形態に依存して、仮想ディスクオブジェクトのコーディネータとして指定されたＤＯＭサブモジュール３４０により、または仮想ディスクブループリントなどを生成するノードのＤＯＭサブモジュール３４０により）。このような要求を行うために、ＤＯＭサブモジュール３４０は、そのノード１１１のローカルＳＳＤおよび磁気ディスクとの通信を実際に推進するＶＳＡＮモジュール１１４内のコンポーネントとして働くログ構造化オブジェクトマネジャ（ＬＳＯＭ：ｌｏｇ  ｓｔｒｕｃｔｕｒｅｄ  ｏｂｊｅｃｔ  ｍａｎａｇｅｒ）サブモジュール３５０と相互作用する。コンポーネントオブジェクトのローカルストレージを割り振る（およびそのノードがコーディネータして働く複合オブジェクトのこのようなポリシーおよび構成などの他のメタデータを格納する）ことに加えて、ＬＳＯＭサブモジュール３５０は追加的に、そのノード１１１のローカルストレージに対するＩ／Ｏオペレーションのフローを監視する。
【００２１】
図３はまた、論理的エンドポイント（例えば、ノード、オブジェクトなど）間に任意のサイズのデータグラムを提供する高信頼データグラムトランスポート（ＲＤＴ：ｒｅｌｉａｂｌｅ  ｄａｔａｇｒａｍ  ｔｒａｎｓｐｏｒｔ）サブモジュール３４５を描写する。同エンドポイントは場合によっては複数の経路にわたり得る。一実施形態では、下位トランスポートはＴＣＰである。代替的に、ＲＤＭＡなどの他のトランスポートが使用され得る。ＲＤＴサブモジュール３４５は、例えば上で既に論述されたようにオブジェクトを生成するか、またはＩ／Ｏオペレーションに対処するためにＤＯＭサブモジュール３４０が互いに通信する場合に使用される。いくつかの実施形態では、ＲＤＴモジュール３４５は、ＣＭＭＤＳモジュール３３５と相互作用することにより、メモリ内メタデータデータベース内に最新の位置情報を維持し、リンク健康状態に基づき接続を生成、除去、または再確立するために、論理的エンドポイントのアドレスを動的に決定する。例えば、ＣＭＭＤＳモジュール３３５がリンクを不健康であるとして報告すれば、ＲＤＴサブモジュール３４５は、より良い状態のリンクを好み、この接続を取り止め得る。
【００２２】
図４は、一実施形態による、規定のストレージポリシーに基づき仮想ディスクオブジェクトを生成するための方法フローチャートを示す。例えば、工程４００では、アドミニストレータは、容量、可用性およびＩＯＰＳ要件（例えば、規定ストレージポリシー）を有する仮想ディスクを生成するために仮想管理プラットホーム１０５のユーザインターフェースと相互作用し得る。一実施形態では、次に、仮想管理プラットホーム１０５は、工程４０５において、「マスタ」ノード１１１に仮想ディスクのオブジェクトを生成するように要求し得る。工程４１０では、このようなマスタノード１１１は、ＶＳＡＮモジュール内のそのＣＬＯＭサブモジュール３２５を介し仮想ディスクブループリントを生成し得る。既に論述したように、ＣＬＯＭサブモジュール３２５は、ＣＭＭＤＳサブモジュール３３５のメモリ内メタデータデータベースを調べることにより判断されたクラスタ１１０の状態に基づき、仮想ディスクオブジェクト（例えば、複合オブジェクト）の生成のための仮想ディスクブループリントを生成する。仮想ディスクブループリントは、仮想ディスクオブジェクトのコーディネータまたはオーナとして働くべき特定のノードを識別し得る。工程４１５では、マスタノード１１１のＤＯＭサブモジュール３４０は、識別されたノードのＤＯＭサブモジュール３４０に仮想ディスクオブジェクトを生成するように要求し得る。工程４２０では、識別されたノードのＤＯＭサブモジュール３４０は、例えばその対応するＬＳＯＭサブモジュール３５０と通信することにより要求を受信し、仮想ディスクオブジェクトを生成し、仮想ディスクオブジェクトについて記述するメタデータをそのローカルストレージ内に持続的に格納する。工程４２５では、ＤＯＭサブモジュール３４０は、仮想ディスクオブジェクトブループリントに基づきクラスタ１１０内のそれらの他のノード（仮想ディスクブループリント内の任意のコンポーネントオブジェクトのコーディネータまたはオーナとして働くように指定された）を識別する。ＤＯＭサブモジュール３４０は、コンポーネントオブジェクトのコーディネータとして働く他のノードのＤＯＭサブモジュール３４０と通信し（例えば、そのＲＤＴサブモジュール３４５を使用することにより）、このようなコンポーネントオブジェクトを支援するデータをそれらのローカルストレージ内に格納する。仮想ディスクオブジェクトのコーディネータのＤＯＭサブモジュール３４０から各々のコンポーネントオブジェクトを生成する要求を受信すると、ＤＯＭサブモジュール３４０は、工程４３０において、コンポーネントオブジェクト（およびその関連メタデータ）のローカルストレージを割り振るために各々のＬＳＯＭモジュール３５０と通信する。このようなコンポーネントオブジェクトが生成されると、工程４３５において、それらのＤＯＭサブモジュール３４０はコンポーネントの生成をそのＣＭＭＤＳサブモジュール３３５のメモリ内メタデータデータベースへ通知する。工程４４０では、仮想ディスクオブジェクトのコーディネータのＤＯＭサブモジュール３４０はまた、メモリ内メタデータデータベースを更新するためにそのＣＭＭＤＳサブモジュール３３５にその生成を通知し、最終的に確認をアドミニストレータへ送信する（例えば、仮想管理プラットホーム１０５へのマスタノード通信を介し）。一実施形態では、仮想ディスクオブジェクトのコーディネータのＤＯＭサブモジュール３４０および仮想ディスクオブジェクトの各コンポーネントオブジェクトのコーディネータのＤＯＭサブモジュール３４０は、さらに、または仮想ディスクオブジェクトまたは関連コンポーネントオブジェクトに影響を与えるだろう（例えば、ノードが消える、ローカルディスクが消えるなど）クラスタ１１０の状態に対する関連事象または変更（ＣＭＭＤＳサブモジュール３３５により連続的に監視される）について通知される「コールバック」を定期的に読むか、またはそれらの対応するＣＭＭＤＳサブモジュール３３５に登録する。例えば、仮想ディスクオブジェクトのコーディネータのＣＭＭＤＳサブモジュール３３５が「仮想ディスクオブジェクトのコンポーネントオブジェクトのうちの１つのコーディネータとして働く特定のノードにもはや到達可能ではない」ということを発見すれば、ＣＭＭＤＳサブモジュール３３５はコールバックメカニズムを介しその対応するＤＯＭサブモジュール３４０に通知する。同様に、仮想ディスクオブジェクトのコンポーネントオブジェクトのコーディネータのＣＭＭＤＳサブモジュール３３５が、「仮想ディスクオブジェクト（または仮想ディスクオブジェクトの任意の他のコンポーネントオブジェクト）のコーディネータとして働く特定のノードにもはや到達可能ではない」ということを発見すれば、このようなＣＭＭＤＳサブモジュール３３５は同様に、コールバックメカニズムを介しその対応するＤＯＭサブモジュール３４０に通知する。このようなコールバックメカニズムは、クラスタ１１０内のノードのＤＯＭサブモジュール３４０が、行動を取ることができるように、以下にさらに説明するように、例えばノード障害または任意の他の事象により生成され得るクラスタ１１０のいくつかのパーティションにおいていくつかのオブジェクトがアクセス可能または利用可能となるようにする。
【００２３】
いくつかの実施形態では、工程４３５、４４０においてコーディネータノードにより行われる通知（およびメモリ内メタデータのそれらのローカルバージョンに対してコーディネータノードによりなされる任意の他の更新）は、クラスタ１１０の「リーダ（ｌｅａｄｅｒ）」または「マスタ」ノード（いくつかの実施形態において先に述べた同じマスタノードであり得る）と通信することにより実施される。リーダノードは、メモリ内メタデータデータベースの真のバージョンを維持し、様々なＶＳＡＮモジュール１１４すべてからのこのような通知された更新を受信し、このような更新に全順序を課し、次に、これらの更新をクラスタ１１０内のノードのＶＳＡＮモジュール１１４（更新自体を通知したノードを含む）へ伝達する。ＶＳＡＮモジュール１１４は、リーダノードにより課された順序でメモリ内メタデータデータベースのそれらのローカルバージョンを常時かつ確実に更新することができる。一実施形態では、各ＶＳＡＮモジュール１１４のＣＭＭＤＳサブモジュール３３５はクラスタ１１０内のリーダノードを選ぶためのプロトコルを含む。クラスタ１１０が生成されると、クラスタ１１０内の各ノードのＣＭＭＤＳサブモジュール３３５はリーダノードを選ぶために互いに通信する。クラスタ内の様々なノードへ更新を伝達することに加えて、いくつかの実施形態では、リーダノードはさらに、新しいノード同士を同期させるとともにメモリ内メタデータデータベースを介しノード到達可能性およびクラスタ情報を発行する責任を負い得る。選ばれると、リーダノードは、現在のリーダノードが失敗した場合にリーダノードになるバックアップリーダノードを指定する。一実施形態では、リーダノードにより受信された各更新は最初に、クラスタ内のノードの残りへ送信される前にバックアップリーダノードと同期される。
【００２４】
クラスタ１１０が分断されると、例えば、ノードまたはネットワーク故障に、またはオフラインとなるノードに起因して、各パーティションのノードは同様に、例えばこのようなパーティションがリーダノードもバックアップリーダノードも含まなければパーティションの新しいリーダノードおよびバックアップリーダノードのうちの少なくとも一方を選ぶ。前に論述したように、ＣＭＭＤＳサブモジュール３３５はクラスタ１１０内の各ノードの状態、アクセス可能性および可視性を監視するので、ノード１１１のＣＭＭＤＳサブモジュール３３５は、１つまたは複数のパーティションをクラスタ１１０内に出現させるノードまたはネットワーク故障を集合的に認識し、パーティションの新しいリーダノードおよびバックアップリーダノードのうちの少なくとも一方を既に論述したように適切に選ぶ。ＣＭＭＤＳサブモジュール３３５は、認識されたパーティションが非重複メンバーシップを有するようにノードが他のノードと通信し得る場合に限り、このようなノードがパーティションに属する、すなわちパーティションのメンバーであると判断し得る（および逆もまた同様）。
【００２５】
図５は、一実施形態による、複合オブジェクトがノードのクラスタのパーティションからアクセス可能かどうかを判断するためのフローチャートを示す。工程５００において、１つまたは複数のパーティションがノード障害または他の事象（例えば、再構成など）に起因してクラスタ１１０内で認識されれば、工程５０５において、このようなパーティションのリーダノードが、例えば図５Ａ）で説明したように、未だ存在していなければ選ばれる。工程５１０では、分断に起因してもはやアクセス可能でない他のノード（例えば、故障したノードまたは別のパーティション内に存在するノード等）により調整された関連オブジェクト（例えば、複合オブジェクトの他のコンポーネントオブジェクトまたは複合オブジェクト自体）を有する複合またはコンポーネントオブジェクトのコーディネータまたはオーナとして働くパーティション内の各ノードは、このような他の関連オブジェクトへのアクセスの欠如について通知される。例えば、既に論述されたコールバックメカニズムを利用する一実施形態では、このようなノードのＣＭＭＤＳサブモジュール３３５は、そのクラスタ監視活動を通じて、他の関連オブジェクトへのアクセスの欠如を生じるクラスタ１１０の状態の変化（例えば、分断）を認識し、ノードの対応するＤＯＭサブモジュール３４０に通知する。工程５１５では、複合オブジェクトのコーディネータがパーティションからアクセス可能でなければ、工程５２０において、パーティション内の複合オブジェクトの各々のコンポーネントオブジェクトの各コーディネータはパーティションの複合オブジェクトのコーディネータとして自身を選ぼうとする。工程５２５では、コンポーネントオブジェクトのコーディネータのうちの１つだけが、パーティション内の複合オブジェクトのコーディネータとして自身を首尾よく選ぶ。工程５３０では、複合オブジェクトのコーディネータとして働くパーティション内のノードのＣＭＭＤＳサブモジュール３３５（工程５２５において既に存在していたか、または選ばれた）は、コンポーネントオブジェクトの定足数または大多数がパーティションのメンバーであるノード内に存在する複合オブジェクトを構成するかどうかを判断する。一実施形態では、複合オブジェクトがその生成中に偶数のコンポーネントオブジェクトを有すれば、複合オブジェクトのオーナノードは、クラスタ１１０を分断する故障事象が発生した場合に特定のパーティションの定足数を提供するために、複合オブジェクトの生成中に奇数の「ウイットネス」コンポーネントオブジェクト（コンポーネントオブジェクトが存在しない１つまたは複数のノードに通常は属する）を追加し得る。複合オブジェクトのコーディネータが「複合オブジェクトを構成するコンポーネントオブジェクトの定足数または大多数がパーティションのノード内に格納される」と判断すれば、コーディネータノードは、工程５３５において、メタデータまたは構成オペレーション（例えば、そのストレージプロファイルまたはポリシーを修正する、そのブループリント２１５を修正する等）が複合オブジェクトに対し行われることをオーナノードが許可するように（例えば、すべてのこのようなオペレーションは通常、「構成」オペレーションまたは「メタデータ」オペレーションのいずれかと呼ばれる）、複合オブジェクトがパーティション内で「アクセス可能である」ということを示すためにそのメモリ内メタデータデータベースを更新する。このような更新は、既に論述したようにリーダノードによりパーティション内の他のノードへ伝達されるであろう。工程５４０において、コーディネータノードがさらに、「パーティション内のコンポーネントオブジェクトの定足数がまた、複合オブジェクトのデータの全コピーを含む」と判断すれば、工程５４５では、オーナノードはさらに、Ｉ／Ｏオペレーションが複合オブジェクトに対し行われることをオーナノードがまた許可するように、複合オブジェクトがパーティション内で「利用可能である」ということを示すためにそのメモリ内メタデータデータベースを更新する。
【００２６】
工程５３０において、複合オブジェクトのコーディネータノードが、パーティション内のコンポーネントオブジェクトの定足数（例えば、大多数）を有していないと判断すれば、工程５５０において、複合オブジェクトのコーディネータノードは、そのメモリ内メタデータデータベース内で複合オブジェクトがパーティションからアクセス可能でない（パーティション内でリーダノードにより他のノードの他のメモリ内メタデータデータベースへ伝達されたので）ということを示す。工程５５５において、複合オブジェクトのいかなるコンポーネントオブジェクトもパーティション内に存在しなければ、工程５６０では、コーディネータノードはまた、このようなコンポーネントオブジェクトが「劣化した」、「アクセス不能である」、またはそうでなければパーティションからアクセスされ得ないということを示すために、そのメモリ内メタデータデータベース（およびリーダノードを介しパーティション内の他のノードのローカルメモリ内メタデータデータベース）を更新する。
【００２７】
オブジェクトストア１１６内の複合オブジェクト毎に、１つの特定のパーティションの複合オブジェクトのオーナまたはコーディネータとして働く当該パーティション内の最大で１つのノードが「複合オブジェクトがアクセス可能である」ということを検証するということを認識すべきである。前述の分断技術を実施する実施形態は、分断を生じる故障をクラスタ１１０が経験できるようにするとともに、並列パーティションが共存することと、ノード上で実行されるＶＭなどのクライアントからのＩ／Ｏオペレーションを場合によっては支援することとを許容するということをさらに認識すべきである。例えば、複合オブジェクト２００を構成するコンポーネントオブジェクトの定足数または大多数がまた、同じ特定のパーティション内に存在し、また複合オブジェクトのデータの全コピーを含む限り、同じパーティション内のノードにおいて実行されるＶＭなどのクライアントは、たとえクラスタ１１０が分断に悩まされてきたとしても、複合オブジェクト２００（例えば、仮想ディスクオブジェクト）に対しＩ／Ｏオペレーションを行い得る。
【００２８】
図６は、多数のパーティションを単一クラスタへ戻す調整のフローチャートを示す。パーティションが単一クラスタ１１０にマージされ戻されるようにノード障害、ネットワーク故障または他の故障事象が解決される（または、ノードがオンラインに戻る）と、工程６００では、すべてのパーティションのリーダおよびバックアップリーダノードがそれらの役割を放棄するか、または単一のリーダおよびバックアップリーダノードへ譲る。例えば、一実施形態では、最大ノードメンバーシップを有するパーティションのリーダおよびバックアップリーダノードはそれらの役割を保持し、残りのパーティションのすべてのリーダおよびバックアップリーダノードは各々の役割を放棄する。工程６０５では、そのリーダノードがその指導的役割を放棄したパーティション内に存在した各ノードは、ノードがこのようなオブジェクトのオーナノードとして働いたそのメモリ内メタデータデータベースに対してなされたオブジェクト（複合またはコンポーネントオブジェクト）に対するいかなる更新（例えば、メタデータオペレーションなど）もキューまたはログ（または類似データ構造）内に格納する。例えば、ノードが、そのパーティション内に存在する間に新しいコンポーネントオブジェクトを複合オブジェクトへ追加した複合オブジェクトのコーディネータノードであれば、同ノードは、新しいコンポーネントオブジェクトの追加に関係するメタデータオペレーションをそのキューへ追加するであろう。同様に、新たに生成されたコンポーネントオブジェクトのコーディネータノードだったノードは同様に、新しいコンポーネントオブジェクトに関係する更新をそのキュー内に追加するだろう。
【００２９】
一実施形態では、ＣＭＭＤＳサブモジュール３３５は、このようなオブジェクトに対してなされたいかなる更新（例えば、メタデータおよびＩ／Ｏオペレーション等）も追跡するためにメモリ内メタデータデータベース内にオブジェクト毎の構成順位識別子または番号を維持する。例えば、仮想ディスクブループリント２１５に対する変更などのメタデータオペレーションが複合オブジェクト２００に対しなされると、複合オブジェクト２００のオーナノードは、複合オブジェクト２００に対応する構成順位番号をインクリメントし得る（これは、次に、既に論述したように、クラスタ１１０または場合によってはパーティション内のノードの残りへ例えば２相コミットプロトコルを使用することによりリーダノードにより伝達され得る）。既に論述したように、クラスタ１１０の分断が発生した場合には１つのパーティションの１つのオーナノードだけが複合オブジェクトへ「アクセス」することができ、したがって複合オブジェクトの構成順位番号をインクリメントすることができ、これにより可能な分断脳状況を回避するということを認識すべきである。
【００３０】
工程６１０では、そのリーダノードがその指導的役割を放棄したパーティション内に存在した各ノードは次に、そのローカルメモリ内メタデータデータベースを削除する。メモリ内メタデータデータベースの削除は、ノードがパーティション内に存在する間に複合オブジェクトのために働いてきたであろういかなる以前のオーナーシップ役割も効果的に除去する。工程６１５では、このような各ノードは、存続リーダノードのメモリ内メタデータデータベースを受信する。工程６２０では、このような各ノードは次に、そのキュー内のいかなる更新も、存続メモリ内メタデータデータベース中へ伝達およびコミット（例えば、２相コミット等）するために存続リーダノードへ送出または「再生」する。工程６２５では、伝搬のための様々なノードからのこのような更新をすべて受信するとリーダノードは、このような更新に対応するオブジェクト毎に、「更新が更新に関連付けられたオブジェクトの構成順位番号に基づき昇順でクラスタ内のすべてのノードによりコミットされる」ということを送信および要求する。このようにして、更新は正しい順序でメモリ内メタデータデータベースへコミットされる。
【００３１】
図７は、一実施形態による、ＶＭから発するＩ／Ｏオペレーションの対処を示す。特定のノード上で実行されるＶＭがその仮想ディスクに対してＩ／Ｏオペレーションを行うと、ＶＭのゲストオペレーティングシステムは、工程７００において、その仮想ディスクを対象としたＩ／Ｏオペレーション要求を発行する（ゲストオペレーティングシステムのデバイスドライバを介し）。同Ｉ／Ｏオペレーション要求は、工程７０５において、ハイパーバイザ１１３により受信され、最終的にはハイパーバイザ１１３内のＩ／Ｏスタックの様々な層を介してＶＳＡＮモジュール１１４のＤＯＭサブモジュール３４０へ転送および変換される。工程７１０では、ＤＯＭサブモジュール３４０により受信されたＩ／Ｏ要求は、ＣＭＭＤＳサブモジュール３３５のメモリ内メタデータデータベースへアクセスすることにより仮想ディスクオブジェクトのコーディネータノードを識別するためにＤＯＭサブモジュール３４０が使用する仮想ディスクを表すオブジェクトの一意的識別子を含む（いくつかの実施形態では、一意的識別子へのコーディネータノードの識別子のマッピングを参照するためにメモリ内メタデータデータベースへアクセスすることは、仮想ディスクオブジェクトが当初アクセスされた場合だけ発生し、このようなマッピングは後の参照が必要とされないように将来のＩ／Ｏオペレーションにわたって持続する）。仮想ディスクオブジェクトのコーディネータノードを識別すると、ＶＭを動作させるノードのＤＯＭサブモジュール３４０は、工程７１５においてＩ／Ｏオペレーションを行うこと要求するためにコーディネータノードのＤＯＭサブモジュール３４０と通信する（例えば、そのＲＤＴサブモジュール３４５を使用することにより）。既に論述したように、いくつかの実施形態では、ＶＭを動作させるノードと仮想ディスクオブジェクトのコーディネータとして働くノードが異なれば、２つのＤＯＭサブモジュールは、仮想ディスクオブジェクトのコーディネータの役割を実行中ＶＭのノードとなるように更新するように通信する。コーディネータのＩ／Ｏ要求を受信すると、工程７２０では、そのＤＯＭサブモジュールは、Ｉ／Ｏオペレーションを受ける仮想ディスクオブジェクトの特定のコンポーネントオブジェクト（例えば、ストライプ）のそれらのコーディネータノードを識別する（例えば、いくつかの実施形態では、メモリ内メタデータデータベースを再び参照することにより）。例えば、Ｉ／ＯオペレーションがＲＡＩＤ  ０構成の複数のストライプ（例えば、複数のコンポーネントオブジェクト）にまたがれば、ＤＯＭサブモジュール３４０は、Ｉ／Ｏオペレーションを分割し、２つのストライプに対応する関連コンポーネントオブジェクトの各々のコーディネイトノードへ当該Ｉ／Ｏ要求を適切に送信し得る。工程７２５では、仮想ディスクオブジェクトのコーディネータノードのＤＯＭサブモジュールは、識別されたコンポーネントオブジェクトのコーディネータノードのＤＯＭサブモジュールがＩ／Ｏオペレーション要求を行うことを要求し、工程７３０では、識別されたコンポーネントオブジェクトのこのようなコーディネータノードのＤＯＭサブモジュールは、コンポーネントオブジェクトが���納されるローカルストレージリソースのＩ／Ｏオペレーションを行うためにそれらの対応するＬＳＯＭサブモジュールと相互作用する。
【００３２】
有利には、本開示の実施形態はオブジェクト毎ベースで分散システム内のノードクラスタの分断耐性を提供する。ソフトウェアベースＶＳＡＮでは、コンポーネントオブジェクトの定足数が最大で１つのパーティション内に存在するということを保証することにより、クラスタパーティションは、「分断脳」状況がクラスタ内に発生したとしてもクラスタ内の複合オブジェクトが一定レベルの可用性で依然として動作するように共存し得る。これまでの実施形態はハイパーバイザ内のＶＳＡＮモジュール１１４について説明したが、代替実施形態は非仮想化従来型オペレーティングシステム内など他の文脈において仮想機器内（例えば、仮想マシンの内部）などで実行されるＶＳＡＮモジュール１１４の機能を実現し得るということを認識すべきである。同様に、これまでの実施形態のいくつかはオブジェクトストア１１６内のファイルシステムオブジェクトおよび仮想ディスクオブジェクトのストレージに焦点を合わせたが、他の多くのタイプのオブジェクトがオブジェクトストア１１６内で格納され得るということを認識すべきである。例えば、名前空間またはファイルシステムオブジェクトおよび仮想ディスクオブジェクトに加えて、いくつかの実施形態はさらに、オブジェクトストア１１６内にＶＭスワップエリアオブジェクト、メモリチェックポイントオブジェクトおよび任意の他のオブジェクトを格納し得る。上述のいくつかの実施形態では、メモリ内メタデータデータベースはオブジェクト生成中とＩ／Ｏオペレーション中の両方で利用される。別の実施形態では、複数のメタデータデータベースが利用され得る。例えば、１つの別の実施形態では、例えばオブジェクトの各コーディネータノードは、Ｉ／Ｏオペレーション中に使用されるがクラスタ１１０内のノードを介して必ずしも分散されないオブジェクトのそれ自身のメモリ内状態を維持する（例えば、未マーシャル化（ｕｎｍａｒｓｈａｌｌｅｄ）ＲＡＩＤツリーを有するデータ構造として）。同様に、いくつかの実施形態では、メモリ内メタデータデータベース（例えば、オブジェクトメタデータ情報だけでなくホスト、ディスク情報も含む）は、それらのコーディネータノードにより、オブジェクトのために格納された一貫性データから再生成され得るということを認識すべきである。
【００３３】
一般的に言えば、本明細書に記載の様々な実施形態は、コンピュータシステム内に格納されたデータに関わる様々なコンピュータ実施型オペレーションを採用し得る。例えば、これらのオペレーションは物理量の物理マニピュレーションを必要とし得る。通常、必ずしもではないが、これらの量は電気的または磁気的信号の形式を取り得、これらまたはその代表値は格納され、転送され、合成され、比較され、またはそうでなければマニピュレートされることができる。さらに、このようなマニピュレーションは、製造、識別、判断、または比較などの観点でしばしば参照される。１つまたは複数の実施形態の一部をなす本明細書に記載の任意のオペレーションは、有用なマシンオペレーションであり得る。加えて、１つまたは複数の実施形態はまた、これらのオペレーションを行うためのデバイスまたは装置に関する。上記装置は、特別に必要な目的のために特に構築され得る、またはコンピュータ内に格納されたコンピュータプログラムにより選択的に活性化または構成される汎用コンピュータデバイスであり得る。特に、様々な汎用マシンが本明細書の教示に従って書かれたコンピュータプログラムと共に使用され得る、または必要な動作を実行するためにより専用化された装置を構築することがより便利かもしれない。
【００３４】
本明細書に記載の様々な実施形態は、携帯型デバイス、マイクロプロセッサシステム、マイクロプロセサベースまたはプログラム可能民生電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成と共に実施され得る。
【００３５】
１つまたは複数の実施形態が、１つまたは複数のコンピュータ可読媒体内に具現化された１つまたは複数のコンピュータプログラム、または１つまたは複数のコンピュータプログラムモジュールとして実施され得る。用語「コンピュータ可読媒体」は、その後コンピュータシステムに入力されることができるデータを格納することができる任意のデータストレージデバイスを指す。コンピュータ可読媒体は、コンピュータプログラムをコンピュータにより読まれることを可能にするやり方で具現化する任意の既存技術または今後開発される技術に基づき得る。コンピュータ可読媒体の例としては、ハードディスク駆動装置、ネットワーク付属ストレージ（ＮＡＳ：ｎｅｔｗｏｒｋ  ａｔｔａｃｈｅｄ  ｓｔｏｒａｇｅ）、読み取り専用メモリ、ランダムアクセスメモリ（例えば、フラッシュメモリ装置）、ＣＤ（コンパクトディスク）、ＣＤ−ＲＯＭ、ＣＤ−ＲまたはＣＤ−ＲＷ、ＤＶＤ（デジタルバーサタイルディスク）、磁気テープ、他の光学的および非光学的データストレージデバイスが挙げられる。コンピュータ可読媒体はまた、コンピュータ可読コードが分散されたやり方で格納され実行されるように、ネットワーク結合されたコンピュータシステム上に分散され得る。
【００３６】
１つまたは複数の実施形態が理解の明確のために詳しく説明されたが、いくつかの変更と修正が本開示の範囲内でなされ得るということは明らかである。したがって、記載の実施形態は例示的であって制限的でないと考えるべきであり、特許請求の範囲は本明細書に記載された詳細に限定されなく、請求項の範囲と均等物内で修正され得る。特許請求の範囲において、要素および工程のうちの少なくとも一方は特許請求範囲に明示的に示されない限り動作の任意特定順序を意味しない。
【００３７】
加えて、説明した仮想化方法は通常、特定のハードウェアシステムと整合するインターフェースを仮想マシンが提示するものと仮定してきたが、説明した方法は、任意特定のハードウェアシステムに直接対応しない仮想化と併せて使用され得る。様々な実施形態による仮想化システムは、ホストされた実施形態、ホストされない実施形態、またはこれら２つの差異をあいまいにする傾向がある実施形態として実施され得、すべて想定される。さらに、様々な仮想化オペレーションは、ハードウェアで完全にまたは部分的に実施され得る。例えば、ハードウェア実施形態は、非ディスクデータを安全にするためにストレージアクセス要求の修正のための参照テーブルを採用し得る。
【００３８】
仮想化の程度にかかわらず、多くの変形、修正、追加、改良が可能である。したがって、仮想化ソフトウェアは、仮想化機能を実行するホスト、コンソール、またはゲストオペレーティングシステムのコンポーネントを含むことができる。複数のインスタンスが、単一インスタンスとして本明細書に記載の構成要素、動作、または構造に対し設けられ得る。最後に、様々な構成要素、動作、データストレージ間の境界はいささか任意的であり、特定のオペレーションが特定の例示的構成の文脈の中で示される。機能の他の割り振りが想定され、１つまたは複数の実施形態の範囲に入り得る。一般的に、例示的構成において別個の構成要素として提示された構造と機能は組み合わせられた構造または構成要素として実現され得る。同様に、単一構成部品として提示された構造と機能は別々の構成要素として実現され得る。これらおよび他の変形、修正、追加、改良は添付特許請求の範囲に入り得る。
【図１】
2018049644.tif 000003
【図２】
2018049644.tif 000004
【図３】
2018049644.tif 000005
【図４】
2018049644.tif 000006
【図５】
2018049644.tif 000007
【図６】
2018049644.tif 000008
【図７】
2018049644.tif 000009
【手続補正書】
【提出日】平成29年11月24日(2017.11.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータが実行する方法であって、
クラスタ内のホストコンピューティングノード上で動作している仮想マシンにオブジェクトストアを提示する工程であって、前記オブジェクトストア内のオブジェクトは、それぞれが対応する仮想マシンに関連付けられた仮想ディスクを表す仮想ディスクオブジェクトを含み、各仮想ディスクオブジェクトは、前記オブジェクトストア内の一組のコンポーネントオブジェクトに関連する複合オブジェクトであり、各コンポーネントオブジェクトは、前記仮想ディスクのデータを格納するデータコンポーネントを表し、前記コンポーネントオブジェクトの前記データコンポーネントは、前記仮想ディスクオブジェクトの規定のストレージポリシーに従って個々のコンピューティングノードのローカルストレージリソースに亘って別々に格納される、前記オブジェクトストアを提示する工程と、
前記クラスタを少なくとも第１のパーティションと第２のパーティションに分割する故障事象または管理事象を受けてコンピューティングノードのクラスタを管理する工程であって、第１の仮想ディスクオブジェクトのオーナとしての前記第１のパーティション内のコーディネータノードが、前記第１の仮想ディスクオブジェクトを含む定足数の前記コンポーネントオブジェクトが前記第１のパーティション内のコンピューティングノード内のデータコンポーネントとして格納されていると判断すること、およびそれに応答して、前記第１のパーティション内の前記コンピューティングノードが前記第１の仮想ディスクオブジェクトの前記規定のストレージポリシーを変更する構成オペレーションを実行することを許可し、前記第２のパーティション内のコンピューティングノードから前記第１の仮想ディスクオブジェクトへのいかなるアクセスも拒否することを含む、前記コンピューティングノードのクラスタを管理する工程と
を含む方法。
【請求項２】
構成オペレーションが、前記オブジェクトストア内に格納されたオブジェクトの容量、可用性またはＩＯＰＳを修正するオペレーションを含む、請求項１に記載の方法。
【請求項３】
前記第１の仮想ディスクオブジェクトの全てのデータが前記第１のパーティション内の前記コンピューティングノード内のデータコンポーネントとして格納された前記第１の仮想ディスクオブジェクトを含む前記コンポーネントオブジェクト内に存在するかどうかを判断し、存在していれば、前記第１のパーティション内の前記コンピューティングノードのうちの１つの上で実行される要求処理により前記第１のパーティション内の前記第１の仮想ディスクオブジェクトに対しＩ／Ｏオペレーションが行われることを許可する工程をさらに含む請求項１に記載の方法。
【請求項４】
前記コンピューティングノードの各々は、前記オブジェクトストア内に格納された各オブジェクトの現在の構成を追跡するとともに、各オブジェクトが前記コンピューティングノードによりアクセス可能かどうかを示すメモリ内データベースのローカルコピーを維持する、請求項１に記載の方法。
【請求項５】
前記構成オペレーションを許可して前記第１の仮想ディスクオブジェクトがアクセス可能であることを前記第１のパーティション内の前記コンピューティングノードに示すために、前記コーディネータノードが前記第１の仮想ディスクオブジェクトに関して前記メモリ内データベースを更新することをさらに含む、請求項４に記載の方法。
【請求項６】
Ｉ／Ｏオペレーションを許可して前記第１の仮想ディスクオブジェクトがアクセス可能であることを前記第１のパーティション内の前記コンピューティングノードに示すために、前記コーディネータノードが前記第１の仮想ディスクオブジェクトに関して前記メモリ内データベースを更新することをさらに含む、請求項４に記載の方法。
【請求項７】
前記第１のパーティション内のコンピューティングノードが前記第１の仮想ディスクオブジェクトに対し行われるいかなるオペレーションもログ内に格納する工程をさらに含む請求項４に記載の方法。
【請求項８】
故障事象から回復した場合、
前記第１のパーティションの前記コンピューティングノード内の前記メモリ内データベースの前記ローカルコピーを前記第２のパーティションのリーダノードからの前記メモリ内データベースの置換コピーで置換する工程と、
前記メモリ内データベースの前記置換コピーが更新されて前記第１のパーティションで行われたオペレーションを含むように前記ログ内の前記オペレーションを再生する工程とをさらに含む請求項７に記載の方法。
【請求項９】
前記第１のパーティションと前記第２のパーティションをマージした場合、前記第１のパーティション内のコンピューティングノード内に格納された前記第１の仮想ディスクオブジェクトのデータコンポーネントと前記第２のパーティション内に格納された前記第１の仮想ディスクオブジェクトの任意の他のデータコンポーネントとを調整する工程をさらに含む請求項１に記載の方法。
【請求項１０】
前記調整する工程は、前記第１の仮想ディスクオブジェクトになされた更新をマージされたクラスタのリーダノードで再生する工程をさらに含む、請求項９に記載の方法。
【請求項１１】
前記第１の仮想ディスクオブジェクトを含む１つまたは複数のデータコンポーネントは、第２のパーティションのコンピューティングノード内に格納され、前記第２のパーティションから前記第１の仮想ディスクオブジェクトへのいかなるアクセスも拒否する工程は、前記第２のパーティション内のコンピューティングノード内に格納された前記第１の仮想ディスクオブジェクトの前記データコンポーネントへのアクセスを拒否することを含む、請求項１に記載の方法。
【請求項１２】
前記オブジェクトストア内の第２の仮想ディスクオブジェクトの定足数未満のデータコンポーネントが前記第１のパーティション内のコンピューティングノード内に格納されていると判断する工程と、
前記第１のパーティション内の前記コンピューティングノードからの前記第２の仮想ディスクオブジェクトのデータコンポーネントへのいかなるアクセスも拒否する工程を含む、請求項１に記載の方法。
【請求項１３】
前記第１の仮想ディスクオブジェクトを含むデータコンポーネントの定足数が、前記第１のパーティション内のコンピューティングノード内の複数のローカルストレージリソース内に格納される、請求項１に記載の方法。
【請求項１４】
プロセッサで実行されると、請求項１乃至１３のいずれか１項に記載の方法を実行する命令を格納する非一時的コンピュータ可読記憶媒体。
【請求項１５】
システムであって、
プロセッサと、
前記プロセッサで実行されると、請求項１乃至１３のいずれか１項に記載の方法を実行するアプリケーションをホストするメモリとを備えるシステム。