(58)【調査した分野】(Int.Cl.,DB名)
前記コンピューティングノードの各々は、前記オブジェクトストア内に格納された各オブジェクトの現在の構成を追跡するとともに、オブジェクトが前記コンピューティングノードによりアクセス可能かどうかを示すメモリ内データベースのローカルコピーを維持する、請求項1に記載の方法。
前記第1のパーティション内のコンピューティングノードにより前記第1のオブジェクトに対し行われるいかなるオペレーションもログ内に格納する工程をさらに含む請求項5に記載の方法。
前記第1のパーティションと前記第2のパーティションをマージした場合、前記第1のパーティション内のコンピューティングノード内に格納された前記第1のオブジェクトのデータコンポーネントと前記第2のパーティション内に格納された前記第1のオブジェクトの任意の他のデータコンポーネントとを調整する工程をさらに含む請求項1に記載の方法。
【発明を実施するための形態】
【0006】
本明細書において開示される実施形態は、ノードまたはネットワーク故障またはネットワークまたは他のタイプの間違った設定などの故障事象が発生した場合にクラスタ内のノードの複数のパーティションを容認するための技術を提供する。クラスタ内の各ノードは集約型オブジェクトストア(aggregate object store)(オブジェクトストア内に格納されたオブジェクトの一部または「コンポーネント」がクラスタ内の異なるノードのストレージにより支援され得る)を提供するようにローカルストレージに寄与する。以下にさらに詳細に説明されるように、クラスタの分断を生じる故障事象が発生した場合に、本明細書の技術は、分断脳シナリオを防止するために特定のパーティションへの完全アクセスを拒絶するのではなく「オブジェクト毎」ベースで、クラスタ内に格納されたデータのアクセス可能性を評価する。以下にさらに詳細に説明されるように、本明細書の技術は、並列パーティションが共存できるようにするとともに、所与のパーティション内に存在するそのコンポーネントの定足数(例えば、大多数)を有するオブジェクトに対しいくつかのオペレーションを実行できるようにする。オブジェクトの「オーナ」ノードは、オブジェクトに対する定足数のコンポーネントが存在するかどうかを判断し、そうであればパーティション内のオブジェクトへのアクセスを調整する。
【0007】
その例を添付図面に示すいくつかの実施形態を以下に詳細に参照する。実行可能なときはいつも添付図面では同様なまたは類似の参照番号が使用され得、これらは同様なまたは類似の機能を指し得ることに留意されたい。添付図面は例示目的のためだけの実施形態を描写する。当業者は、本明細書で示される構造および方法の代替実施形態が本明細書に記載の原理から逸脱することなく採用され得るということを以下の説明から容易に認識することになる。
【0008】
以下では、仮想コンピューティング環境内のソフトウェア定義ストレージエリアネットワークの例が、分散資源システム内のクラスタ分断を容認する参考例として使用される。この参考例は本明細書で説明する実施形態の理解を助けるために含まれる。しかし、実施形態は共用資源に関するクラスタ分断耐性(cluster partition tolerance)に関係する他の文脈で使用されるように適合化され得るということは当業者にとって明白である。
【0009】
同様に、多くの特定の詳細は実施形態の完全な理解を助けるために提供される。実施形態はこれら特定の詳細無しに実施され得るということを当業者は理解することになる。別の事例では、周知の処理オペレーションおよび実装詳細は本開示の新規な態様を不必要にあいまいにすることを回避するために詳細に説明されなかった。
【0010】
図1は一実施形態によるコンピューティング環境100を示す。図示のように、コンピューティング環境100は、ノード上で実行される仮想マシン(VM:virtual machine)112に集約型オブジェクトストア116を提供するためにクラスタ110のホストサーバまたはノード111に収容されるか、または直接取り付けられた市販品ローカルストレージを活用するソフトウェアベース「仮想ストレージエリアネットワーク」(VSAN:virtual storage area network)環境である。以下、用語「収容された」または「内に収容された」の使用は、内に収容されるか、またはそうでなければ直接取り付けられたことの両方を包含するように使用され得る。ノード111内に収容されるか、またはそうでなければノード111に直接取り付けられたローカル市販品ストレージは、ソリッドステートドライブ(SSD:solid state drive)117、磁気または回転ディスク118、および任意の他のタイプの不揮発性メモリのうちの少なくとも一つの組み合わせを含み得る。いくつかの実施形態では、SSD117は、I/O性能を高めるために磁気ディスク118の前の読み出しキャッシュおよび書き込みバッファのうちの少なくとも一つとして働く。以下にさらに論述されるように、各ノード111は、ストレージ管理ワークフローを自動化する(例えば、オブジェクトストア内にオブジェクトを生成する等)し、かつオブジェクトストア内のオブジェクトに対し指定された所定ストレージポリシーに基づきオブジェクトストア内のオブジェクトへのアクセスを提供する(例えば、オブジェクトストア内のオブジェクトに対するI/Oオペレーションに対処する等)ために、ストレージ管理モジュール(本明細書では、「VSANモジュール」と呼ぶ)を含み得る。例えば、VMは、その使用目的に依存してその「仮想ディスク」の特定のストレージ要件(例えば、容量、可用性、IOPSなど)を有するようにアドミニストレータにより当初構成され得るので、アドミニストレータはこのような可用性、容量、IOPSなどを規定するVM毎のストレージプロファイルまたはポリシーを定義し得る。以下にさらに説明するように、VSANモジュールは、規定ポリシーに基づきオブジェクトストアの物理的ストレージリソースにより支援することにより指定仮想ディスクの「オブジェクト」を生成し得る。
【0011】
仮想化管理プラットホーム105はノード111のクラスタ110と関連付けられる。仮想化管理プラットホーム105は、アドミニストレータが様々なノード111上のVMの構成と生成を管理できるようにする。
図1の実施形態に描写するように、各ノード111は、仮想化層またはハイパーバイザ113、VSANモジュール114、ハードウェア119(ノード111のSSD117と磁気ディスク118を含む)を含む。ハイパーバイザ113を介し、ノード111は複数のVM112を立ち上げ動作させることができる。ハイパーバイザ113は、ひとつには、VM112毎にコンピューティングリソース(例えば、処理能力、ランダムアクセスメモリなど)を適切に割り振るようにハードウェア119を管理する。さらに、以下にさらに説明するように、各ハイパーバイザ113は、その対応するVSANモジュール114を介して、仮想ディスク(またはその一部)のストレージとして使用するためのハードウェア119内に配置されたストレージリソース(例えば、SSD117と磁気ディスク118)へのアクセスと、クラスタ110内のノード111のうちの任意のノード内に存在する任意のVM112によりアクセスされ得る他の関連ファイルへのアクセスとを提供する。特定の実施形態では、ヴィエムウェア(VMware)社(VMware)のヴィ・スフィア・ハイパーバイザ(vSphere Hypervisor)がハイパーバイザ113としてノード111上にインストールされ得、ヴィエムウェア(VMware)のヴィ・センタサーバ(vCenter Server)が仮想化管理プラットホーム105として使用され得る。
【0012】
一実施形態では、VSANモジュール114はハイパーバイザ113内の「VSAN」デバイスドライバとして実装される。このような実施形態では、VSANモジュール114は概念的「VSAN」115へのアクセスを提供し、VSAN115を介しアドミニストレータはオブジェクトストア116により支援される多くのトップレベル「デバイス」または名前空間オブジェクトを生成し得る。1つの共通シナリオでは、名前空間オブジェクトの生成中に、アドミニストレータは、名前空間オブジェクトの特定のファイルシステムを規定し得る(したがって、このような名前空間オブジェクトは本明細書では「ファイルシステムオブジェクト」とも呼ばれる)。例えば、一実施形態では、各ノード111内の各ハイパーバイザ113は、ブート処理中に、VSANモジュール114により露出される概念的グローバル名前空間の/vsan/ルートノードを発見し得る。例えば、VSANモジュール114により露出されるAPIへアクセスすることにより、ハイパーバイザ113は、VSAN115内に現在存在するすべてのトップレベルファイルシステムオブジェクト(または他のタイプのトップレベル名前空間オブジェクト)を判断し得る。VM(または他のクライアント)がファイルシステムオブジェクトのうちの1つにアクセスしようとすると、ハイパーバイザ113はファイルシステムオブジェクトを動的に「自動マウント」し得る。VSAN115を介しアクセス可能なファイルシステムオブジェクト(例えば、/vsan/fs_name1など)は、同時アクセス中のホスト間の同時制御を提供するように設計されたヴィエムウェア(VMware)の分散またはクラスタ化ファイルシステム(VMFS(Virtual Machine File System))など特定のファイルシステムのセマンティクスに一致するオブジェクトストア116内に格納された他のデータ(例えば、ファイルシステムのファイル)に関係するメタデータを格納し得る。次に、このようなVMFSファイルシステムオブジェクトは、VMFSに従ってフォーマット化された物理的ストレージデバイスと同様なやり方で、ハイパーバイザ113内のVMFSファイルシステムドライバと相互作用することができるだろう(例えば、仮想ストレージデバイスのように)。VSAN115は複数のファイルシステムオブジェクトを支援するので、VSAN115はいかなる特定のクラスタ化ファイルシステムの制限により限定されることなくオブジェクトストア116を介しストレージリソースを提供することができる。例えば、多くのクラスタ化ファイルシステム(例えば、VMFSなど)はある量のノード111を支援するためにだけスケーリングし得る。複数のトップレベルファイルシステムオブジェクト支援を提供することにより、VSAN115はこのようなクラスタ化ファイルシステムのスケーラビリティ制限を克服する。
【0013】
以下の
図2の文脈でさらに詳細に説明するように、ファイルシステムオブジェクト自体は、クラスタ110内で実行されるVM112によりアクセス可能な多くの仮想ディスク記述子ファイル(例えば、ヴィ・スフィア(vSphere)環境内のvmdkファイル)へのアクセスを提供し得る。これらの仮想ディスク記述子ファイルは、仮想ディスクの実データを含むとともに、オブジェクトストア116により別々に支援される仮想ディスク「オブジェクト」に対する参照を含む。仮想ディスクオブジェクト自体は、階層的または「複合」オブジェクトであり得、階層的または「複合」オブジェクトは、以下にさらに説明するように、仮想ディスクを当初生成する際にアドミニストレータにより生成される対応するストレージプロファイルまたはポリシーのストレージ要件(例えば、容量、可用性、IOPSなど)を反映する「コンポーネント」オブジェクト(再びオブジェクトストア116により別々に支援される)でさらに構成される。以下にさらに論述されるように、各VSANモジュール114は(以下にさらに説明する実施形態における、クラスタ監視、メンバーシップおよびディレクトリサービスすなわち「CMMDS:cluster monitoring,membership and directory services」サブモジュールを介し)、他のノード111の他のVSANモジュール114と通信して、オブジェクトストア116内に格納された様々なオブジェクト間の位置、構成、ポリシー、および関係を記述するメタデータを含むメモリ内メタデータデータベース(例えば、各ノード111のメモリ内に別々にではあるが同期されたやり方で維持される)を生成および維持する。このメモリ内メタデータデータベースは、例えば第1のアドミニストレータがVMの仮想ディスクを生成する場合だけでなく、VMが実行中であり仮想ディスクに対してI/Oオペレーション(例えば、読み取りまたは書き込み)を行う場合に、ノード111上のVSANモジュール114により利用される。
図3の文脈で以下にさらに論述されるように、VSANモジュール114は(以下にさらに説明する一実施形態における分散オブジェクトマネジャまたは「DOM」サブモジュールを介し)、I/Oオペレーションを受ける仮想ディスクの一部を支援する実際の物理的ローカルストレージを収容するノード(または、ノード群)へI/Oオペレーション要求を適切に送るために、メモリ内データベース内のメタデータを使用してオブジェクトの階層を横断する。
【0014】
図2は、一実施形態による、オブジェクトストア116内に編成されたオブジェクト(仮想ディスクを表す)の例示的階層構造を示す。上で既に論述されたように、ノード111のうちの1つで動作しているVM112は、オブジェクトストア116内に階層的または複合オブジェクト200として格納される仮想ディスク上のI/Oオペレーションを行い得る。ハイパーバイザ113は、VSANモジュール114を介しVSAN115のアブストラクションとインターフェースすることにより(例えば、一実施形態において既に論述されたように仮想ディスクオブジェクトに対応するトップレベルファイルシステムオブジェクトを自動マウントすることにより)、VM112に仮想ディスクへのアクセスを提供する。例えば、VSANモジュール114は、メモリ内メタデータデータベースのそのローカルコピーに問い合わせすることにより、以下にさらに説明するようにメタデータまたは仮想ディスクの記述子ファイル210(例えば、vmdkファイルなど)を格納するVSAN115内に格納された特定のファイルシステムオブジェクト205(例えば、一実施形態におけるVMFSファイルシステムオブジェクト等)を識別することができる。ファイルシステムオブジェクト205は仮想化環境を支援する際に仮想マシン構成ファイル(例えば、ヴィ・スフィア(vSphere)環境内のvmxファイル等)などその目的に合致する多種多様な他のメタデータまたは記述子ファイルを格納し得るということを認識すべきである。いくつかの実施形態では、各ファイルシステムオブジェクトは特定のVMに対応するそれらの仮想ディスク(例えば、「VM毎」ファイルシステムオブジェクト)だけを支援するように構成され得る。
【0015】
記述子ファイル210は、オブジェクトストア116内に別々に格納されるとともに仮想ディスクを概念的に表す(したがって本明細書では時に仮想ディスクオブジェクトとも呼ばれる)複合オブジェクト200に対する参照を含む。複合オブジェクト200は、仮想ディスクを生成する際にアドミニストレータにより生成された当該ストレージプロファイルまたはポリシー内のストレージ要件(例えば、容量、可用性、IOPなど)またはサービスレベルアグリーメント(SLA:service level agreement)に適合する仮想ディスクのストレージ編成または構成(本明細書では時に仮想ディスク「ブループリント」と呼ばれる)について記述するメタデータを格納する。例えば、
図2の実施形態では、複合オブジェクト200は、仮想ディスクの2つのミラー・コピー(例えば、ミラー)が各々さらにRAID 0構成においてストライプ化されるRAID 1構成について記述する仮想ディスクブループリント215を含む。したがって、複合オブジェクト225は、仮想ディスクミラーの各々における各ストライプ(例えば、仮想ディスクのデータパーティーション)に対応する多数の「リーフ(leaf)」または「コンポーネント」オブジェクト220
xに対する参照を含み得る。各コンポーネントオブジェクト220(例えば、各ストライプ)のメモリ内メタデータデータベースにおいてVSANモジュール114によりアクセス可能なメタデータは、(このような物理資源内のストライプの位置だけでなく)ストライプを実際に格納する物理的ストレージリソース(例えば、磁気ディスク118など)を収容するクラスタ110内の特定のノード111
xに対するマッピングを提供するか、またはそうでなければ同特定のノード111
xを識別する。
【0016】
図3は、一実施形態によるVSANモジュール114の構成要素を示す。先に説明したように、いくつかの実施形態では、VSANモジュール114は、VSAN115のアブストラクションをハイパーバイザ113へ露出するデバイスドライバとして実行し得る。VSANモジュール114の様々なサブモジュールは、異なる責務を担い、このような責務に応じてユーザ空間315内またはカーネル空間320内のいずれかで動作し得る。
図3の実施形態に描写するように、VSANモジュール114は、ユーザ空間315において動作するクラスタレベルオブジェクト管理(CLOM:cluster level object management)サブモジュール325を含む。CLOMサブモジュール325は、アドミニストレータによる仮想ディスクの生成中に仮想ディスクブループリントを生成し、このような仮想ディスクブループリントのために生成されたオブジェクトがアドミニストレータにより設定されたストレージプロファイルまたはポリシー要件を満足するように構成されることを保証する。オブジェクト生成(例えば、仮想ディスクの)中にアクセスされることに加えて、CLOMサブモジュール325はまた、(例えば、仮想ディスクブループリントを、またはオブジェクトストア116内の実際の物理的ストレージデバイスへの仮想ディスクブループリントのマッピングを動的に修正するか、またはそうでなければ更新するために)オブジェクトに関係するストレージプロファイルまたはポリシーに対しアドミニストレータにより変更がなされるか、またはクラスタまたは作業負荷に対する変更が現在のストレージプロファイルまたはポリシーに準拠しないオブジェクトを生じると、アクセスされ得る。
【0017】
一実施形態では、アドミニストレータが仮想ディスクオブジェクト200などの複合オブジェクトのストレージプロファイルまたはポリシーを生成すれば、CLOMサブモジュール325は、多種多様な発見的方法および分散アルゴリズムのうちの少なくとも一方を適用して、ストレージポリシーを満足するか、またはそうでなければストレージポリシーに適するクラスタ110内の構成(例えば、ミラーリングにより所望の冗長性を実現しストライピングによりアクセス性能を達成するRAID構成:負荷バランスなどを達成するためにどのノードのローカルストレージが仮想ディスクのいくつかの部分/パーティション/ストライプを格納すべきか)を記述する仮想ディスクブループリント215を生成する。例えば、CLOMサブモジュール325は、一実施形態では、仮想ディスクがアドミニストレータにより最初に生成されると、
図2における仮想ディスクオブジェクト200のRAID 1/RAID 0構成について記述するブループリント215を生成する責任を負う。既に論述されたように、ストレージポリシーは、容量、IOPS、可用性および信頼性の要件を規定し得る。ストレージポリシーはまた、作業負荷特徴(例えば、ランダムまたはシーケンシャルアクセス、I/O要求サイズ、キャッシュサイズ、予想キャッシュヒット率など)を規定し得る。加えて、アドミニストレータはまた、いくつかのノード111(またはノード111中に収容されたローカルディスク)を優先的に使用するためにVSANモジュール114に対する親和度を規定し得る。例えば、VMの新しい仮想ディスクを設ける際、アドミニストレータは、仮想ディスクは400GBの予備容量、150読み出しIOPSの留保、300書き込みIOPSの留保および99.99%の所望可用性を有するということを規定する仮想ディスクのストレージポリシーまたはプロファイルを生成し得る。生成されたストレージポリシーを受信すると、CLOMサブモジュール325は、生成されたストレージポリシーに適する複合オブジェクト(例えば、仮想ディスクオブジェクト)の仮想ディスクブループリントを生成するためにそのVSANモジュール114により維持されるメモリ内メタデータデータベースを調べてクラスタ110の現在状態を判断する。以下にさらに論述されるように、このとき、CLOMサブモジュール325は、その対応する分散オブジェクトマネジャ(DOM:distributed object manager)サブモジュール340にブループリントを伝達し、分散オブジェクトマネジャ(DOM)サブモジュール340は、オブジェクトストア116と相互作用して、例えばクラスタ110の様々なノード111内の物理ストレージ位置へ複合オブジェクトのコンポーネントオブジェクト(例えば、ストライプ)を割り付けるか、またはそうでなければマッピングすることによりブループリントを実施する。
【0018】
CLOMサブモジュール325とDOMサブモジュール340に加えて、
図3でさらに描写するように、VSANモジュール114はまた、クラスタ110の状態に関する情報をVSANモジュール114の他のサブモジュールに提供するために、既に論述されたメモリ内メタデータデータベースを維持するとともに、クラスタ110内の各ノード111の状態、アクセス可能性および可視性を監視することによりクラスタ110の全般的「健康」を追跡するクラスタ監視、メンバーシップおよびディレクトリサービス(CMMDS:cluster monitoring,membership and directory services)サブモジュール335を含み得る。メモリ内メタデータデータベースは、様々なノード111、ノード111中に収容されたノード111内のストレージリソース(SSD、磁気ディスクなど)およびその特性/能力、ノード111の現在状態およびそれらの対応するストレージリソース、ノード111間のネッワーク経路などのVSAN環境の物理インベントリを維持するディレクトリサービスとして働く。既に論述されたように、物理インベントリを維持することに加えて、メモリ内メタデータデータベースは、さらに、オブジェクトストア116に格納されたオブジェクトのメタデータのカタログ(例えば、どんな複合およびコンポーネントオブジェクトが存在するか、どんなコンポーネントオブジェクトがどんな複合オブジェクトに属するか、どのノードがどのオブジェクトへのアクセスを制御する「コーディネータ」または「オーナ」として働くか、オブジェクト毎のサービス品質要件、オブジェクト構成、物理ストレージ位置へのオブジェクトのマッピングなど)を提供する。既に論述されたように、VSANモジュール114内の他のサブモジュールは、更新のためにCMMDSサブモジュール335(
図3では関連線により表される)へアクセスして、クラスタトポロジーとオブジェクト構成の変更を学習する。例えば、既に論述されたように、仮想ディスク生成中に、CLOMサブモジュール325は、仮想ディスクブループリントを生成するためにメモリ内メタデータデータベースへアクセスする。DOMサブモジュール340は、実行中VM112からのI/Oオペレーションに対処するために、メモリ内メタデータデータベースへアクセスして、対応する複合オブジェクト(例えば、仮想ディスクオブジェクト)のコンポーネントオブジェクト(例えば、ストライプ)を格納するノード111と、I/Oオペレーションに応じるためにそれらのノードが到達可能な経路とを判定する。
【0019】
前に論述したように、DOMサブモジュール340は、オブジェクト生成中だけでなくI/Oオペレーションの対処中に、DOMサブモジュール340が実行される特定のノード111のローカルストレージ内に格納されたオブジェクトストア116内のそれらのコンポーネントオブジェクトおよびそのノード111が「コーディネータ」または「オーナ」として現在指定されているいくつかの他の複合オブジェクトへのアクセスを制御し、これらのオペレーションに対処する。例えば、VMからのI/Oオペレーションに対処する際、いくつかの実施形態における複合オブジェクトの階層的性質に起因して、ターゲット複合オブジェクト(例えば、I/Oオペレーションを受ける仮想ディスクオブジェクト)のコーディネータとして働くDOMサブモジュール340は、第2のノード111(またはノード群)内の異なるDOMサブモジュール340とネットワークを介してさらに通信する必要があるかもしれない。第2のノード111(またはノード群)は、第2のノード111のローカルストレージ内に格納され、かつI/Oオペレーションを受ける仮想ディスクの一部分である仮想ディスクオブジェクトの特定のコンポーネントオブジェクト(例えば、ストライプなど)のコーディネータとして働く。I/Oオペレーションを発行するVMが、仮想ディスクオブジェクトのコーディネータとはまた異なるノード111上に存在すれば、VMを動作させるノードのDOMサブモジュール340はまた、仮想ディスクオブジェクトのコーディネータのDOMサブモジュール340とネットワークを介して通信する必要があるだろう。いくつかの実施形態では、I/Oオペレーションを発行するVMが、I/Oオペレーションを受ける仮想ディスクオブジェクトのコーディネータと異なるノード上に存在すれば、2つのノードの2つのDOMサブモジュール340は、VMを動作させるノードへ仮想ディスクオブジェクトのコーディネータの役割を変更するために互いに通信し得る(例えば、これにより、VMを動作させるノードと仮想ディスクオブジェクトのコーディネータとして働くノードとの間のI/Oオペレーションを調整するために必要とされるネットワーク通信の量が低減される)。
【0020】
DOMサブモジュール340はまた同等に、オブジェクト生成中に互いに通信し合う。例えば、仮想ディスクの生成中にCLOMモジュール325により生成された仮想ディスクブループリントは、どのノード111がその対応するコンポーネントオブジェクト(ストライプなど)としてだけでなく仮想ディスクオブジェクトのコーディネータとして働くべきかを指定する情報を含み得る。このような指定ノードのDOMサブモジュール340の各々には、オブジェクトに関するメタデータによりメモリ内メタデータデータベースを更新するために、各々のオブジェクトを生成し、このようなオブジェクトへローカルストレージを(必要に応じ)割り振り、それらのオブジェクトをそれらの対応するCMMDSサブモジュール335へ通知する要求が発行される(例えば、実施形態に依存して、仮想ディスクオブジェクトのコーディネータとして指定されたDOMサブモジュール340により、または仮想ディスクブループリントなどを生成するノードのDOMサブモジュール340により)。このような要求を行うために、DOMサブモジュール340は、そのノード111のローカルSSDおよび磁気ディスクとの通信を実際に推進するVSANモジュール114内のコンポーネントとして働くログ構造化オブジェクトマネジャ(LSOM:log structured object manager)サブモジュール350と相互作用する。コンポーネントオブジェクトのローカルストレージを割り振る(およびそのノードがコーディネータして働く複合オブジェクトのこのようなポリシーおよび構成などの他のメタデータを格納する)ことに加えて、LSOMサブモジュール350は追加的に、そのノード111のローカルストレージに対するI/Oオペレーションのフローを監視する。
【0021】
図3はまた、論理的エンドポイント(例えば、ノード、オブジェクトなど)間に任意のサイズのデータグラムを提供する高信頼データグラムトランスポート(RDT:reliable datagram transport)サブモジュール345を描写する。同エンドポイントは場合によっては複数の経路にわたり得る。一実施形態では、下位トランスポートはTCPである。代替的に、RDMAなどの他のトランスポートが使用され得る。RDTサブモジュール345は、例えば上で既に論述されたようにオブジェクトを生成するか、またはI/Oオペレーションに対処するためにDOMサブモジュール340が互いに通信する場合に使用される。いくつかの実施形態では、RDTモジュール345は、CMMDSモジュール335と相互作用することにより、メモリ内メタデータデータベース内に最新の位置情報を維持し、リンク健康状態に基づき接続を生成、除去、または再確立するために、論理的エンドポイントのアドレスを動的に決定する。例えば、CMMDSモジュール335がリンクを不健康であるとして報告すれば、RDTサブモジュール345は、より良い状態のリンクを好み、この接続を取り止め得る。
【0022】
図4は、一実施形態による、規定のストレージポリシーに基づき仮想ディスクオブジェクトを生成するための方法フローチャートを示す。例えば、工程400では、アドミニストレータは、容量、可用性およびIOPS要件(例えば、規定ストレージポリシー)を有する仮想ディスクを生成するために仮想管理プラットホーム105のユーザインターフェースと相互作用し得る。一実施形態では、次に、仮想管理プラットホーム105は、工程405において、「マスタ」ノード111に仮想ディスクのオブジェクトを生成するように要求し得る。工程410では、このようなマスタノード111は、VSANモジュール内のそのCLOMサブモジュール325を介し仮想ディスクブループリントを生成し得る。既に論述したように、CLOMサブモジュール325は、CMMDSサブモジュール335のメモリ内メタデータデータベースを調べることにより判断されたクラスタ110の状態に基づき、仮想ディスクオブジェクト(例えば、複合オブジェクト)の生成のための仮想ディスクブループリントを生成する。仮想ディスクブループリントは、仮想ディスクオブジェクトのコーディネータまたはオーナとして働くべき特定のノードを識別し得る。工程415では、マスタノード111のDOMサブモジュール340は、識別されたノードのDOMサブモジュール340に仮想ディスクオブジェクトを生成するように要求し得る。工程420では、識別されたノードのDOMサブモジュール340は、例えばその対応するLSOMサブモジュール350と通信することにより要求を受信し、仮想ディスクオブジェクトを生成し、仮想ディスクオブジェクトについて記述するメタデータをそのローカルストレージ内に持続的に格納する。工程425では、DOMサブモジュール340は、仮想ディスクオブジェクトブループリントに基づきクラスタ110内のそれらの他のノード(仮想ディスクブループリント内の任意のコンポーネントオブジェクトのコーディネータまたはオーナとして働くように指定された)を識別する。DOMサブモジュール340は、コンポーネントオブジェクトのコーディネータとして働く他のノードのDOMサブモジュール340と通信し(例えば、そのRDTサブモジュール345を使用することにより)、このようなコンポーネントオブジェクトを支援するデータをそれらのローカルストレージ内に格納する。仮想ディスクオブジェクトのコーディネータのDOMサブモジュール340から各々のコンポーネントオブジェクトを生成する要求を受信すると、DOMサブモジュール340は、工程430において、コンポーネントオブジェクト(およびその関連メタデータ)のローカルストレージを割り振るために各々のLSOMモジュール350と通信する。このようなコンポーネントオブジェクトが生成されると、工程435において、それらのDOMサブモジュール340はコンポーネントの生成をそのCMMDSサブモジュール335のメモリ内メタデータデータベースへ通知する。工程440では、仮想ディスクオブジェクトのコーディネータのDOMサブモジュール340はまた、メモリ内メタデータデータベースを更新するためにそのCMMDSサブモジュール335にその生成を通知し、最終的に確認をアドミニストレータへ送信する(例えば、仮想管理プラットホーム105へのマスタノード通信を介し)。一実施形態では、仮想ディスクオブジェクトのコーディネータのDOMサブモジュール340および仮想ディスクオブジェクトの各コンポーネントオブジェクトのコーディネータのDOMサブモジュール340は、さらに、または仮想ディスクオブジェクトまたは関連コンポーネントオブジェクトに影響を与えるだろう(例えば、ノードが消える、ローカルディスクが消えるなど)クラスタ110の状態に対する関連事象または変更(CMMDSサブモジュール335により連続的に監視される)について通知される「コールバック」を定期的に読むか、またはそれらの対応するCMMDSサブモジュール335に登録する。例えば、仮想ディスクオブジェクトのコーディネータのCMMDSサブモジュール335が「仮想ディスクオブジェクトのコンポーネントオブジェクトのうちの1つのコーディネータとして働く特定のノードにもはや到達可能ではない」ということを発見すれば、CMMDSサブモジュール335はコールバックメカニズムを介しその対応するDOMサブモジュール340に通知する。同様に、仮想ディスクオブジェクトのコンポーネントオブジェクトのコーディネータのCMMDSサブモジュール335が、「仮想ディスクオブジェクト(または仮想ディスクオブジェクトの任意の他のコンポーネントオブジェクト)のコーディネータとして働く特定のノードにもはや到達可能ではない」ということを発見すれば、このようなCMMDSサブモジュール335は同様に、コールバックメカニズムを介しその対応するDOMサブモジュール340に通知する。このようなコールバックメカニズムは、クラスタ110内のノードのDOMサブモジュール340が、行動を取ることができるように、以下にさらに説明するように、例えばノード障害または任意の他の事象により生成され得るクラスタ110のいくつかのパーティションにおいていくつかのオブジェクトがアクセス可能または利用可能となるようにする。
【0023】
いくつかの実施形態では、工程435、440においてコーディネータノードにより行われる通知(およびメモリ内メタデータのそれらのローカルバージョンに対してコーディネータノードによりなされる任意の他の更新)は、クラスタ110の「リーダ(leader)」または「マスタ」ノード(いくつかの実施形態において先に述べた同じマスタノードであり得る)と通信することにより実施される。リーダノードは、メモリ内メタデータデータベースの真のバージョンを維持し、様々なVSANモジュール114すべてからのこのような通知された更新を受信し、このような更新に全順序を課し、次に、これらの更新をクラスタ110内のノードのVSANモジュール114(更新自体を通知したノードを含む)へ伝達する。VSANモジュール114は、リーダノードにより課された順序でメモリ内メタデータデータベースのそれらのローカルバージョンを常時かつ確実に更新することができる。一実施形態では、各VSANモジュール114のCMMDSサブモジュール335はクラスタ110内のリーダノードを選ぶためのプロトコルを含む。クラスタ110が生成されると、クラスタ110内の各ノードのCMMDSサブモジュール335はリーダノードを選ぶために互いに通信する。クラスタ内の様々なノードへ更新を伝達することに加えて、いくつかの実施形態では、リーダノードはさらに、新しいノード同士を同期させるとともにメモリ内メタデータデータベースを介しノード到達可能性およびクラスタ情報を発行する責任を負い得る。選ばれると、リーダノードは、現在のリーダノードが失敗した場合にリーダノードになるバックアップリーダノードを指定する。一実施形態では、リーダノードにより受信された各更新は最初に、クラスタ内のノードの残りへ送信される前にバックアップリーダノードと同期される。
【0024】
クラスタ110が分断されると、例えば、ノードまたはネットワーク故障に、またはオフラインとなるノードに起因して、各パーティションのノードは同様に、例えばこのようなパーティションがリーダノードもバックアップリーダノードも含まなければパーティションの新しいリーダノードおよびバックアップリーダノードのうちの少なくとも一方を選ぶ。前に論述したように、CMMDSサブモジュール335はクラスタ110内の各ノードの状態、アクセス可能性および可視性を監視するので、ノード111のCMMDSサブモジュール335は、1つまたは複数のパーティションをクラスタ110内に出現させるノードまたはネットワーク故障を集合的に認識し、パーティションの新しいリーダノードおよびバックアップリーダノードのうちの少なくとも一方を既に論述したように適切に選ぶ。CMMDSサブモジュール335は、認識されたパーティションが非重複メンバーシップを有するようにノードが他のノードと通信し得る場合に限り、このようなノードがパーティションに属する、すなわちパーティションのメンバーであると判断し得る(および逆もまた同様)。
【0025】
図5は、一実施形態による、複合オブジェクトがノードのクラスタのパーティションからアクセス可能かどうかを判断するためのフローチャートを示す。工程500において、1つまたは複数のパーティションがノード障害または他の事象(例えば、再構成など)に起因してクラスタ110内で認識されれば、工程505において、このようなパーティションのリーダノードが、例えば
図5A)で説明したように、未だ存在していなければ選ばれる。工程510では、分断に起因してもはやアクセス可能でない他のノード(例えば、故障したノードまたは別のパーティション内に存在するノード等)により調整された関連オブジェクト(例えば、複合オブジェクトの他のコンポーネントオブジェクトまたは複合オブジェクト自体)を有する複合またはコンポーネントオブジェクトのコーディネータまたはオーナとして働くパーティション内の各ノードは、このような他の関連オブジェクトへのアクセスの欠如について通知される。例えば、既に論述されたコールバックメカニズムを利用する一実施形態では、このようなノードのCMMDSサブモジュール335は、そのクラスタ監視活動を通じて、他の関連オブジェクトへのアクセスの欠如を生じるクラスタ110の状態の変化(例えば、分断)を認識し、ノードの対応するDOMサブモジュール340に通知する。工程515では、複合オブジェクトのコーディネータがパーティションからアクセス可能でなければ、工程520において、パーティション内の複合オブジェクトの各々のコンポーネントオブジェクトの各コーディネータはパーティションの複合オブジェクトのコーディネータとして自身を選ぼうとする。工程525では、コンポーネントオブジェクトのコーディネータのうちの1つだけが、パーティション内の複合オブジェクトのコーディネータとして自身を首尾よく選ぶ。工程530では、複合オブジェクトのコーディネータとして働くパーティション内のノードのCMMDSサブモジュール335(工程525において既に存在していたか、または選ばれた)は、コンポーネントオブジェクトの定足数または大多数がパーティションのメンバーであるノード内に存在する複合オブジェクトを構成するかどうかを判断する。一実施形態では、複合オブジェクトがその生成中に偶数のコンポーネントオブジェクトを有すれば、複合オブジェクトのオーナノードは、クラスタ110を分断する故障事象が発生した場合に特定のパーティションの定足数を提供するために、複合オブジェクトの生成中に奇数の「ウイットネス」コンポーネントオブジェクト(コンポーネントオブジェクトが存在しない1つまたは複数のノードに通常は属する)を追加し得る。複合オブジェクトのコーディネータが「複合オブジェクトを構成するコンポーネントオブジェクトの定足数または大多数がパーティションのノード内に格納される」と判断すれば、コーディネータノードは、工程535において、メタデータまたは構成オペレーション(例えば、そのストレージプロファイルまたはポリシーを修正する、そのブループリント215を修正する等)が複合オブジェクトに対し行われることをオーナノードが許可するように(例えば、すべてのこのようなオペレーションは通常、「構成」オペレーションまたは「メタデータ」オペレーションのいずれかと呼ばれる)、複合オブジェクトがパーティション内で「アクセス可能である」ということを示すためにそのメモリ内メタデータデータベースを更新する。このような更新は、既に論述したようにリーダノードによりパーティション内の他のノードへ伝達されるであろう。工程540において、コーディネータノードがさらに、「パーティション内のコンポーネントオブジェクトの定足数がまた、複合オブジェクトのデータの全コピーを含む」と判断すれば、工程545では、オーナノードはさらに、I/Oオペレーションが複合オブジェクトに対し行われることをオーナノードがまた許可するように、複合オブジェクトがパーティション内で「利用可能である」ということを示すためにそのメモリ内メタデータデータベースを更新する。
【0026】
工程530において、複合オブジェクトのコーディネータノードが、パーティション内のコンポーネントオブジェクトの定足数(例えば、大多数)を有していないと判断すれば、工程550において、複合オブジェクトのコーディネータノードは、そのメモリ内メタデータデータベース内で複合オブジェクトがパーティションからアクセス可能でない(パーティション内でリーダノードにより他のノードの他のメモリ内メタデータデータベースへ伝達されたので)ということを示す。工程555において、複合オブジェクトのいかなるコンポーネントオブジェクトもパーティション内に存在しなければ、工程560では、コーディネータノードはまた、このようなコンポーネントオブジェクトが「劣化した」、「アクセス不能である」、またはそうでなければパーティションからアクセスされ得ないということを示すために、そのメモリ内メタデータデータベース(およびリーダノードを介しパーティション内の他のノードのローカルメモリ内メタデータデータベース)を更新する。
【0027】
オブジェクトストア116内の複合オブジェクト毎に、1つの特定のパーティションの複合オブジェクトのオーナまたはコーディネータとして働く当該パーティション内の最大で1つのノードが「複合オブジェクトがアクセス可能である」ということを検証するということを認識すべきである。前述の分断技術を実施する実施形態は、分断を生じる故障をクラスタ110が経験できるようにするとともに、並列パーティションが共存することと、ノード上で実行されるVMなどのクライアントからのI/Oオペレーションを場合によっては支援することとを許容するということをさらに認識すべきである。例えば、複合オブジェクト200を構成するコンポーネントオブジェクトの定足数または大多数がまた、同じ特定のパーティション内に存在し、また複合オブジェクトのデータの全コピーを含む限り、同じパーティション内のノードにおいて実行されるVMなどのクライアントは、たとえクラスタ110が分断に悩まされてきたとしても、複合オブジェクト200(例えば、仮想ディスクオブジェクト)に対しI/Oオペレーションを行い得る。
【0028】
図6は、多数のパーティションを単一クラスタへ戻す調整のフローチャートを示す。パーティションが単一クラスタ110にマージされ戻されるようにノード障害、ネットワーク故障または他の故障事象が解決される(または、ノードがオンラインに戻る)と、工程600では、すべてのパーティションのリーダおよびバックアップリーダノードがそれらの役割を放棄するか、または単一のリーダおよびバックアップリーダノードへ譲る。例えば、一実施形態では、最大ノードメンバーシップを有するパーティションのリーダおよびバックアップリーダノードはそれらの役割を保持し、残りのパーティションのすべてのリーダおよびバックアップリーダノードは各々の役割を放棄する。工程605では、そのリーダノードがその指導的役割を放棄したパーティション内に存在した各ノードは、ノードがこのようなオブジェクトのオーナノードとして働いたそのメモリ内メタデータデータベースに対してなされたオブジェクト(複合またはコンポーネントオブジェクト)に対するいかなる更新(例えば、メタデータオペレーションなど)もキューまたはログ(または類似データ構造)内に格納する。例えば、ノードが、そのパーティション内に存在する間に新しいコンポーネントオブジェクトを複合オブジェクトへ追加した複合オブジェクトのコーディネータノードであれば、同ノードは、新しいコンポーネントオブジェクトの追加に関係するメタデータオペレーションをそのキューへ追加するであろう。同様に、新たに生成されたコンポーネントオブジェクトのコーディネータノードだったノードは同様に、新しいコンポーネントオブジェクトに関係する更新をそのキュー内に追加するだろう。
【0029】
一実施形態では、CMMDSサブモジュール335は、このようなオブジェクトに対してなされたいかなる更新(例えば、メタデータおよびI/Oオペレーション等)も追跡するためにメモリ内メタデータデータベース内にオブジェクト毎の構成順位識別子または番号を維持する。例えば、仮想ディスクブループリント215に対する変更などのメタデータオペレーションが複合オブジェクト200に対しなされると、複合オブジェクト200のオーナノードは、複合オブジェクト200に対応する構成順位番号をインクリメントし得る(これは、次に、既に論述したように、クラスタ110または場合によってはパーティション内のノードの残りへ例えば2相コミットプロトコルを使用することによりリーダノードにより伝達され得る)。既に論述したように、クラスタ110の分断が発生した場合には1つのパーティションの1つのオーナノードだけが複合オブジェクトへ「アクセス」することができ、したがって複合オブジェクトの構成順位番号をインクリメントすることができ、これにより可能な分断脳状況を回避するということを認識すべきである。
【0030】
工程610では、そのリーダノードがその指導的役割を放棄したパーティション内に存在した各ノードは次に、そのローカルメモリ内メタデータデータベースを削除する。メモリ内メタデータデータベースの削除は、ノードがパーティション内に存在する間に複合オブジェクトのために働いてきたであろういかなる以前のオーナーシップ役割も効果的に除去する。工程615では、このような各ノードは、存続リーダノードのメモリ内メタデータデータベースを受信する。工程620では、このような各ノードは次に、そのキュー内のいかなる更新も、存続メモリ内メタデータデータベース中へ伝達およびコミット(例えば、2相コミット等)するために存続リーダノードへ送出または「再生」する。工程625では、伝搬のための様々なノードからのこのような更新をすべて受信するとリーダノードは、このような更新に対応するオブジェクト毎に、「更新が更新に関連付けられたオブジェクトの構成順位番号に基づき昇順でクラスタ内のすべてのノードによりコミットされる」ということを送信および要求する。このようにして、更新は正しい順序でメモリ内メタデータデータベースへコミットされる。
【0031】
図7は、一実施形態による、VMから発するI/Oオペレーションの対処を示す。特定のノード上で実行されるVMがその仮想ディスクに対してI/Oオペレーションを行うと、VMのゲストオペレーティングシステムは、工程700において、その仮想ディスクを対象としたI/Oオペレーション要求を発行する(ゲストオペレーティングシステムのデバイスドライバを介し)。同I/Oオペレーション要求は、工程705において、ハイパーバイザ113により受信され、最終的にはハイパーバイザ113内のI/Oスタックの様々な層を介してVSANモジュール114のDOMサブモジュール340へ転送および変換される。工程710では、DOMサブモジュール340により受信されたI/O要求は、CMMDSサブモジュール335のメモリ内メタデータデータベースへアクセスすることにより仮想ディスクオブジェクトのコーディネータノードを識別するためにDOMサブモジュール340が使用する仮想ディスクを表すオブジェクトの一意的識別子を含む(いくつかの実施形態では、一意的識別子へのコーディネータノードの識別子のマッピングを参照するためにメモリ内メタデータデータベースへアクセスすることは、仮想ディスクオブジェクトが当初アクセスされた場合だけ発生し、このようなマッピングは後の参照が必要とされないように将来のI/Oオペレーションにわたって持続する)。仮想ディスクオブジェクトのコーディネータノードを識別すると、VMを動作させるノードのDOMサブモジュール340は、工程715においてI/Oオペレーションを行うこと要求するためにコーディネータノードのDOMサブモジュール340と通信する(例えば、そのRDTサブモジュール345を使用することにより)。既に論述したように、いくつかの実施形態では、VMを動作させるノードと仮想ディスクオブジェクトのコーディネータとして働くノードが異なれば、2つのDOMサブモジュールは、仮想ディスクオブジェクトのコーディネータの役割を実行中VMのノードとなるように更新するように通信する。コーディネータのI/O要求を受信すると、工程720では、そのDOMサブモジュールは、I/Oオペレーションを受ける仮想ディスクオブジェクトの特定のコンポーネントオブジェクト(例えば、ストライプ)のそれらのコーディネータノードを識別する(例えば、いくつかの実施形態では、メモリ内メタデータデータベースを再び参照することにより)。例えば、I/OオペレーションがRAID 0構成の複数のストライプ(例えば、複数のコンポーネントオブジェクト)にまたがれば、DOMサブモジュール340は、I/Oオペレーションを分割し、2つのストライプに対応する関連コンポーネントオブジェクトの各々のコーディネイトノードへ当該I/O要求を適切に送信し得る。工程725では、仮想ディスクオブジェクトのコーディネータノードのDOMサブモジュールは、識別されたコンポーネントオブジェクトのコーディネータノードのDOMサブモジュールがI/Oオペレーション要求を行うことを要求し、工程730では、識別されたコンポーネントオブジェクトのこのようなコーディネータノードのDOMサブモジュールは、コンポーネントオブジェクトが格納されるローカルストレージリソースのI/Oオペレーションを行うためにそれらの対応するLSOMサブモジュールと相互作用する。
【0032】
有利には、本開示の実施形態はオブジェクト毎ベースで分散システム内のノードクラスタの分断耐性を提供する。ソフトウェアベースVSANでは、コンポーネントオブジェクトの定足数が最大で1つのパーティション内に存在するということを保証することにより、クラスタパーティションは、「分断脳」状況がクラスタ内に発生したとしてもクラスタ内の複合オブジェクトが一定レベルの可用性で依然として動作するように共存し得る。これまでの実施形態はハイパーバイザ内のVSANモジュール114について説明したが、代替実施形態は非仮想化従来型オペレーティングシステム内など他の文脈において仮想機器内(例えば、仮想マシンの内部)などで実行されるVSANモジュール114の機能を実現し得るということを認識すべきである。同様に、これまでの実施形態のいくつかはオブジェクトストア116内のファイルシステムオブジェクトおよび仮想ディスクオブジェクトのストレージに焦点を合わせたが、他の多くのタイプのオブジェクトがオブジェクトストア116内で格納され得るということを認識すべきである。例えば、名前空間またはファイルシステムオブジェクトおよび仮想ディスクオブジェクトに加えて、いくつかの実施形態はさらに、オブジェクトストア116内にVMスワップエリアオブジェクト、メモリチェックポイントオブジェクトおよび任意の他のオブジェクトを格納し得る。上述のいくつかの実施形態では、メモリ内メタデータデータベースはオブジェクト生成中とI/Oオペレーション中の両方で利用される。別の実施形態では、複数のメタデータデータベースが利用され得る。例えば、1つの別の実施形態では、例えばオブジェクトの各コーディネータノードは、I/Oオペレーション中に使用されるがクラスタ110内のノードを介して必ずしも分散されないオブジェクトのそれ自身のメモリ内状態を維持する(例えば、未マーシャル化(unmarshalled)RAIDツリーを有するデータ構造として)。同様に、いくつかの実施形態では、メモリ内メタデータデータベース(例えば、オブジェクトメタデータ情報だけでなくホスト、ディスク情報も含む)は、それらのコーディネータノードにより、オブジェクトのために格納された一貫性データから再生成され得るということを認識すべきである。
【0033】
一般的に言えば、本明細書に記載の様々な実施形態は、コンピュータシステム内に格納されたデータに関わる様々なコンピュータ実施型オペレーションを採用し得る。例えば、これらのオペレーションは物理量の物理マニピュレーションを必要とし得る。通常、必ずしもではないが、これらの量は電気的または磁気的信号の形式を取り得、これらまたはその代表値は格納され、転送され、合成され、比較され、またはそうでなければマニピュレートされることができる。さらに、このようなマニピュレーションは、製造、識別、判断、または比較などの観点でしばしば参照される。1つまたは複数の実施形態の一部をなす本明細書に記載の任意のオペレーションは、有用なマシンオペレーションであり得る。加えて、1つまたは複数の実施形態はまた、これらのオペレーションを行うためのデバイスまたは装置に関する。上記装置は、特別に必要な目的のために特に構築され得る、またはコンピュータ内に格納されたコンピュータプログラムにより選択的に活性化または構成される汎用コンピュータデバイスであり得る。特に、様々な汎用マシンが本明細書の教示に従って書かれたコンピュータプログラムと共に使用され得る、または必要な動作を実行するためにより専用化された装置を構築することがより便利かもしれない。
【0034】
本明細書に記載の様々な実施形態は、携帯型デバイス、マイクロプロセッサシステム、マイクロプロセサベースまたはプログラム可能民生電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成と共に実施され得る。
【0035】
1つまたは複数の実施形態が、1つまたは複数のコンピュータ可読媒体内に具現化された1つまたは複数のコンピュータプログラム、または1つまたは複数のコンピュータプログラムモジュールとして実施され得る。用語「コンピュータ可読媒体」は、その後コンピュータシステムに入力されることができるデータを格納することができる任意のデータストレージデバイスを指す。コンピュータ可読媒体は、コンピュータプログラムをコンピュータにより読まれることを可能にするやり方で具現化する任意の既存技術または今後開発される技術に基づき得る。コンピュータ可読媒体の例としては、ハードディスク駆動装置、ネットワーク付属ストレージ(NAS:network attached storage)、読み取り専用メモリ、ランダムアクセスメモリ(例えば、フラッシュメモリ装置)、CD(コンパクトディスク)、CD−ROM、CD−RまたはCD−RW、DVD(デジタルバーサタイルディスク)、磁気テープ、他の光学的および非光学的データストレージデバイスが挙げられる。コンピュータ可読媒体はまた、コンピュータ可読コードが分散されたやり方で格納され実行されるように、ネットワーク結合されたコンピュータシステム上に分散され得る。
【0036】
1つまたは複数の実施形態が理解の明確のために詳しく説明されたが、いくつかの変更と修正が本開示の範囲内でなされ得るということは明らかである。したがって、記載の実施形態は例示的であって制限的でないと考えるべきであり、特許請求の範囲は本明細書に記載された詳細に限定されなく、請求項の範囲と均等物内で修正され得る。特許請求の範囲において、要素および工程のうちの少なくとも一方は特許請求範囲に明示的に示されない限り動作の任意特定順序を意味しない。
【0037】
加えて、説明した仮想化方法は通常、特定のハードウェアシステムと整合するインターフェースを仮想マシンが提示するものと仮定してきたが、説明した方法は、任意特定のハードウェアシステムに直接対応しない仮想化と併せて使用され得る。様々な実施形態による仮想化システムは、ホストされた実施形態、ホストされない実施形態、またはこれら2つの差異をあいまいにする傾向がある実施形態として実施され得、すべて想定される。さらに、様々な仮想化オペレーションは、ハードウェアで完全にまたは部分的に実施され得る。例えば、ハードウェア実施形態は、非ディスクデータを安全にするためにストレージアクセス要求の修正のための参照テーブルを採用し得る。
【0038】
仮想化の程度にかかわらず、多くの変形、修正、追加、改良が可能である。したがって、仮想化ソフトウェアは、仮想化機能を実行するホスト、コンソール、またはゲストオペレーティングシステムのコンポーネントを含むことができる。複数のインスタンスが、単一インスタンスとして本明細書に記載の構成要素、動作、または構造に対し設けられ得る。最後に、様々な構成要素、動作、データストレージ間の境界はいささか任意的であり、特定のオペレーションが特定の例示的構成の文脈の中で示される。機能の他の割り振りが想定され、1つまたは複数の実施形態の範囲に入り得る。一般的に、例示的構成において別個の構成要素として提示された構造と機能は組み合わせられた構造または構成要素として実現され得る。同様に、単一構成部品として提示された構造と機能は別々の構成要素として実現され得る。これらおよび他の変形、修正、追加、改良は添付特許請求の範囲に入り得る。