(58)【調査した分野】(Int.Cl.,DB名)
ネットワーク内の第1のノードで、少なくとも一つのオブジェクトを含む記憶ボリュームをディスマウントする命令を受けて、前記記憶ボリュームに対する排他ロックの取得を試行するステップと、
前記試行が不成功である場合に、
前記記憶ボリュームにアクセスしている複数のプロセスのそれぞれの内部ハンドルテーブルにアクセスすることにより、前記記憶ボリュームでオブジェクトを特定し、前記内部ハンドルテーブルのうちの一つにおいて前記オブジェクトを参照するハンドルを特定することと、
前記ハンドルを閉じること、とを実行するステップであって、前記特定することと前記閉じることは、前記オブジェクトを参照している前記ハンドルがなくなるまで、前記ハンドルに対して繰り返される、ステップと、
全ての前記ハンドルが閉じられた後に、前記記憶ボリュームに対する前記排他ロックを取得するステップと、
前記排他ロックを取得した後に前記記憶ボリュームをディスマウントするステップと、
を含む方法をコンピュータシステムに実行させるコンピュータプログラム。
前記動作が、前記初回取得試行の前に、前記記憶ボリューム用のファイルバッファから前記記憶ボリュームにキャッシュデータを書き込むことをさらに含む、請求項7に記載の製品。
【図面の簡単な説明】
【0012】
【
図1】本発明にかかる実施形態を実装できるクラスタ化されたネットワークの一実施例の要素を示すブロック図である。
【
図2】本発明にかかる実施形態を実装できるコンピュータシステムの一実施例を示すブロック図である。
【
図3A-3C】本発明の一実施形態にかかる記憶ボリュームのマウント/ディスマウントを示すブロック図である。
【
図4】本発明の一実施形態にかかるプロセスおよび関連付けられたハンドルテーブルを示すブロック図である。
【
図5】本発明の一実施形態にかかるハンドルテーブルの一実施例である。
【
図6】本発明の一実施形態にかかる記憶ボリュームをディスマウントし、再マウントするためのコンピュータ実装されたプロセスのフローチャートである。
【
図7】本発明の一実施形態にかかる記憶ボリュームをディスマウントするためのコンピュータ実装されたプロセスのフローチャートである。
【
図8】本発明の別の実施形態にかかる記憶ボリュームをディスマウントするためのコンピュータ実装されたプロセスのフローチャートである。
【0013】
本開示の各種実施形態を詳しく参照する。本開示の実施例が添付の図面に示されている。図面は、これらの実施形態に関して記載されたものであるが、本開示をこれらの実施形態に制限することを意図するものではないものと理解されたい。本開示はむしろ、代替物、変形物、および均等物を網羅することを意図するものであり、これらは、添付の特許請求の範囲によって定められる本開示の精神および範囲内に含まれ得る。さらに、本開示に関する以下の詳細な説明では、本開示を完全に理解してもらうために、数々の具体的な詳細が記載されている。ただし、本開示はこれらの具体的な詳細がなくとも実施され得ることが理解されよう。他の事例では、本開示の態様を無用に分かりにくくするのを避けるために、周知の方法、手順、構成要素、および回路が詳しく記載されていない。
【0014】
続く詳細な説明には、手順、論理ブロック、処理、およびコンピュータメモリ内のデータビットに対する操作の象徴的表現という観点から提示されている部分もある。これらの説明および表現は、データ処理技術の当業者により、自らの仕事の本質を他の当業者に最も効果的に伝える目的で使用される手段である。本出願では、手順、論理ブロック、プロセスなどが、所望の結果につながる首尾一貫した順序のステップまたは命令となるように考案されている。ステップは、物理量の物理的操作を用いるものである。必ずということではないが、通常であれば、これらの量は、コンピュータシステムで記憶、転送、結合、比較、およびその他の操作が可能な電気または磁気信号という形態をとる。これらの信号を処理、ビット、値、要素、記号、文字、サンプル、ピクセル等と称することは、主に広く使用されているという理由で、時として便利であるということがわかっている。
【0015】
ただし、これらの用語および同様の用語はすべて、適切な物理ボリュームと関連付ける必要があり、これらのボリュームに適用された便利なラベルに過ぎないということを念頭に置くべきである。以下の説明から明らかであると別段記載されていない限り、本開示全体を通じて、「特定する」、「ディスマウントする」、「閉じる」、「取得する」、「(再)マウントする」、「(再)命名する」こと、「書き込む」、「試行する」こと、「アクセスする」、「判断する」こと、「記録する」、「もたらす」、「表す」などの用語を用いた説明は、コンピュータシステムまたは同様の電子計算装置またはプロセッサ(例えば
図2のシステム210)の動作およびプロセス(例えば、
図6、
図7および
図8のフローチャート600、700および800)を言及するものと理解される。コンピュータシステムまたは同様の電子計算装置は、コンピュータ・システム・メモリ、レジスタ、あるいはその他のかかる情報記憶装置、伝送装置または表示装置内の物理的な(電子的な)量で表されるデータを操作し、変形させる。
【0016】
本明細書に記載された実施形態は、プログラムモジュールなど、1つもしくは複数のコンピュータまたは他の装置によって実行される何らかの形態のコンピュータ読み取り可能な記憶媒体に存在するコンピュータ実行可能な命令という一般的文脈で説明され得る。例えば、この例に限らないが、コンピュータ読み取り可能な記憶媒体は、コンピュータ記憶媒体と通信媒体とを備え得る。一般に、プログラムモジュールは、特定のタスクを実行するか、あるいは特定の抽象的なデータ型を実装するルーチン、プログラム、オブジェクト、構成要素、データ構造体などを含む。プログラムモジュールの機能は、各種実施形態において所望どおりに結合あるいは分散され取得する。
【0017】
コンピュータ記憶媒体は、コンピュータ読み取り可能な命令、データ構造体、プログラムモジュールまたは他のデータなど、情報を記憶するための任意の方法または技術でも実装された揮発性および不揮発性、ならびに着脱可能および着脱不可の媒体を含む。コンピュータ記憶媒体は、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、電気的に消去可能なプログラマブルROM(EEPROM)、フラッシュメモリあるいは他のメモリ技術、コンパクトディスクROM(CD−ROM)、デジタル万能ディスク(DVD)、あるいは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、あるいは他の磁気記憶装置、または所望の情報を記憶する目的で使用でき、かつその情報にアクセスして取得できるその他任意の媒体を含むが、これらに限定されない。
【0018】
通信媒体は、コンピュータ実行可能な命令、データ構造体、およびプログラムモジュールを具現化することができ、任意の情報配送媒体を含む。非限定的な例として、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体と、音響、無線周波(RF)、赤外線および他のワイヤレス媒体などのワイヤレス媒体を含む。上記のいずれの組み合わせも、コンピュータ読み取り可能な媒体の範囲内に含めることができる。
【0019】
本開示にかかる実施形態は概して、共有記憶ボリュームをスマートにディスマウントおよびマウントするための方法およびシステムを提供し、それにより、アプリケーションの実行を、ファイルシステムを破損することなく、あるシステムまたはノードから別のシステムまたはノードへと移せるようにする。ボリュームをディスマウントする前に、ボリュームにアクセスしているアプリケーションが存在する場合には、そのアプリケーションのアクティブハンドルが閉じられ、ボリューム・ファイル・バッファがフラッシュされることにより、ファイルシステムがフェイルオーバー後も整合を保つ。
【0020】
図1は、本発明にかかる実施形態を実装できるクラスタ化されたネットワーク100の一実施例の要素を示すブロック図である。
図1の実施例では、ネットワークが、N(例えば32)個のノードまたはシステム(例えばコンピュータシステムまたはサーバー)を含み、各々が共有記憶装置130に連結されている。ネットワーク100は、(例えば、メンテナンス、アップグレード、パッチのための)予定イベント、あるいは予定外イベント(例えば、ノードが予期せず操作不能になるなど)に対応して、自身のサービスをあるノードから別のノードへと移す機能(例えばフェイルオーバー)を提供することによってサービス(例えばアプリケーション)の有効性を改善する高可用性クラスタ(HAC)と称されることがある。それらのサービスは、例えば、データベース、ファイル共有、および電子商取引を含むことができる。
【0021】
高可用性を実現するために、クラスタソフトウェアを使用して、アプリケーションおよびノード/システムのステータスを監視し、予定イベントまたは予定外イベントに対応して、アプリケーションの実行をあるシステムから別のシステムへと自動的に移すことができる。
図1の実施例では、クラスタソフトウェアが、N個のシステムの各々で動作するエージェント112を備える。エージェント112は、各システムで動作しているアプリケーションを監視することができ、クラスタソフトウェアによって監視および制御されるアプリケーションの実行の開始、停止、および移動と関連付けられた動作をトリガーすることができる。
【0022】
システム1、...、Nで実行中のアプリケーションのすべてがクラスタソフトウェアによって監視および/または制御されるとは限らない。説明を容易にするために、クラスタソフトウェアによって監視および制御されるアプリケーションを、本明細書ではプライマリアプリケーションと称し、他のアプリケーションをセカンダリアプリケーションと称する。例えば、プライマリアプリケーションは、高可用性アプリケーション(高水準の有用性が要求または所望されるアプリケーション)であり得る。
【0023】
図1の実施例では、共有記憶装置130が、データを記憶する目的で使用される1つもしくは複数の物理ディスク、LUN(小型コンピュータ・システム・インターフェース(SCSI)論理ユニット)、または他のタイプのハードウェアなど、1つもしくは複数の物理記憶装置を含み得るデータ記憶システムである。記憶ボリューム132は、単一の物理的なディスク上に存在し得るか、あるいはボリュームマネージャ(図示せず)の制御下にある複数の物理ディスク(仮想ディスクと称される)にまたがって存在し得る1つもしくは複数のデータのボリューム(ブロック)を表す。記憶ボリューム132は、データが記憶ボリューム132に書き込まれる前にデータをバッファするボリューム・ファイル・バッファ131を備えることができる。記憶ボリューム132は、システム1で実行中のプライマリアプリケーション110およびセカンダリアプリケーション111によってアクセスすることができる。
【0024】
図2は、本開示を実装するのに適したコンピュータシステム210のブロック図を示す。以降の説明では、各種多数の構成要素および要素が記載されている。それらの構成要素の各種組み合わせおよびサブセットは、
図1との関連で言及された装置を実装する目的で使用することができる。例えば、システム1、...、Nはそれぞれ、コンピュータシステム210の一部を除く多くを用いるフル機能のコンピュータシステムであり得るか、それらの装置によって提供される機能をサポートするのに必要なそれらの機能のサブセットだけを利用し得る。例えば、サーバーは、キーボードまたはディスプレイを必要としない場合があり、データ記憶およびデータアクセスの機能と、かかる機能の管理とをサポートする比較的珍しいオペレーティングシステムを実行し得る。
【0025】
図2の実施例では、コンピュータシステム210が、コンピュータシステムの主要サブシステムを相互接続するバス212を備える。これらのサブシステムは、セントラルプロセッサ214と、システムメモリ217と、入出力コントローラ218と、オーディオ出力インターフェース222を介するスピーカシステム220などの外部音声装置と、ディスプレイアダプタ226を介するディスプレイスクリーン224などの外部装置と、シリアルポート228および230と、キーボード232(キーボードコントローラ233とを仲介)と、記憶装置インターフェース234と、フロッピーディスク238を受容するように動作可能なフロッピー・ディスク・ドライブ237と、ファイバ・チャネル・ネットワーク290と接続するように動作可能なホスト・バス・アダプタ(HBA)・インターフェース・カード235Aと、SCSIバス239に接続するように動作可能なHBAインターフェースカード235Bと(SCSIの代替は、統合開発環境(IDE)およびシリアルATA(SATA)を含む)と、光学ディスク242を受容するように動作可能な光学ディスクドライブ240と、を備える。また、マウス246(または他のポイント&クリック装置、シリアルポート228を介してバス212に連結)と、モデム247(シリアルポート230を介してバス212に連結)と、ネットワークインターフェース248(バス212に直接連結)と、も備える。モデム247、ネットワークインターフェース248、またはその他何らかの方法を使用して、
図1のネットワーク100に接続を提供することができる。
【0026】
図2のバス212は、セントラルプロセッサ214とシステムメモリ217との間でのデータ通信を可能にするものであり、上記のとおり、ROMまたはフラッシュメモリとRAM(図示せず)とを備え得る。RAMは一般に、オペレーティングシステムおよびアプリケーションプログラムが読み込まれるメインメモリである。ROMまたはフラッシュメモリは、他のコードと共に、周辺構成要素との相互動作など、基本的なハードウェア動作を制御する基本入出力システム(BIOS)を格納することができる。
【0027】
コンピュータシステム210に存在するアプリケーションは概して、ハード・ディスク・ドライブ(例えば固定ディスク244)、光学ドライブ(例えば光学ドライブ240)、フロッピー・ディスク・ユニット237、または他の記憶媒体など、コンピュータ読み取り可能な記憶媒体に記憶され、アクセスされる。アプリケーションは、ネットワークモデム247またはインターフェース248を介してアクセスされたときにアプリケーションおよびデータ通信技術に従って変調される電子信号という形態であり得る。
【0028】
引き続き
図2を参照すると、記憶装置インターフェース234は、コンピュータシステム210の他の記憶装置インターフェースと同様、固定ディスクドライブ244など、情報の記憶装置および/または取得のために標準的なコンピュータ読み取り可能な記憶媒体に接続することができる。固定ディスクドライブ244は、コンピュータシステム210の一部であってよく、あるいは別々になっており、他のインターフェースシステムを通じてアクセスされるようになっていてもよい。モデム247は、電話リンク経由でリモートサーバーとの、あるいはインターネット・サービス・プロバイダ(ISP)経由でインターネットとの直接接続を提供し得る。ネットワークインターフェース248は、POP(通信アクセスポイント)経由でのインターネットとの直接ネットワークリンクを介してリモートサーバーとの直接接続を提供し得る。ネットワークインターフェース248は、デジタル移動電話接続、セルラー方式デジタル・パケット・データ(CDPD)接続、デジタル衛星データ接続などを含む無線技法を用いてかかる接続を提供してもよい。
【0029】
その他多くの装置またはサブシステム(
図2で明示せず)が、同様の方法で接続されてもよい(例えば、文書スキャナ、デジタルカメラなど)。逆に言えば、本開示を実施するのに、
図2に示す装置のすべてが存在する必要があるというわけではない。これらの装置およびサブシステムは、
図2に示すものとは別の方法で相互接続することもできる。
【0030】
図2で示すようなコンピュータシステムの動作は、当該技術において十分に周知されており、本出願では詳述しない。本開示を実装するコードは、システムメモリ217、固定ディスク244、光学ディスク242、またはフロッピーディスク238のうちの1つもしくは複数などのコンピュータ読み取り可能な記憶媒体に記憶することができる。コンピュータシステム210に設けられたオペレーティングシステムは、MS−DOS(登録商標)、MS−WINDOWS(登録商標)、OS/2(登録商標)、UNIX(登録商標)、Linux(登録商標)、または別の公知のオペレーティングシステムであってよい。
【0031】
さらに、本明細書に記載された信号に関して、当業者であれば、信号が第1のブロックから第2のブロックへと送信可能であること、あるいは、信号がブロック間で改変(例えば、増幅、減衰、遅延、ラッチ、バッファ、逆転、フィルタリング、または他の方法による改変)可能であることを認識するであろう。上記実施形態の信号は、あるブロックから次のブロックへと送信されるものと特徴付けられるが、本開示の他の実施形態は、信号の情報的側面および/または機能的側面がブロック間で送信される限り、改変された信号を、かかる直接送信された信号に代わって含んでもよい。関与する回路に物理的制限がある(例えば、いくらかの減衰および遅延が必然的に生じる)ことから、ある程度までは、第2のブロックにおける信号入力を、第1のブロックからの第1の信号出力から派生した第2の信号として概念化することができる。そのため、本明細書で使用されるとおり、第1の信号から派生した第2の信号は、第1の信号または第1の信号が改変されたものを含み、改変の原因が回路上の制限か、第1の信号の情報的側面および/または最終的な機能的側面を変更しない他の回路要素の通過かを問わない。
【0032】
上記のとおり、本開示にかかる実施形態は、共有記憶ボリュームをスマートにディスマウントおよびマウントするための方法およびシステムを提供し、それにより、ファイルシステムを破損することなく、アプリケーションをあるシステムから別のシステムへと移せるようにする。下記の説明が単一のアプリケーションを言及する場合であっても、その説明は複数のアプリケーションへと容易に拡大することができる。
【0033】
まず
図3Aを参照すると、プライマリアプリケーション310およびセカンダリアプリケーション311が、システム1で実行中である。
図3Aの実施例では、アプリケーション310および311が、記憶ボリューム132(例えばボリューム名「F:\」)から、データを読み出し、かつ/または書き込むことができる。中でも特に、記憶ボリューム132にデータを書き込むアプリケーションを対象としているが、本開示はそのタイプのアプリケーションに制限されない。なお、アプリケーション330および331は、システム1にマウントされている間、共有記憶ボリューム132にアクセスすることができず、システム1からディスマウントされ、システムNにマウントされれば、共有記憶ボリューム132にアクセスできるようになる。
【0034】
図3Bの実施例では、システム1でプライマリアプリケーション310の実行を停止して、システム2で冗長プライマリアプリケーション310の実行を開始することが決定される。換言すれば、プライマリアプリケーション310をシステム1からシステム2にフェイルオーバーすることが決定される。上記のとおり、この決定は、予定または予定外の停止の結果であり得る。プライマリアプリケーション310をフェイルオーバーするために、そのアプリケーション、ならびに記憶ボリューム132(プライマリアプリケーション310によって使用されている記憶ボリューム)を使用している他のアプリケーションがシャットダウンされ、その後記憶ボリューム132をディスマウントできるようになる。
【0035】
プライマリアプリケーション310は、クラスタソフトウェア(例えば
図1のエージェント112)によってシャットダウンすることができる。ただし、本明細書で先述のとおり、セカンダリアプリケーション311は、クラスタソフトウェアの制御下にない。一実施形態では、セカンダリアプリケーション311をシャットダウンするのに、
図6に関連して後述する方法が使用される。
【0036】
引き続き
図3Bを参照すると、記憶ボリューム132へのアクセス権を有するプライマリおよびセカンダリアプリケーションがシャットダウンされた後に、その記憶ボリューム132をディスマウントすることができる。それらの動作が実行されると、プライマリアプリケーション310をシステム1からシステム2にフェイルオーバーすることができる。
【0037】
ここで
図3Cを参照すると、記憶ボリューム132が再マウントされた後、プライマリアプリケーション310はシステム2にフェイルオーバーすることができる。より具体的には、
図3Cの実施例において、記憶ボリューム132はシステム2で「F:\」として再マウントされ、システム2でプライマリアプリケーションが開始される。その結果、記憶ボリューム132は、システム2で動作するその他任意のアプリケーションによって、(システムに2を現在実行中の)プライマリアプリケーション310によってアクセスすることができる。
【0038】
一般的に言って、システム1、2、...、N上で稼働中のアプリケーションの各々は、1つもしくは複数のプロセスと関連付けられ得る。ここで
図4の実施例を参照すると、プロセス1はセカンダリアプリケーション311と関連付けられており、プロセス2は異なるアプリケーションと関連付けられており、プロセスMはさらに別のアプリケーションと関連付けられている。説明が単一のプロセスを言及する場合であっても、その説明は複数のプロセスへと容易に拡大することができる。
【0039】
内部ハンドルテーブルは、各プロセスと関連付けられている。一般に、ハンドルテーブルとは、特定のプロセスと関連付けられたオペレーティングシステム固有のデータ構造体のことであり、そのプロセスによって開かれるオブジェクト(例えば実行オブジェクト)を特定(列記)する。一般にハンドルテーブルは、システム/ノードあたりのプロセスごとに存在する。
図4の実施例では、ハンドルテーブル1がプロセス1と関連付けられており、プロセス1はシステム1(
図3A)で実行中のセカンダリアプリケーション311と関連付けられている。同様に、ハンドルテーブル2はプロセス2と関連付けられており、プロセス2は、クラスタ化されたネットワーク100(
図1)におけるシステム(システム1または別のシステム)のうちの1つで実行中の異なるアプリケーションと関連付けられているという具合である。
【0040】
一実施形態では、各ハンドルテーブルがいくつかのエントリを含んでおり、各エントリはオープンハンドルを特定する。例えば、ハンドルテーブル1は、エントリ(オープンハンドル)1、2、...、Kを含む。あるプロセスのハンドルテーブルに記載されている各ハンドルは、そのプロセスと関連付けられたオブジェクト(例えば実行オブジェクト)に対応する。したがって、ハンドルテーブル1は、プロセス1と関連付けられたオブジェクトのリストを含む。
【0041】
図4に示すとおり、オブジェクトのエントリは、オブジェクトと関連付けられた一意の名前、オブジェクトタイプ、およびオブジェクトと関連付けられた権限などの情報を含むが、これらに制限されない。以降の説明からわかるように、「ファイル」タイプのオブジェクトを特に対象としている。
【0042】
図5は、本発明の一実施形態にかかるハンドルテーブル1に含まれ得る情報のタイプの一例を示す。ハンドルテーブル1は、オブジェクト、オブジェクトのタイプ、および関連付けられた権限の完全名を含む。ファイルタイプのオブジェクトの場合、完全名は、ファイルが存在する記憶ボリュームの識別情報を含む完全ファイルパスを含む。
図5には、完全名/完全ファイルパスが示されておらず、マウントされたボリュームの名前だけが示されている。例えば、ハンドル1は、「F:\」(
図1の共有記憶装置130にある記憶ボリューム132)にマッピングされているファイルタイプのオブジェクトと関連付けられており、ハンドル4は、異なる記憶ボリューム「C:\」(図示せず)にマッピングされているファイルタイプのオブジェクトと関連付けられている。ファイルタイプのオブジェクトの場合、権限のタイプは、読み出しのみ、書き込みのみ、および読み書き(読み出しおよび書き込み)を含み得る。
【0043】
図6は、本発明の一実施形態にかかる記憶ボリュームをディスマウントし、再マウントするためのコンピュータ実装されたプロセスのフローチャート600である。
図7は、本発明の一実施形態にかかる記憶ボリュームをディスマウントするためのコンピュータ実装されたプロセスのフローチャート700である。
図8は、本発明の別の実施形態にかかる記憶ボリュームをディスマウントするためのコンピュータ実装されたプロセスのフローチャート800である。フローチャート600、700、および800は、(例えば
図2のシステム210における)何らかの形態のコンピュータ読み取り可能な記憶媒体に記憶されているコンピュータ実行可能な命令として実装することができる。
【0044】
一実施形態において、
図6のブロック602で、すべてのキャッシュデータ(例えばNew Technology File System(NTFS)データ)が
図1の記憶ボリューム132(例えば「F:\」という名前の記憶ボリューム)に書き込まれるように、ボリューム・ファイル・バッファ131(
図1)がフラッシュされる。この機能は、オペレーティングシステムによって提供されるアプリケーション・プログラミング・インターフェース(API)によって発行されたコマンドまたは命令を受けて実行することができる。
【0045】
一実施形態において、ブロック604で、記憶ボリューム132(F:\)に
対する排他ロックの取得が試行される。この機能は、オペレーティングシステムによって提供される別のAPIによって実行することができる。
【0046】
ブロック606で排他ロックが取得できれば、フローチャートがブロック618へと進む。ただし、排他ロックの取得試行が失敗した場合には、まだ記憶ボリューム132(F:\)にアクセスしている少なくとも1つのアプリケーション/プロセスが存在することを示す。その場合には、フローチャート600がブロック608へと進む。ブロック604で使用されたAPIは、排他ロックを取得できなかったことを示すコマンドまたは命令を発行することができる。
【0047】
ブロック608で、それぞれのプロセスによって開かれるオブジェクト(例えばファイル)を特定するために記憶ボリューム132にアクセスするシステムにおける各プロセスの内部ハンドルテーブル(
図4および
図5)が存在する。すなわち、システム1に存在するプロセスに対応する各ハンドルテーブル(
図4)にアクセスして、それらのプロセスのいずれかが記憶ボリューム132(F:\)にアクセスしているかどうかを判断する。
【0048】
ブロック610で、システムにおける各プロセスの内部ハンドルテーブルに記載されたエントリ(オープンハンドル)ごとに、エントリによって表されるオブジェクトのタイプが特定される。具体的には、「ファイル」タイプと特定されたエントリ(ハンドル)が特定される(
図5を参照)。一実施形態では、ハンドルテーブルから、ファイルと入力されたオブジェクトだけが検索される。記憶ボリューム132(F:\)にアクセス(読み出しおよび/または書き込み)するオブジェクトであることから、ファイルタイプのオブジェクトを特に対象としている。
【0049】
ブロック612で、ブロック610で特定されたオブジェクトのファイルタイプごとに、オブジェクトの名前(例えばオープン・ファイル・ハンドルのファイルパス)が判断される(
図5を参照)。ファイルタイプのオブジェクトが記憶ボリューム132(F:\)にマッピングされる名前(ファイルパス)を有する場合には、そのハンドルが閉じられる。一実施形態では、付与されたアクセス権限(例えば、読み出しモード、書き込みモード、または読み出し/書き込みモード)も判断される。
【0050】
ブロック614で、オブジェクトの名前が、ディスマウントされる記憶ボリューム132のファイルに対応する場合には、オブジェクトのオープンハンドルがアプリケーション/プロセスに代わって閉じられる。プロセスが、ディスマウントされるボリューム以外の記憶ボリュームのファイルにアクセスしている場合には、ディスマウントされる記憶ボリューム(記憶ボリューム132)に存在するそれらのオブジェクトのハンドルだけが閉じられ、他の記憶ボリュームにある他のファイルを対象とするハンドルを開いたままとなる。例えば、
図5を参照すると、ハンドル1および3は、記憶ボリューム132(F:\)を参照するので閉じられるが、ハンドル4は、異なる記憶ボリューム(C:\)を指し示しているので、(ファイルタイプのオブジェクトと関連付けられていても)閉じる必要がない。オペレーティングシステムによって提供されるAPIを使用して、適切なオープンハンドルを閉じることができる。
【0051】
何かの理由でハンドルを閉じることができない場合には、プロセス自体を終了することができる。プロセスを終了した場合、そのプロセスは、記憶ボリューム132がディスマウントされた後に再開することができる。
【0052】
図6のブロック616で、上記矯正措置が、今後の参照のために記録されてもよい。
【0053】
その後、フローチャート600はブロック602に戻る。換言すれば、今述べた動作の実行中に蓄積されたNTFSデータが記憶ボリューム132に書き込まれるように、ファイルバッファ131が再度フラッシュされる。ブロック604で、記憶ボリューム132に
対する排他ロックの取得が改めて試行される。(例えば、プロセスのうちの1つが新しいハンドルを開いたという理由で)不成功となった場合には、排他ロックが取得されるまで、今述べた動作が実行される。
【0054】
ブロック618で、記憶ボリューム132の排他ロックが取得されると、そのボリュームをディスマウントすることができる。
【0055】
ブロック620で、記憶ボリューム132がマウント(再マウント)され、フェイルオーバーシステム/ノード(例えば
図3Cのシステム2)がこのボリュームを利用できるようになる。
【0056】
本発明の一実施形態によれば、3つの可能な動作モードがある。モード1では、記憶ボリューム132に
対する排他ロックが取得されないと、クラスタソフトウェアがそのボリュームをオフラインにするための試行を中止する。モード1はその後、手動介入と矯正ステップとに依存する。モード2では、クラスタソフトウェアが、
図6に記載した方法で記憶ボリューム132をスマートにディスマウントする。モード3では、記憶ボリューム132に
対する排他ロックが取得されないと、記憶ボリュームが強制的にディスマウントされる。
【0057】
ここで
図7を参照すると、ブロック702で、記憶ボリュームをディスマウントする命令を受けて、記憶ボリューム132(
図1)
内のオブジェクトが特定される。この動作の前に、かつディスマウント命令を受けて、キャッシュデータがファイルバッファ131(
図1)から記憶ボリューム132に書き込まれてもよく、
また、そのボリュームに
対する排他ロック
を取得するための初
回試行が行われてもよい。
【0058】
ブロック704で、オブジェクトを参照するハンドルが閉じられる。一実施形態では、その記憶ボリュームを参照するハンドルテーブル内のエントリを特定することにより、1つもしくは複数のハンドルが、記憶ボリューム132にアクセスしている各プロセスの内部ハンドルテーブル(
図4および
図5)に最初にアクセスすることによって閉じられる。より具体的には、一実施形態において、ハンドルテーブルにあるファイルタイプのオブジェクトが特定され、ファイルタイプのオブジェクトの名前がアクセスされ、その名前に含まれるファイルパスが記憶ボリューム132内のファイルに対応するかどうかが判断される。一実施形態では、ログが更新されて、オープンハンドルが閉じられたということを記録する。
【0059】
ブロック706で、記憶ボリューム132に
対する排他ロックが取得される。排他ロックを取得する前に、キャッシュデータがファイルバッファ131から記憶ボリューム132に再度書き込まれてもよい。
【0060】
ブロック708で、記憶ボリューム132をディスマウントできるようになる。記憶ボリューム132は、異なるシステム/ノードで再びマウントされ、その後アプリケーションがフェイルオーバーされる。
【0061】
ここで
図8を参照すると、ブロック802で、記憶ボリュームに
対する排他ロックの初回取得試行の失敗を受けて、各プロセスの内部ハンドルテーブルにアクセスする。この初回試行の前に、おそらくはディスマウント命令を受けて、キャッシュデータがファイルバッファ131(
図1)から記憶ボリューム132(
図1)に書き込まれてもよい。
【0062】
ブロック804で、内部ハンドルテーブル(
図4および5)にあり、記憶ボリューム132を参照するエントリが特定される。より具体的には、本明細書に既述のとおり、一実施形態において、ハンドルテーブルにあるファイルタイプのオブジェクトが特定され、ファイルタイプのオブジェクトの名前がアクセスされ、その名前に含まれるファイルパスが記憶ボリューム132内のファイルに対応するかどうかが判断される。
【0063】
ブロック806で、ハンドルテーブル内のエントリに対応するハンドルが閉じられる。
【0064】
その後ブロック808で、記憶ボリューム132に
対する排他ロック
を取得
するための2度目の試行が行われる。2度目の試行を行う前に、キャッシュデータがファイルバッファ131から記憶ボリューム132に再度書き込まれてもよい。
【0065】
排他ロックが成功した場合には、ブロック810で、記憶ボリューム132をディスマウントすることができ、続いて(アプリケーションのフェイルオーバー前に)マウントすることができる。
【0066】
要約すると、本開示の実施形態によれば、プライマリアプリケーションが停止した後に共有記憶ボリュームをディスマウントすることができ、その結果、ファイルシステムを破損することなく、アプリケーションを停止し、別のノード/システムで再開することができる。記憶ボリュームをディスマウントする前、およびプライマリアプリケーションを停止した後に、そのボリュームにアクセスしているセカンダリアプリケーション/プロセスが存在する場合には、ファイルシステムがフェイルオーバー後も整合を保つように、そのセカンダリアプリケーション/プロセスのアクティブハンドルが閉じられ、ボリューム・ファイル・バッファがフラッシュされる。従来の手法と比較して、セカンダリアプリケーションのハンドルが容易に特定され、閉じられるので、記憶ボリュームを速やかにディスマウントすることができる。そのため、ダウンタイムが減少し、プライマリ(高可用性)アプリケーションの可用性が高まる。
【0067】
本開示にかかる実施形態は、物理環境および仮想環境で使用することができる。本開示にかかる実施形態は、フェイルオーバーに加え、障害復旧に使用することもできる。
【0068】
以上の記載内容は、具体的な実施形態を参照しながら説明目的で記載したものである。ただし、上記の代表的な説明は、すべてを網羅したり、本発明を開示された正確な形態に制限したりすることを意図していない。上記教示を鑑みて多くの改変および変形が可能である。これらの実施形態は、本発明およびその実践的な応用例を最もよく説明し、それによって他の当業者が、意図された特定の用途に適し取得する各種改変を用いて本発明および各種実施形態を最良に活用できるようにするために選択および記載されたものである。
【0069】
以上、本発明にかかる実施形態を記載してきた。本開示について、特定の実施形態で記載してきたが、本発明はかかる実施形態によって制限されると解釈されるべきでなく、下記の請求項に従って解釈されるものと理解されるべきである。