(57)【要約】分散ストレージに保管されたデータに対するリクエストを処理するように構成されている複数のノードのうち第１ノードをフェンシングアウトすることに関する技術が開示される。データベースシステムは、様々な実施形態において、第１ノードがメタデータサーバに保管されたカタログの更新を許可されていることを示す値を保管している。第１ノードがカタログを更新し、かつ、分散ストレージに対して書込むことを防止する決定に応答して、様々な実施形態において、データベースシステムは、第１ノードがカタログを更新するのを許可されていないことを示すように値を更新し、かつ、データを書込むために第１ノードに割り当てられた特定の部分に対する書込みオペレーションを防止するように、分散ストレージに指示する。
2020529668.tif 000002
【特許請求の範囲】
【請求項１】
分散ストレージ内に保管されたデータベースシステムのデータに対するリクエストを処理するように構成されている複数のノードのうち第１ノードをフェンシングアウトする、データベースシステムのための方法であって、前記方法は、
前記データベースシステムのメタデータサーバ内に、前記第１ノードが前記メタデータサーバに保管された前記データベースシステムのカタログの更新するように許可されていることを示す識別子を保管するステップであって、前記第１ノードは、前記カタログを更新する以前に、前記識別子を調査するように構成されている、ステップと、
前記第１ノードが、前記カタログを更新すること、および、前記分散ストレージに書込むことを防止する決定に応答して、
前記メタデータサーバにおいて、前記第１ノードが前記カタログを更新するように許可されていないことを示す識別子を更新するステップ、および、
分散ストレージに対して、データ書込みのために前記第１ノードに割り当てられた特定の部分に対する書込みオペレーションを防止するように指示するステップ、
を含む、方法。
【請求項２】
前記複数のノードは、高可用性(ＨＡ)データベースクラスタを実装するために、ＨＡアプリケーションを実行するように構成されており、前記方法は、前記ＨＡアプリケーションによって実行される、
請求項１に記載の方法。
【請求項３】
前記方法は、さらに、
前記ＨＡアプリケーションが、前記分散ストレージにデータを書込むために前記複数のノードのうち第２ノードを選択するステップと、
前記第２ノードの選択に応答して、前記ＨＡアプリケーションが、前記第２ノードに識別子のコピーを保持させるステップであり、前記第２ノードは、前記カタログを更新する以前に、前記識別子のコピーと前記メタデータサーバ内に保管された識別子を比較するように構成されている、ステップと、
を含む、請求項２に記載の方法。
【請求項４】
前記方法は、さらに、
前記ＨＡアプリケーションが、前記第１ノードが前記分散ストレージに書込むことを防止するように決定を行うステップ、
を含む、請求項２または３に記載の方法。
【請求項５】
前記第１ノードは、
データを書込むために前記分散ストレージにおける部分のセットを割り当て、
前記部分のセットの割り当てに応答して、前記識別子が更新されたか否かを判断するために前記識別子を調査することを含めて、前記データベースシステムの前記カタログの更新するように試み、かつ、
前記識別子が更新されたとの判断に応答して、前記分散ストレージにおける部分の割り当てを中止する、ように構成されている、
請求項１乃至４いずれか一項に記載の方法。
【請求項６】
前記第１ノードは、
データを書込むために前記分散ストレージにおける部分のセットを割り当て、
前記部分のセットの割り当てに応答して、前記識別子が更新されたか否かを判断するために前記識別子を調査することを含めて、前記データベースシステムの前記カタログの更新するように試み、かつ、
前記識別子が更新されなかったとの判断に応答して、割り当てられた前記部分のセットを含むように前記カタログを更新する、ように構成されている、
請求項１乃至５いずれか一項に記載の方法。
【請求項７】
前記複数のノードのうち第２ノードは、
前記第１ノードによって割り当てられた部分を判断するために、前記データベースシステムの前記カタログをモニタリングし、かつ、
前記カタログを更新する前記第１ノードに応答して、前記第２ノードによって維持されているキャッシュを更新するために、割り当てられた前記部分のセットから読出すように前記指示を使用する、ように構成されている、
請求項６に記載の方法。
【請求項８】
前記第１ノードは、
前記メタデータサーバによって保管される前記識別子のインスタンスを保管し、
前記識別子の前記保管されたインスタンスと前記メタデータサーバによって保管される前記識別子を比較することによって、前記識別子が更新されたか否かを判断する、ように構成されている、
請求項１乃至７いずれか一項に記載の方法。
【請求項９】
前記分散ストレージは、
前記分散ストレージにおいて割り当てられた部分に対する複数のフラグを維持し、前記複数のフラグのうち１つは、所与の部分が前記第１ノードによって書込まれ得るか否かを示し、かつ、
書込みを防止するように指示されたことに応答して、前記特定の部分と関連する複数のフラグのうち１つを、前記特定の部分に対して書込みできないことを示すように設定する、ように構成されている、
請求項１乃至８いずれか一項に記載の方法。
【請求項１０】
前記第１ノードは、
クライアント装置からのリクエストをサービスするために、前記分散ストレージにおいてデータを書込むための１つまたはそれ以上の部分のセットを割り当て、
前記識別子が更新されていないとの判断に応答して、前記１つまたはそれ以上の部分のセットに係る１つまたはそれ以上の指示を提供するために、前記カタログのデータを更新する、ように構成されている、
請求項１乃至４および請求項７乃至９のいずれか一項に記載の方法。
【請求項１１】
データベースシステムであって、
データベースクラスタを実装するように構成されている複数のノードと、
前記複数のノードに対してアクセス可能であり、かつ、前記データベースシステムのデータを保管するように構成されている、分散ストレージと、
メタデータサーバであり、前記複数のノードのうちのアクティブノードが前記メタデータサーバによって維持されているデータベースカタログを更新するのを許可されていることを示す識別子を維持するように構成されている、メタデータサーバと、含み、
前記データベースシステムは、
前記アクティブノードが前記データベースカタログを更新すること、および、前記分散ストレージに対してデータを書込むことを防止するように決定し、かつ、
前記アクティブノードに対する防止の決定に応答して、
前記メタデータサーバにおいて、前記アクティブノードが前記データベースカタログを更新するのを許可されていないこと示すように前記識別子を変更し、
前記アクティブノードがデータ書込みのために割り当てられている特定の部分に対する書込みオペレーションを防止するように、前記分散ストレージに指示する、
ように構成されている、
データベースシステム。
【請求項１２】
前記アクティブノードは、
前記識別子の保管されたインスタンスが前記メタデータサーバによって維持されている前記識別子と一致しないと判断されたことに応答して、前記アクティブノードによって割り当てられた部分を示すために、前記データベースカタログの更新を中止する、
ように構成されている、請求項１１に記載のデータベースシステム。
【請求項１３】
前記データベースシステムは、
前記アクティブノードが前記データベースカタログを更新すること、および、前記分散ストレージに対してデータを書込むことを防止するように決定することに応答して、
前記分散ストレージにデータを書込むために、前記複数のノードのうちの別のアクティブノードを選択し、かつ、
前記別のアクティブノードに前記変更された識別子のインスタンスを保管させ、前記インスタンスは、前記変更された識別子がその後に変更されたか否かを判断するために使用可能である、
ように構成されている、請求項１１に記載のデータベースシステム。
【請求項１４】
前記データベースシステムは、
前記別のアクティブノードにインスタンスを保管させる以前に、前記別のアクティブノードに前記識別子を変更させることによって前記識別子を変更する、ように構成されており、
前記識別子は、数値である、
請求項１３に記載のデータベースシステム
【請求項１５】
実行可能なプログラム命令が保管されている非一時的コンピュータ読取可能な記憶媒体であり、１つまたはそれ以上のプロセッサによって実行されると、請求項１乃至１０いずれか一項に記載の方法を実行する、
コンピュータ読取可能な記憶媒体。
【請求項１６】
方法であって、
データベースシステムの第１データベースノードが、前記データベースシステムによって維持されている識別子のインスタンスを保管するステップであり、前記識別子は、前記第１データベースノードが前記データベースシステムのカタログを変更するのを許可されていることを示すように設定されている、ステップと、
共有ストレージに対してデータを書込むための第１リクエストを受信したことに応答して、前記第１データベースノードが、
前記第１リクエストにサービスするために、前記共有ストレージの第１領域を割り当て、
前記インスタンスと前記維持されている識別子を比較して、前記維持されている識別子が変更された否かを判断するよって、前記カタログの変更が許可されているか否かを判断し、かつ、
前記許可された変更に基づいて、前記第１領域の指示を含むように前記カタログを更新する、
ステップと、を含む、方法。
【請求項１７】
前記方法は、さらに、
共有ストレージに対してデータを書込むための第２リクエストを受信したことに応答して、前記第１データベースノードが、
前記共有ストレージの第２領域を割り当て、
前記インスタンスと前記維持されている識別子を比較して、前記維持されている識別子が変更された否かを判断し、かつ、
前記維持されている識別子が変更されたとの判断に応答して、前記第２領域の指示を含むように前記カタログを更新しないように決定する、
ステップ、を含む、請求項１６に記載の方法。
【請求項１８】
前記方法は、さらに、
第２リクエストをサービスするために、前記第１領域に対してデータの書込みを試みるステップと、
前記試みに応答して、前記第１データベースノードが前記第１領域に対してデータを書込むことを前記データベースシステムが防止したものと判断するステップであり、前記共有ストレージは、特定の領域が前記データベースシステムのデータベースノードによって書込み可能か否かの指示を維持するように構成されている、ステップと、
を含む、請求項１６に記載の方法。
【請求項１９】
前記データベースシステムは、前記共有ストレージに対してデータを書込むために、前記データベースシステムの複数のデータベースノードのうち１つを選択するように構成されており、かつ、
前記方法は、さらに、
前記共有ストレージに対してデータを書込むための第１データベースノードを前記データベースシステムが選択したことに応答して、前記第１データベースノードが、
前記第１データベースノードが前記データベースシステムの前記カタログを変更するのを許可されていることを示す前記識別子を変更し、
前記データベースシステムによって維持されている前記識別子のインスタンスの保管を実行する、ステップ、
を含む、請求項１６または１８に記載の方法。
【請求項２０】
前記方法は、さらに、
高可用性（ＨＡ）データベースクラスタを実装するために、ＨＡアプリケーションを実行するステップ、を含み、
前記ＨＡアプリケーションは、
前記第１データベースノードにおいて問題が発生したか否かを判断するために、前記第１データベースノードのハートビートをモニタリングし、かつ、
前記第１データベースノードにおいて問題が発生したとの判断に応答して、前記第１データベースノードがカタログの変更を許可されていないことを示すために前記識別子を変更し、かつ、前記第１領域に対する書込みオペレーションを防止するように前記共有ストレージに指示する、
ように動作可能である、請求項１６または１７に記載の方法。
【請求項２１】
前記方法は、さらに、
共有ストレージに対してデータを書込むための第２リクエストを受信したことに応答して、前記第１データベースノードが、
前記第１領域が前記第２リクエストに関連するデータを保管するための容量を有するか否かを判断し、かつ、
前記第１領域が前記容量を有しているとの判断に応答して、前記第１領域に対して前記第２リクエストのデータを書込み、前記第２リクエストは、クライアント装置から受信される、
ステップ、を含む、請求項１６に記載の方法。
【請求項２２】
実行可能なプログラム命令が保管されている非一時的コンピュータ読取可能な記憶媒体であり、１つまたはそれ以上のプロセッサによって実行されると、請求項１６乃至２１いずれか一項に記載の方法を実行する、
コンピュータ読取可能な記憶媒体。
【請求項２３】
データベースシステムであって、
データベースクラスタを実装するように構成されている複数のノードと、
前記複数のノードにアクセス可能であり、かつ、前記データベースシステムのデータを保管するように構成されている共有ストレージと、を含み、
前記複数のノードのうち第１データベースノードは、請求項１６乃至２１いずれか一項に記載の方法を実装するように構成されている、
データベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的に、高可用性システムに関する。そして、より特定的には、クラスタ化されたデータベースシステム（clustered  database  system）に関する。
【背景技術】
【０００２】
組織（organization）が、そのユーザのために情報を保管することを望む場合に、組織は、典型的に、効率的にアクセスされ得る組織化された方法において、この情報を保管するデータベースシステムを実装する。大きなエンタープライズシステムのためのデータベースシステムは、コンピュータクラスタを実装するために複数のサーバに依存し得る。ここで、個々のサーバは、データベースアプリケーションのインスタンスを実行するクラスタノードとして機能する。これらのノードは、ユーザからのリクエストを個別にサービスすることができ、データについて操作する。クラスタの信頼性を確保するために、クラスタは、ノードが誤動作するシナリを説明する必要があり得る。
【図面の簡単な説明】
【０００３】
【図１】図1は、いくつかの実施形態に従って、データベースを実装するデータベースシステムの例示的な要素を示すブロック図である。
【図２】図2は、いくつかの実施形態に従って、認可識別子（authorization  identifier）を維持するメタデータサーバの例示的な要素を示すブロック図である。
【図３】図3は、いくつかの実施形態に従って、分散ストレージに対するデータ書込みのためのリクエストをサービスするアクティブノードの例示的な要素を示すブロック図である。
【図４】図4は、いくつかの実施形態に従って、ノードのフェンシングアウト（fencing  out）に関する例示的な方法を示すフローチャートである。
【図５】図5は、いくつかの実施形態に従って、ノードのフェンシングアウトに関する例示的な方法を示すフローチャートである。
【図６】図6は、いくつかの実施形態に従って、ノードのフェンシングアウトに関する例示的な方法を示すフローチャートである。
【図７】図7は、いくつかの実施形態に従って、例示的なコンピュータシステムを示すブロック図である。
【０００４】
本開示は、「一つの実施形態（”one  embodiment”）」または「実施形態（”an  embodiment”）」に対する言及を含んでいる。フレーズ「一つの実施形態において」または「実施形態において」の出現（appearance）は、必ずしも同一の実施形態について参照するものではない。特定的な特徴、構造、または特性は、この開示と一貫した任意の適切な方法において組み合わせることができる。
【０００５】
この開示の中では、異なるエンティティ(「ユニット（”units”）」、「回路（”circuits”）」、他のコンポーネント、等として様々に参照され得るもの)が、１つまたはそれ以上のタスクまたはオペレーションを実行するために「構成された（”configured”）」ものとして説明され、または、請求され得る。この定式化−[エンティティ]は［１つまたはそれ以上のタスクを実行］するように構成される（”[entity]configured  to[perform  one  or  more  tasks]”）−は、構造（structure）(すなわち、電子回路といった、何らかの物理的なもの)を参照するために、ここにおいて使用されている。より特定的に、この定式化は、この構造がオペレーションの最中に１つまたはそれ以上のタスクを実行するように配置されていることを示すために使用される。構造は、たとえその構造体が現在オペレーションされていなくても、あるタスクを実行するように「構成された（”configured  to”）」、ということができる。「データベース管理アプリケーションのインスタンスを実行するように構成されたノード（”node  configured  to  execute  an  instance  of  a  database  management  application”）」は、例えば、オペレーションの最中にこの機能を実行する回路を有する集積回路をカバーするように意図されている。たとえ問題の集積回路が現在使用されていない(例えば、電源が接続されていない)場合であってもである。従って、あるタスクを実行するように「構成された」ものとして説明または語られたエンティティは、デバイス、回路、タスクを実行するために実行可能なプログラム命令を保管しているメモリ、等といった、何らかの物理的なものを参照する。このフレーズは、ここにおいて、何か無形のものを参照するためには使用されない。従って、ここにおいて、作成するように「構成された」は、アプリケーションプログラミングインターフェイス（application  programming  interface、API）といった、ソフトウェアエンティティを参照するためには使用されない。
【０００６】
用語「構成された」は、「構成可能である（"configurable  to"）」を意味するように意図されたものではない。プログラムされていないFPGAは、例えば、ある特定的な機能を実行するように「構成され」ているとは考えられないだろうが、その機能を実行するように「構成可能である」だろうし、そして、プログラミングの後でその機能を実行するように「構成され」得る。
【０００７】
ここにおいて使用されるように、用語「第１（"first"）」、「第２（"second"）」、等は、それらが先行する名詞のためのラベルとして使用され、そして、具体的に記述されない限り、いかなるタイプの順序付け（ordering）(例えば、空間的、時間的、論理的なもの、等)も意味しない。例えば、８つのノードを有しているデータベースシステムにおいて、用語「第１」および「第２」ノードは、８つのノードのうち任意の２つを参照するように使用することができる。
【０００８】
ここにおいて使用されるように、用語「基づいて（”based  on”）」は、決定に影響する１つまたはそれ以上のファクタを記述するために使用される。この用語は、追加的なファクタが決定に影響し得る可能性を排除するものではない。つまり、決定は、特定的なファクタのみに基づいてよく、または、特定的なファクタ並びに他の不特定のファクタに基づいてもよい。フレーズ「Bに基づいてAを決定する（”determine  A  based  on  B”）」を考える。このフレーズは、Bが、Aを決定するために使用されるファクタであること、または、Aの決定に影響するファクタであることを規定している。このフレーズは、Aの決定も、また、Cといった、他のファクタに基づき得ることを排除するものではない。このフレーズは、また、AがBのみに基づいて決定される実施形態もカバーするように意図されている。ここにおいて使用されるように、「基づいて」は、従って、フレーズ「少なくとも部分的に基づいて（”based  at  least  in  part  on”）」と同義語である。
【発明を実施するための形態】
【０００９】
誤動作している（malfunctioning）データベースノードは、データを破壊し、かつ/あるいは、データベースの運用を妨害する可能性を有するので、問題のあるデータベースノードをフェンスオフ（fence  off）(すなわち、隔離（isolate）)することが重要であり得る。誤動作しているノードを隔離する１つのアプローチは、物理的に電源を落とすことを含んでおり、−シュートアザーノードインヘッド（Shoot  The  Other  Node  In  The  Head、STONITH）として参照されている。このアプローチにおいて、誤動作しているノードは、典型的に、手動によるか、または、ロボット制御プロセスを使用するかのいずれかによって、ノードにおける電力スイッチをフリップする（flipping）ことによってシャットダウンされる。そうしたアプローチは、しかしながら、「電線（”wire”）」上で、または、コントローラレベルにおいて現在通信されている入力／出力を中止しない。別のアプローチは、一連の複雑なスモールコンピュータシステムインターフェイス（Small  Computer  System  Interface、SCSI）コマンドを発行することを含み、SCSIプロトコルの機能を利用する。−しばしばSCSIフェンシングとして参照されるものである。このアプローチは、しかしながら、分散データベースシステムにおいては上手く機能しない。データが複数のディスクおよびコントローラにわたり共有されると、複雑さが増加するからである。
【００１０】
本開示は、従来のアプローチの欠点を克服するやり方で、データベースノードをフェンシングアウトするための技術を説明する。以下に説明される様々な実施形態において、データベースシステムは、データベースノードが、１）共有ストレージでデータを書込むために割り当てられた新たなデータベース部分を示すためのカタログを更新すること、および、２）既に割り当てられた部分に対して書込むこと、を防止することによって、データベースノードをフェンシングアウトする。カタログが更新されることを防止するために、データベースシステムのメタデータサーバは、データベースノードがカタログを更新してよいか否かを示す識別子を維持することができる。それとして、データベースノードがカタログを更新することを望む場合、データベースノードはメタデータサーバと通信して、そうする権限を有するか否かを判断することができる。−この権限は、維持されている識別子に基づいている。そうした実施形態においては、データベースノードがフェンスで囲まれる（fenced  off）場合、データベースシステムは、データベースノードがカタログを更新する権限を有さないことを示すように、メタデータサーバでの識別子を更新することができる。誤動作しているノードが、既に割り当てられた部分に書込むことを防止するために、データベースシステムは、割り当てられた部分を保管している共有ストレージに、既に割り当てられている部分に対するあらゆる新たな書込みを防止するように指示する（instruct）ことができる。このフェンシングアプローチは、従来のアプローチよりも有利であり得る。例えば、ノードの電源を切るために何らかの外部メカニズム(例えば、アドミニストレータ)に依存することがなく、そして、例えば、SCSIに基づくソリューションよりも複雑でないからである。
【００１１】
これから図1を参照すると、データベースシステム10のブロック図が示されている。図示された実施形態において、データベースシステム10は、データベースクラスタ100、分散ストレージ120、およびネットワーク160を介して接続されたメタデータサーバ130を含んでいる。示されるように、クラスタ100は、アクティブノード140およびスタンバイノード150を含み、それぞれは高可用性（high  availability、HA）クラスタマネージャ110を実行している。さらに示されるように、分散ストレージ120は、割り当てられた領域（allocated  region）122および割り当てられていないスペース（unallocated  space）124を含み、そして、メタデータサーバ130は、認可識別子132およびカタログ134を含んでいる。示されていないが、様々なクライアント装置(例えば、アプリケーションサーバ)が、データベーストランザクションを実行するためのリクエストを送信することによって、ノード140および150とインタラクションすることができる。いくつかの実施形態において、データベースシステム10は、示されているものと異なるように実装されてよい。例えば、いくつかの実施形態において、データベースシステム10は、複数のアクティブノード140を含んでいる。ストレージ120は、また、分散ストレージでなくてもよい。
【００１２】
データベースシステム10は、様々な実施形態において、データベースクラスタ100として動作し、かつ、トランザクションリクエスト146および156を処理するように構成されている、ノード140および150を介して部分的に実装される。これらのリクエストは、ストレージ120に対するデータの読出し及び／又は書込みを含み得る。例えば、アクティブノード140は、ユーザのパスワードを新たな値に更新するためのリクエスト146を受信することができ、そして、従って、レコードがその値を含んでいる割り当てられた領域122に対してレコードを書込むことができる。いくつかの実施形態において、データベースシステム10は、アクティブスタンバイトポロジを使用してHAサービスを実装しており、そこでは、データベースノードの１つまたはそれ以上が、他のノードに代わって、ストレージ120に対してデータを書込むために選択される。−選択されたノードはアクティブノード140として示されており、そして、選択されなかったノードはスタンバイノード150として示されている。
【００１３】
アクティブノード140は、様々な実施形態において、分散ストレージ120に対するデータの読出し及び書込みリクエストをサービスするように構成されている(トランザクション書込みリクエスト146だけが示されているにもかかわらず)。従って、アクティブノード140は、クライアント装置からトランザクション書込みリクエスト146を受信し、そして、ストレージ120における割り当てられた領域122に対してデータを書込むための対応するレコード書込みリクエスト144を発行することができる。以下に説明されるいくつかの実施形態において、割り当てられた領域122は、レコードが書込まれ、かつ、読出され得るストレージ120内の割り当てられていないスペース124からノード140によって生成されたファイルである。アクティブノード140が、図3に関して、以下により詳細に説明される。
【００１４】
スタンバイノード150は、様々な実施形態において、分散ストレージ120内に保管されたデータを提供するための読出しリクエスト156をサービスするように(かつ/あるいは、保証される場合には（if  warranted）アクティブノード140の役割を引き継ぐように構成されたバックアップノードとして機能するように)構成されている。様々な実施形態において、スタンバイノード150は、それぞれに、データベースシステム10の現在の状態に関するメタデータを維持することができる。例えば、ノード150は、ストレージ120によっても保管されている、メタデータを保管しているローカルキャッシュを維持することができる。そうした実施形態において、スタンバイノード150は、クライアント装置から、ストレージ120内に保管されたデータに対するトランザクション読出しリクエスト156を受信することができる。これらのリクエストに応答して、スタンバイノード150は、データがキャッシュ内に既に存在する場合には、ローカルキャッシュから(ストレージ120とは対照的に)リクエストされたデータを取り出すことができる。それらのローカルキャッシュがストレージ120内のデータとコンカレント（concurrent）であることを確保するために、いくつかの実施形態において、ノード150は、どの新たな領域122がストレージ120で割り当てられたか、そして、続いて、どのレコードが書込まれたかを特定するためにカタログ134を調べる（consult）ことができる。レコードは、ストレージ120から読出され、それらのローカルキャッシュ内のデータに影響し得る、ストレージ120内のデータに対するあらゆる変更を判断する。ローカルキャッシュ内のデータが影響される場合(例えば、キー値ペア（key-value  pair）の値が更新または削除された場合)、スタンバイノード150は、ストレージ120内のデータの変更を反映するように(例えば、キャッシュエントリを更新または無効化することによって)キャッシュを更新することができる。これにより、スタンバイノードは、データベースシステム10の現在の状態を反映するキャッシュを維持することができる。上述のように、スタンバイノード150の１つは、アクティブノード140になるように選択することができ、−この時点で、ノードは、トランザクション書込みリクエスト146をサービスすることができる。システム10の現在の状態に関した最新（up-to-date）のメタデータを維持することによって、新たに選択されたノード150は、より迅速にアクティブノード140の役割を引き受けることができる。
【００１５】
HAクラスタマネージャ110は、様々な実施形態において、クラスタ100(または、より一般的には、データベースシステム10)について高可用性を達成するために、クラスタリソースを管理するための実行可能なアプリケーションである。従って、いくつかの実施形態において、マネージャ110は、ノード140および150の故障（failure）を検出し、かつ、フェイルオーバー（failovers）を促進するように実行可能である。特に、マネージャ110は、ノード140および150にわたり分散されてよく、そうして、ノード140および150が反応しなく（unresponsive）なっていないことを示すために、各ノード140および150によって送信されたハートビート信号（heartbeat  signal）をモニタリングすることによって、健全性をモニタすることができる。例えば、現在のアクティブノード140がハートビート信号に応答していない場合、マネージャ110は、スタンバイノード150から新たなアクティブノード140を選択するための選出（election）を保持すること、および、選択されたスタンバイノード150がアクティブノード140になるように促進することによって、フェイルオーバーを容易にすることができる。いくつかの実施形態において、マネージャ110は、ノード140および150が依然として応答していることを確保するために、代替的に、各ノード140および150に対してリクエストを送信し、そして、対応する応答を待つことができる。いくつかの実施形態において、マネージャ110は、また、アドミニストレータといったユーザからのリクエストに応答して、選択を保持することもできる。(いくつかの実施形態において、選択は、以下に説明するメタデータサーバ130によって、代替的に実行され得る)。
【００１６】
以下でより詳細に説明されるように、マネージャ110は、また、ノードが誤作動しているという決定に応答して(または、ユーザのリクエストに応答して)、ノード140および150をフェンシングアウトするようにも実行可能であり得る。(様々なフェンシングオペレーションが、マネージャ110によって実行されるものとして以下に説明されるが、いくつかの実施形態において、これらのオペレーションは、マネージャ110以外のエンティティによって実行されてよい)。以下に説明する様々な実施形態において、マネージャ110は、ノードがカタログ134を更新すること、および、割り当てられた領域122に書込むことを防止することによって、ノード140をフェンシングアウトすることができる。このプロセスは、ストレージ120およびメタデータサーバ130を簡単に説明した後で、以下でより詳細に説明される。
【００１７】
分散ストレージ120は、様々な実施形態において、システム10のユーザのためのデータを保管するように構成された共有ストレージである。いくつかの実施形態において、ストレージ120は、ネットワーク上で一緒に接続され(例えば、ストレージアタッチネットワーク(storage  attached  network、SAN))、かつ、データ損失を防止するためにデータを冗長的に保管するように構成された、複数のストレージによって実装されてよい。様々な実施形態において、ストレージ120は、ログ構造（log-structured）ストレージ(例えば、ライトアヘッドログ(write-ahead  log（WAL))を実装するように構成されており、ここで、アクティブノード140は、新たなトランザクションデータを保管するための、新たな領域／部分122を割り当てる(既存のトランザクションデータを上書きするのとは対照的である)。例えば、特定の領域122は、ユーザの預金残高（account  balance）を含んでよい。そうした事例においては、預金残高を更新するためのトランザクションリクエスト146が受信された場合に、アクティブノード140は、特定の領域122内で先に保管された預金残高を変更しなくてよく、むしろ、アクティブノード140は、新たに割り当てられた領域122内(または、特定の領域122内)で新たな預金残高を識別する新たなレコードを書込むためのリクエスト144を送信することができる。いくつかの実施形態において、アクティブノード140は、新たなトランザクションデータを保管するためのファイルを作成すること(または、ストレージ120がファイルを作成するようにリクエストする)ことによって、割り当てられていないスペース124の領域122を割り当てることができる。トランザクションリクエスト146が受信されるので、アクティブノード140は新たなレコードをファイルに書込むことができる。ファイルが満杯になると、アクティブノード140は、レコードを保存するための別のファイルを作成することによって、ファイル／領域122を閉じ、そして、新たな領域122を割り当てることができる。いくつかの実施形態において、アクティブノード140は、トランザクションデータを保管するために、所与の時間に複数の領域122を割り当てることができる。−例えば、１０個の領域122のブロックである。より詳細に説明されるように、様々な実施形態において、アクティブノード140は、新たな領域122を割り当て、レコードで満杯の、古い領域をクローズアウトするときに、(図1に示すリクエスト142を介して)カタログ134を更新する。これらの更新は、スタンバイノード150によって調査（reviewed）され得る。新たに割り当てられた領域122に気付き、そして、それらの領域122の内容を読出すためである。例えば、ノード150は、所与の領域122内のデータベースレコードを読出すことができ、そうして、データベースシステムの現在の状態を反映させるために、様々なローカルに維持されているメタデータ(上述のローカルキャッシュといったもの)を更新することができる。以下に説明されるように、アクティブノード140をフェンシングアウトしようと試みるとき、カタログ134に対するアクセスは制限され得る。
【００１８】
様々な実施形態において、ストレージ120は、割り当てられた領域122がアクティブノード140によって書込まれることが許可されているか否かを示すメタデータを維持するように構成されている。例えば、いくつかの実施形態において、このメタデータは、現在のアクティブノード140が、関連する割り当てられた領域122に対してレコードを書込むことが許可されているか否か(または、より一般的には、システム10内のいずれかのノードが領域122を変更できるか否か)を示している、各領域122に対する書込みフラグ（write  flag）を含んでよい。以下に説明されるように、これらの書込みフラグは、ノード140がフェンシングアウトされるべきであるという決定に応答して、マネージャ110によって設定されてよい。
【００１９】
メタデータサーバ130は、様々な実施形態において、データベースシステム10を実装するためにノード140および150によって使用可能なメタデータを維持するように構成されている。例えば、示されるように、サーバ130は、様々なデータベース構造およびオブジェクト、データベース内のデータを検索する（looking  up）ためのインデックス、データベース情報にアクセスするためのユーザ許可、等を定義しているスキーマ（schema）を指定することができるカタログ134を維持し得る。上述のように、いくつかの実施形態において、カタログ134は、割り当てられた領域122の指示を提供しているメタデータを保管する。このメタデータは、対応する割り当てられた領域122が配置されている、ストレージ120内の物理的位置を特定する位置情報(領域122のID、キー、等といったもの)を含んでよい。変更されたカタログ134に応答して、サーバ130は、カタログ134が変更されたことをノード150に通知することができる。従って、ノード150は、次いで、カタログ134を調査し、そして、新たに追加されたキーを使用して、対応する割り当てられた領域122を配置することができる。様々な場合において、ノード150は、通知されることなく、カタログ134を定期的に調査することができる。
【００２０】
上述のように、アクティブノード140は、領域122を割り当てた後で、カタログ更新リクエスト142を介してカタログ134を更新することに責任を負い得る。サーバ130は、様々な実施形態において、現在のアクティブノード140がカタログ134を更新してよいか否かを示す値(認可識別子132として示されるもの)を維持する。アクティブノード140は、カタログ134を更新するように望むとき、様々な実施形態において、識別子132が変更されたか否かを判断する。識別子132が変更されていない場合、ノード140は、カタログ134を更新するように進めることができる。しかしながら、識別子132が変更されている場合に、ノード140は、新たに割り当てられた領域122を反映するようにカタログ134を更新しなくてよい。
【００２１】
上述のように、種々の実施形態において、HAクラスタマネージャ110は、あるポイントで、アクティブノード140をフェンシングアウトすることが保証されていると判断することができる。例えば、ハートビート信号は、もはや受信されていない、ユーザがそれをリクエストした、等だからである。そうした判断を行うことに応答して、マネージャ110は、アクティブノード140が、おそらく壊れているレコードを書込むこと、および、より壊れた可能性のあるレコードを書込むために追加の領域122を割り当てることを防止しようとすることができる。ノード140がカタログ134を更新すること防止するために、様々な実施形態において、マネージャ110は、認可識別子132を変更するために、メタデータサーバ130についてリクエスト(変更識別子リクエスト112として示される)を発行する。いくつかの実施形態において、このリクエスト112は、マネージャ110のインスタンスを実行している、新たに選択されたスタンバイノード150からのものであってよい。上述のように、そうした実施形態において、一旦識別子132が変更されると、アクティブノード140はカタログ134を更新することが許されない。カタログ更新リクエスト142は、従って、アクティブノード140がカタログ134を更新することが妨げられていることを示すために、図1の「Ｘ」を用いて示されている。いくつかの実施形態において、アクティブノード140は、既に割り当てられた領域122を反映するためにカタログ134を更新することができない場合に、新たな領域122を割り当てることを中止するように構成されている。−従って、ノード140は、変更されている認可識別子132に応答して、新たなレコードを保管するために、新たな領域122を割り当てることを効果的に禁じられている。
【００２２】
ノード140が既に割り当てられた領域122に対して書込むことを防止するために、図示された実施形態において、マネージャ110は、ストレージ120に対してブロック書込みリクエスト114を発行する。このリクエストは、割り当てられた領域122のうち指定されたセットに対する書込みオペレーションを防止するようにストレージ120に指示することができ、そして、いくつかの実施形態においては、新たに選択されたノード150によって発行され得る。リクエスト114の受信に応答して、ストレージ120は、アクティブノード140がレコードを書込むことを防止するために、領域122の指定されたセットに関連する書込みフラグを設定することができる。その後、ノード140がストレージ120に対するレコード書込みリクエスト144を発行するとき、いくつかの実施形態において、ストレージ120は、フラグから、リクエスト144を拒否し、そして、既に割り当てられた領域122に対して別のレコードを追加しないことを決定する。レコード書込みリクエスト144は、従って、図1において「Ｘ」を用いて示されており、ノード140が指定された領域122に対してレコードを書込むことが防止されたことを示している。カタログ更新リクエスト142およびレコード書込みリクエスト144をブロックすることにおいて、マネージャ110は、アクティブノード140を効果的にフェンシングアウトして、データベースシステム10内のデータを潜在的に破損することを防止している。
【００２３】
これから図2に移ると、メタデータサーバ130の一つの実施形態に係るブロック図が示されている。上述のように、様々な実施形態において、サーバ130は、データベースシステム10を実装するためにノード140および150によって使用可能なメタデータを保管するように構成されている。図示された実施形態において、サーバ130は、認可識別子132およびカタログ134を含んでいる。さらに、示されるように、カタログ134は、割り当てられた領域メタデータ210を含んでいる。様々な実施形態において、メタデータサーバ130は、図示されたものとは異なるように実装され得る。
【００２４】
上述のように、カタログ134は、様々な実施形態において、ストレージ120内の領域122を配置するためにノード140および150によって使用可能なメタデータ210を含んでいる。いくつかの実施形態において、メタデータ210は、対応する割り当てられた領域122が保管されているストレージ120における物理的位置に対してマップ（map）するキー（key）を含んでよい。ストレージ120において領域122を割り当てることに応答して(例えば、レコードを保管するためにファイルを開くこと)、ノード140は、割り当てられた領域122のためのキーを含むようにカタログ134を更新しようと試みることができる。カタログ134は、次いで、一旦ノード140が領域122をレコードで満たすと(例えば、ファイルを閉じている)、再び更新され得る。従って、書込まれたレコードを読出すことを望むノード150は、最初に、サーバ130からキーをリクエストすることによってカタログ134を調べることができる。ノード150は、次いで、ストレージ120に対してキーを発行することができ、キーの受信に応答して、書込まれたレコードを返すキー値ストア（key-value  store）を実装することができる。いくつかの実施形態において、メタデータ210は、さらに、追加のメタデータを含み、アクティブノード140になる際にスタンバイノード150によって使用され得る。次のレコードが書込まれ得る特定の領域122を指定する追加ポイント（append  point）、最も古い領域122を指定するテールマーカ（tail  marker）、各領域122に対するタイムスタンプ、等といったものである。
【００２５】
上述のように、様々な実施形態において、認可識別子132は、現在のアクティブノード140がカタログ134を更新し得るか否かを示す値である。いくつかの実施形態において、識別子132は、アクティブノード140を明示的に識別する。例えば、識別子132は、ノード140のIPアドレス、固有のノード識別子、等であり得る。他の実施形態において、図3を用いて説明されるように、識別子132は、ノード140を明示的に識別せず、むしろ、識別子132は、現在のアクティブノード140になるノードについて設定される英数字（alpha  and/or  numeric  characters）のシーケンスであり、そして、ノードが依然としてアクティブノード140である限り、変更されないままである。従って、そうした実施形態において、識別子132は、マネージャ110が新たなアクティブノード140を選択したときにだけ更新される。
【００２６】
これから図3に移ると、アクティブノード140の一つの実施形態に係るブロック図が示されている。図示された実施形態において、アクティブノード140は、HAクラスタマネージャ110のインスタンス、データベースアプリケーション310、および、認可識別子コピー320を含んでいる。様々な実施形態において、アクティブノード140は、図示されたものとは異なるように実装され得る。例えば、HAクラスタマネージャ110およびデータベースアプリケーション310は、同じアプリケーションの一部である。
【００２７】
データベースアプリケーション310は、様々な実施形態において、領域122からのレコードの書込み及び読出しを含む、クライアントからのリクエスト146および156をサービスするために、ノード140によって実行可能なアプリケーションである。いくつかの実施態様において、アプリケーション310は、また、ストレージ120における領域122に関するメタデータ210を用いてカタログ134を更新するためにも実行可能である。１つまたはそれ以上の領域122を割り当てた後、またはそれらを閉じた後で、アプリケーション310は、最初に、識別子132を調査することによって、それが変更されたか否かを判断して、カタログ134を更新するように試みることができる。識別子132がノード140を明示的に識別する実施形態において(例えば、IPアドレス、ノードID等を指定することによるもの)、アプリケーション310は、認可識別子リクエスト315を介して識別子132を検索し、そして、そのノードがアクティブであることを識別子132が依然として示すことを確認することができる。識別子132がノード140を明示的に示さない実施形態において(例えば、一般的な文字列である)、ノードは、アクティブノード140である際に、識別子132のローカルコピーをリクエストし、そして、保管する。−コピー320として示されるものである。ノード140が後にカタログ134を更新しようと試みるとき、ノード140は、アクティブノード140となってから識別子132が変更されていないことを確認するために、そのコピー320をメタデータサーバ130内の識別子132のコピーと比較することができる。識別子132が変更されていない場合には、次いで、アクティブノード140は、カタログ134を更新し、そうでなければ、ノード140は、カタログ134を更新しない。−従って、いかなる追加領域122も割り当てしない。
【００２８】
これから図4に移ると、方法400のフローチャートが示されている。方法400は、データベースノード(例えば、ノード140)をフェンシングアウトするために、コンピュータシステム(例えば、データベースシステム10)によって実行される方法に係る一つの実施形態である。様々な実施形態において、コンピュータシステムのノード(例えば、ノード140および150)は、高可用性(HA)アプリケーション(例えば、HAクラスタマネージャ110)を実行する。HAデータベースクラスタを実装し、かつ、方法400のステップを実行するものである。いくつかの実施形態において、方法400は、分散ストレージ(例えば、ストレージ120)において割り当てられた部分(例えば、領域122)からの読出しといった追加のステップを含んでいる。
【００２９】
方法400は、ステップ410において開始し、コンピュータシステムは、メタデータサーバ(例えば、サーバ130)内に、第１ノード(例えば、ノード140)はデータベースシステムのメタデータサーバに保管されたカタログ(例えば、カタログ134)を更新することが許可されていることを示す値(例えば、識別子132)を保管している。第１ノードは、カタログを更新する以前に値を調査することができる。例として、一つの実施形態において、第１ノードは、データを書込むために、分散ストレージにおける部分のセットを割り当て、そして、そうすることに応答して、割り当てられた部分のセットに関するメタデータを用いてカタログを更新しようと試みる。第１ノードは、最初に、メタデータサーバに保管されている値を調査することによって、それが更新されたか否かを判断し、そのように行うことができる。様々な事例において、第１ノードは、値が更新されていないと判断し、そして、結果として、割り当てられた部分の指示を含むように、カタログを更新することができる。他の実施形態において、第１ノードは、値が更新されたと判断し、そして、分散ストレージでの部分の割り当てを中止する。様々な実施形態において、値は、メタデータサーバの代わりに分散ストレージにおいて保管される。
【００３０】
第１ノードが、カタログを更新し、そして、分散ストレージに書込むことを防止する決定に応答して、ステップ420において、コンピュータシステムは、メタデータサーバに保管された値を更新し、第１ノードがカタログを更新するのを許可されていないことを示す。この決定は、ユーザからのリクエストから、または、自動化プロセスを介して、結果として生じ得るものである。様々なインスタンスにおいて、HAアプリケーションは、この決定を行うことができる。いくつかの実施形態において、HAアプリケーションは、分散ストレージに対してデータを書込むための第２ノード(例えば、ノード140)を選択し、そして、選択されたノードにその値を更新させ、かつ、そのコピー(例えば、認可識別子コピー320)を保管させる。
【００３１】
ステップ430において、コンピュータシステムは、データを書込むためにデータベースノードについて割り当てられた特定の部分に対する書込みオペレーションを防止するように、分散ストレージに指示する。いくつかの実施形態において、分散ストレージは、割り当てられた部分それぞれについて書込みフラグを保管し、そして、指示されたことに応答して、コンピュータシステムのノードが特定の部分に対してデータを書き込むことができないことを示すために、特定の部分の書込みフラグを設定する。
【００３２】
これから図5に移ると、方法500のフローチャートが示されている。方法500は、アクティブノード(例えば、ノード140)をフェンシングアウトするために、データベースシステム(例えば、システム10)によって実行される方法に係る一つの実施形態である。方法400と同様に、方法500のステップは、データベースシステムのノード(例えば、ノード140および150)にわたり分散されたHAアプリケーション(例えば、マネージャ110)によって実行され得る。様々な実施形態において、方法500は、追加のステップを含んでいる。−例えば、スタンバイノード(例えば、ノード150)はカタログ(例えば、カタログ134)をモニタリングし、アクティブノードによって何らかの新たな部分(例えば、領域122)が割り当てられたか否かを判断する。
【００３３】
方法500は、ステップ510において開始し、データベースシステムは、アクティブノードがカタログを更新し、そして、分散ストレージ(例えば、ストレージ120)に対してデータを書込むことを防止するように決定する。アクティブノードの防止する決定に応答して、様々な実施形態において、データベースシステムは、分散ストレージに対してデータを書込むための新たなアクティブノードを選択する。決定は、クライアントシステムからリクエストを受信することに応答して行われてよい。
【００３４】
アクティブノードがカタログを更新することを防止するように決定することに応答して、ステップ520において、データベースシステムは、アクティブノードがカタログを更新するのを許可されていないことを示すために識別子(例えば、132)を変更する。様々な実施形態において、メタデータサーバ(例えば、サーバ130)は、識別子を維持する。アクティブノードは、識別子のインスタンス(例えば、コピー320)を保管し、そして、その識別子がカタログを更新する以前に変更されたか否かを判断するためにインスタンスを使用することができる。様々な実施形態において、アクティブノードは、保管されたインスタンスをメタデータサーバにおいて維持されている識別子と比較することによって、この判断を行う。いくつかの実施形態において、アクティブノードは、保管されたインスタンスが識別子と一致しないという判断に応答して、アクティブノードによって割り当てられた部分を示すために、カタログの更新を中止する。いくつかの実施形態において、データベースシステムは、新たに選択されたノードに、識別子を変更させ、そして、変更された識別子がその後に変更されたか否か判断するために、変更された識別子のインスタンスを保管させる。様々な実施形態において、メタデータサーバによって維持される識別子は数値である。
【００３５】
ステップ530において、アクティブノードが分散ストレージに対してデータを書込むことを防止する決定に応答して、データベースシステムは、アクティブノードから、データを書込むために割り当てられた特定の部分に対する書込み動作を防止するように分散ストレージに指示する。様々な実施形態において、分散ストレージは、分散ストレージにおいて割り当てられた部分についての書込みフラグを維持する。これらのフラグは、与えられた部分がアクティブノードによって書き込まれ得るか否かを示すことができる。データベースシステムによって書込みを防止するように指示されていることに応答して、分散ストレージは、特定の部分がアクティブノードによって書込みできないことを示すために、特定の部分に関連するフラグを設定することができる。
【００３６】
これから図6に移ると、方法600のフローチャートが示されている。方法600は、共有ストレージ(例えば、ストレージ120)の領域(例えば、領域122)を割り当て、そして、割り当てられた領域を示すようにカタログ(例えば、カタログ134)を更新するために、データベースノード(例えば、ノード140)によって実行される方法に係る一つの実施形態である。方法600のステップは、共有ストレージに対してデータを書込むためのトランザクションリクエスト(例えば、リクエスト146)を受信することに応答して実行されてよい。様々な実施形態において、方法600は、追加のステップを含む。−例えば、割り当てられた領域が追加のデータを保管するための容量を有するか否かを決定すること、データベースノードで問題が発生したことを決定すること、等である。
【００３７】
方法600は、ステップ610において開始し、データベースノードは、そのデータベースノードのデータベースシステム(例えば、システム10)によって維持されている識別子(例えば、132)のインスタンス(例えば、コピー320)を保管している。様々な実施形態において、識別子は、データベースノードがデータベースシステムのカタログを変更するのを許可されていることを示すように設定されている。最初に、データベースシステムは、共有ストレージに対してデータを書込むために、複数のデータベースノードからデータベースノードを選択することができる。データを書込むために選択されていることに応答して、データベースノードは、新たに選択されたデータベースノードがカタログを変更するのを許可されていることを示すために、識別子を変更することができる。その後に、様々な実施形態において、データベースノードはステップ610を実行する。
【００３８】
共有ストレージにデータを書込むためのリクエストの受信に応答して、ステップ620において、データベースノードは、リクエストをサービスするために、共有ストレージの領域を割り当てる。いくつかの実施形態において、データベースノードは、領域に対してデータを書き込もうと試み、そして、データベースノードが領域にデータを書込むことをデータベースシステムが防止したと判断する。様々な実施形態において、共有ストレージは、特定の領域がデータベースノード(例えば、ノード140)によって書き込まれ得るか否かの指示を維持している。
【００３９】
ステップ630において、データベースノードは、維持されてきた識別子が変更されたか否かを判断するためにインスタンスと維持された識別子とを比較することによって、カタログの変更が許可されているか否かを判断する。データベースノードは、HAデータベースクラスタを実装するために、高可用性(HA)アプリケーション(例えば、マネージャ110)を実行することができる。いくつかの実施形態において、HAアプリケーションはデータベースノードにおいて問題が発生したか否かを判断するために、データベースノードのハートビート（heart  beat）をモニタリングしている。データベースノードにおいて問題が発生したと判断することに応答して、HAアプリケーションは、データベースノードがカタログを変更するのを許可されていないことを示すために識別子を変更することができ、そして、割り当てられた領域に対する書込み操作を防止するように共有ストレージに指示することができる。いくつかの実施形態において、HAアプリケーションは、共有ストレージに対してデータを書込むために他のデータベースノードを選択し、そして、他のノードは、識別子を変更し、かつ、共有ストレージに指示する。
【００４０】
認可されている変更に基づいて、ステップ640において、データベースノードは、割り当てられた領域の指示を含むようにカタログを更新する。いくつかの実施形態においては、データベースノードがカタログを変更するのを許可されていないことを示すように維持されている識別子が変更されたと判断することに基づいて、データベースノードは、割り当てられた領域の指示を含むようにカタログを更新することを中止してよい。いくつかの事例において、割り当てられた領域の指示を含んでいないカタログは、他のノード(例:150)を割り当てられた領域に気付かないようにさせる。
【００４１】
コンピュータシステムの実施例
これから図７に移ると、データベースシステム10を実装することができる、例示的なコンピュータシステム700のブロック図が示されている。コンピュータシステム700は、インターコネクト760(例えば、システムバス)を介してシステムメモリ720およびＩ／Ｏインターフェイス740に接続されているプロセッササブシステム780を含む。Ｉ／Ｏインターフェイス740は、１つまたはそれ以上の入出力装置（I/O  devices）750に接続されている。コンピュータシステム700は、様々なタイプのデバイスのいずれであってもよく、これらに限定されるわけではないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、移動電話といった消費者機器、音楽プレーヤ、またはパーソナルデータアシスタント（PDA）を含んでいる。便宜上、図7には単一のコンピュータシステム700が示されているが、システム700は、また、一緒に動作する２つまたはそれ以上のコンピュータシステムとして実装されてもよい。
【００４２】
プロセッササブシステム780は、１つまたはそれ以上のプロセッサまたは処理ユニットを含んでよい。コンピュータシステム700の様々な実施形態において、プロセッササブシステム780の複数のインスタンスが、インターコネクト760に接続され得る。様々な実施形態において、プロセッササブシステム780(または、780内の各プロセッサユニット)は、キャッシュまたは他の形態のオンボードメモリを含んでよい。
【００４３】
システムメモリ720は、ここにおいて説明された種々のオペレーションをシステム700に実行させるように、プロセッササブシステム780によって実行可能なプログラム命令を保管するために使用可能である。システムメモリ720は、異なる物理的なメモリメディアを使用して実装され得る。ハードディスクストレージ、フロッピー（登録商標）ディスクストレージ、リムーバブルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO  RAM、SDRAM、DDR  SDRAM、RAMBUS  RAM、等)、読出し専用メモリ(PROM、EEPROM、等)など、といったものである。コンピュータシステム700内のメモリは、メモリ720といった、１次記憶装置（primary  storage）に限定されない。むしろ、コンピュータシステム700は、また、他の形態のストレージを含んでもよい。プロセッササブシステム780内のキャッシュメモリ、および、入出力装置750における２次記憶装置(例えば、ハードドライブ、ストレージアレイ、等)といったものである。いくつかの実施形態において、これらの他の形態のストレージは、また、プロセッササブシステム780によって実行可能なプログラム命令を保管してもよい。いくつかの実施形態において、上述のマネージャ110は、システムメモリ720を含んでよく(または、その中に含まれてよい）。
【００４４】
Ｉ／Ｏインターフェイス740は、様々な実施形態に従って、他の装置に対して接続し、かつ、通信するように構成された様々なタイプのインターフェイスのいずれであってもよい。一つの実施形態において、Ｉ／Ｏインターフェイス740は、フロントサイドから１つまたはそれ以上のバックサイドのバスまでのブリッジチップ(例えば、サウスブリッジ（Southbridge）)である。Ｉ／Ｏインターフェイス740は、１つまたはそれ以上の対応するバスまたは他のインターフェイスを介して、１つまたはそれ以上の入出力装置750に接続されてよい。入出力装置750の実施例は、ストレージデバイス(ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレイ、SAN、または、それらに関連するコントローラ)、ネットワークインターフェイス装置(例えば、ローカルまたはワイドエリアネットワークに対するもの)、または、他の装置(例えば、グラフィックス、ユーザインターフェイス装置、等)を含んでいる。一つの実施形態において、コンピュータシステム700は、ネットワークインターフェイス装置750(例えば、Wi-Fi、Bluetooth（登録商標）、Ethernet、等にわたり通信するように構成されているもの)を介してネットワークに接続されている。
【００４５】
本出願のサブジェクトマター（subject  matter）の実現化は、これらに限定されるわけではないが、以下の実施例１から２０までを含んでいる。
１．  分散ストレージ内に保管されたデータベースシステムのデータに対するリクエストを処理するように構成されている複数のノードのうち第１ノードをフェンシングアウトする、データベースシステムのための方法であって、前記方法は、
前記データベースシステムのメタデータサーバ内に、前記第１ノードが前記メタデータサーバに保管された前記データベースシステムのカタログの更新するように許可されていることを示す値を保管するステップであって、前記第１ノードは、前記カタログを更新する以前に、前記値を調査するように構成されている、ステップと、
前記第１ノードが、前記カタログを更新すること、および、前記分散ストレージに書込むことを防止する決定に応答して、
前記メタデータサーバにおいて、前記第１ノードが前記カタログを更新するように許可されていないことを示す値を更新するステップ、および、
分散ストレージに対して、データ書込みのために前記第１ノードに割り当てられた特定の部分に対する書込みオペレーションを防止するように指示するステップ、を含む、方法。
２．  前記複数のノードは、高可用性(HA)データベースクラスタを実装するために、HAアプリケーションを実行するように構成されており、前記方法は、前記HAアプリケーションによって実行される、実施例１に記載の方法。
３．  前記方法は、さらに、
前記HAアプリケーションが、前記分散ストレージにデータを書込むために前記複数のノードのうち第２ノードを選択するステップと、
前記第２ノードの選択に応答して、前記HAアプリケーションが、前記第２ノードに値のコピーを保持させるステップであり、前記第２ノードは、前記カタログを更新する以前に、前記値のコピーと前記メタデータサーバ内に保管された値を比較するように構成されている、ステップを含む、実施例２に記載の方法。
４．  前記方法は、さらに、
前記HAアプリケーションが、前記第１ノードが前記分散ストレージに書込むことを防止するように決定を行うステップを含む、実施例２に記載の方法。
５．  前記第１ノードは、
データを書込むために前記分散ストレージにおける部分のセットを割り当て、
前記部分のセットの割り当てに応答して、前記値が更新されたか否かを判断するために前記値を調査することを含めて、前記データベースシステムの前記カタログの更新するように試み、かつ、
前記値が更新されたとの判断に応答して、前記分散ストレージにおける部分の割り当てを中止する、ように構成されている、実施例１に記載の方法。
６．  前記第１ノードは、
データを書込むために前記分散ストレージにおける部分のセットを割り当て、
前記部分のセットの割り当てに応答して、前記値が更新されたか否かを判断するために前記値を調査することを含めて、前記データベースシステムの前記カタログの更新するように試み、かつ、
前記値が更新されなかったとの判断に応答して、割り当てられた前記部分のセットを含むように前記カタログを更新する、ように構成されている、実施例１に記載の方法。
７．  前記複数のノードのうち第２ノードは、
前記第１ノードによって割り当てられた部分を判断するために、前記データベースシステムの前記カタログをモニタリングし、かつ、
前記カタログを更新する前記第１ノードに応答して、前記第２ノードによって維持されているキャッシュを更新するために、割り当てられた前記部分のセットから読出すように前記指示を使用する、ように構成されている、実施例６に記載の方法。
８．  データベースシステムであって、
データベースクラスタを実装するように構成されている複数のノードと、
前記複数のノードに対してアクセス可能であり、かつ、前記データベースシステムのデータを保管するように構成されている、分散ストレージと、
メタデータサーバであり、前記複数のノードのうちのアクティブノードが前記メタデータサーバによって維持されているデータベースカタログを更新するのを許可されていることを示す識別子を維持するように構成されている、メタデータサーバと、含み、
前記データベースシステムは、
前記アクティブノードが前記データベースカタログを更新すること、および、前記分散ストレージに対してデータを書込むことを防止するように決定し、かつ、
前記アクティブノードに対する防止の決定に応答して、
前記メタデータサーバにおいて、前記アクティブノードが前記データベースカタログを更新するのを許可されていないこと示すように前記識別子を変更し、
前記アクティブノードがデータ書込みのために割り当てられている特定の部分に対する書込みオペレーションを防止するように、前記分散ストレージに指示する、
ように構成されている、データベースシステム。
９．  前記アクティブノードは、
前記メタデータサーバによって維持されている前記識別子のインスタンスを保管し、かつ、
前記識別子の保管されたインスタンスと前記メタデータサーバによって維持されている識別子を比較することによって、前記識別子が変更されたか否かを判断する、
ように構成されている、実施例８に記載のデータベースシステム。
１０．  前記アクティブノードは、
前記保管されたインスタンスが前記識別子と一致しないと判断されたことに応答して、前記アクティブノードによって割り当てられた部分を示すために、前記データベースカタログの更新を中止する、
ように構成されている、実施例９に記載のデータベースシステム。
１１．  前記分散ストレージは、
前記分散ストレージにおいて割り当てられた部分に対する複数のフラグを維持し、前記複数のフラグのうち１つは、所与の部分が前記第１ノードによって書込まれ得るか否かを示し、かつ、
書込みを防止するように指示されたことに応答して、前記特定の部分と関連する複数のフラグのうち１つを、前記特定の部分に対して書込みできないことを示すように設定する、ように構成されている、
実施例８に記載のデータベースシステム。
１２．  前記アクティブノードは、
クライアント装置からのリクエストをサービスするために、前記分散ストレージにおいてデータを書込むための１つまたはそれ以上の部分のセットを割り当て、
前記識別子が更新されていないとの判断に応答して、前記１つまたはそれ以上の部分のセットに係る１つまたはそれ以上の指示を提供するために、前記カタログのデータを更新する、ように構成されている、
実施例１乃至４および実施例７乃至９のいずれか一項に記載の方法。
１３．  前記データベースシステムは、
前記アクティブノードが前記データベースカタログを更新すること、および、前記分散ストレージに対してデータを書込むことを防止するように決定することに応答して、
前記分散ストレージにデータを書込むために、前記複数のノードのうちの別のアクティブノードを選択し、かつ、
前記別のアクティブノードに前記変更された識別子のインスタンスを保管させ、前記インスタンスは、前記変更された識別子がその後に変更されたか否かを判断するために使用可能である、
ように構成されている、実施例８に記載のデータベースシステム。
１４．  前記データベースシステムは、
前記別のアクティブノードにインスタンスを保管させる以前に、前記別のアクティブノードに前記識別子を変更させることによって前記識別子を変更する、ように構成されており、
前記識別子は、数値である、
実施例１３に記載のデータベースシステム
１５．  実行可能なプログラム命令が保管されている非一時的コンピュータ読取可能な記憶媒体であって、データベースシステムの第１データベースノードに、
前記データベースシステムによって維持されている識別子のインスタンスを保管するステップであり、前記識別子は、前記第１データベースノードが前記データベースシステムのカタログを変更するのを許可されていることを示すように設定されている、ステップと、
共有ストレージに対してデータを書込むための第１リクエストを受信したことに応答して、
前記第１リクエストにサービスするために、前記共有ストレージの第１領域を割り当て、
前記インスタンスと前記維持されている識別子を比較して、前記維持されている識別子が変更された否かを判断するよって、前記カタログの変更が許可されているか否かを判断し、かつ、
前記許可された変更に基づいて、前記第１領域の指示を含むように前記カタログを更新する、
ステップを含む、オペレーションを実行させることができる、
コンピュータ読取可能な記憶媒体。
１６．  前記オペレーションは、さらに、
共有ストレージに対してデータを書込むための第２リクエストを受信したことに応答して、
前記共有ストレージの第２領域を割り当て、
前記インスタンスと前記維持されている識別子を比較して、前記維持されている識別子が変更された否かを判断し、かつ、
前記維持されている識別子が変更されたとの判断に応答して、前記第２領域の指示を含むように前記カタログを更新しないように決定する、
ステップ、を含む、実施例１５に記載のコンピュータ読取可能な記憶媒体。
１７．  前記オペレーションは、さらに、
第２リクエストをサービスするために、前記第１領域に対してデータの書込みを試みるステップと、
前記試みに応答して、前記第１データベースノードが前記第１領域に対してデータを書込むことを前記データベースシステムが防止したものと判断するステップであり、前記共有ストレージは、特定の領域が前記データベースシステムのデータベースノードによって書込み可能か否かの指示を維持するように構成されている、ステップと、
を含む、実施例１５に記載のコンピュータ読取可能な記憶媒体。
１８．  前記データベースシステムは、前記共有ストレージに対してデータを書込むために、前記データベースシステムの複数のデータベースノードのうち１つを選択するように構成されており、かつ、
前記オペレーションは、さらに、
前記共有ストレージに対してデータを書込むための第１データベースノードを前記データベースシステムが選択したことに応答して、
前記第１データベースノードが前記データベースシステムの前記カタログを変更するのを許可されていることを示す前記識別子を変更し、
前記データベースシステムによって維持されている前記識別子のインスタンスの保管を実行する、ステップ、
を含む、実施例１５に記載のコンピュータ読取可能な記憶媒体。
１９．  前記オペレーションは、さらに、
高可用性（ＨＡ）データベースクラスタを実装するために、ＨＡアプリケーションを実行するステップ、を含み、
前記ＨＡアプリケーションは、
前記第１データベースノードにおいて問題が発生したか否かを判断するために、前記第１データベースノードのハートビートをモニタリングし、かつ、
前記第１データベースノードにおいて問題が発生したとの判断に応答して、前記第１データベースノードがカタログの変更を許可されていないことを示すために前記識別子を変更し、かつ、前記第１領域に対する書込みオペレーションを防止するように前記共有ストレージに指示する、
ように動作可能である、実施例１５に記載のコンピュータ読取可能な記憶媒体。
２０．  前記オペレーションは、さらに、
共有ストレージに対してデータを書込むための第２リクエストを受信したことに応答して、
前記第１領域が前記第２リクエストに関連するデータを保管するための容量を有するか否かを判断し、かつ、
前記第１領域が前記容量を有しているとの判断に応答して、前記第１領域に対して前記第２リクエストのデータを書込み、前記第２リクエストは、クライアント装置から受信される、
ステップ、を含む、実施例１５に記載のコンピュータ読取可能な記憶媒体。
***
【００４６】
特定の実施形態が上述されてきたが、たとえ特定の機能に関して単一の実施形態だけが説明されている場合でも、これらの実施形態は、本開示の範囲を限定するように意図されたものではない。本開示において提供される機能の実施例は、特に指示の無い限り、限定的ではなく、むしろ例示的であるように意図されている。上記の説明は、本開示の利益を有している当業者にとって明らであろうように、代替、変更、および等価物をカバーすることが意図されている。
【００４７】
本開示の範囲は、ここにおいて取り扱われる問題の一部または全部を軽減するか否かにかかわらず、ここにおいて(明示的または暗示的のいずれかで)開示された任意の特徴または特徴の組み合わせ、もしくは、その任意的な一般化を含んでいる。従って、この出願(または、その優先権を主張する出願)の審査の最中に、任意のそうした特徴の組み合わせに対して新たな請求項（claims）が作成され得る。特に、添付の請求項を参照すると、従属クレームの特徴は、独立クレームの特徴と組み合わされてよく、そして、それぞれの独立クレームの特徴は、単に添付の請求項において列挙された特定の組み合わせだけでなく、任意の適切な方法で組み合わされてよい。
【図１】
2020529668.tif 000003
【図２】
2020529668.tif 000004
【図３】
2020529668.tif 000005
【図４】
2020529668.tif 000006
【図５】
2020529668.tif 000007
【図６】
2020529668.tif 000008
【図７】
2020529668.tif 000009
【国際調査報告】
2020529668.tif 000010
2020529668.tif 000011
2020529668.tif 000012