IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ セールスフォース ドット コム インコーポレイティッドの特許一覧

特許7233411分散クラスタシステムにおけるノードのフェンシングアウト
<>
  • 特許-分散クラスタシステムにおけるノードのフェンシングアウト 図1
  • 特許-分散クラスタシステムにおけるノードのフェンシングアウト 図2
  • 特許-分散クラスタシステムにおけるノードのフェンシングアウト 図3
  • 特許-分散クラスタシステムにおけるノードのフェンシングアウト 図4
  • 特許-分散クラスタシステムにおけるノードのフェンシングアウト 図5
  • 特許-分散クラスタシステムにおけるノードのフェンシングアウト 図6
  • 特許-分散クラスタシステムにおけるノードのフェンシングアウト 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-24
(45)【発行日】2023-03-06
(54)【発明の名称】分散クラスタシステムにおけるノードのフェンシングアウト
(51)【国際特許分類】
   G06F 16/11 20190101AFI20230227BHJP
   G06F 11/20 20060101ALI20230227BHJP
   G06F 16/182 20190101ALI20230227BHJP
【FI】
G06F16/11
G06F11/20 694
G06F16/182
【請求項の数】 12
(21)【出願番号】P 2020505265
(86)(22)【出願日】2018-08-02
(65)【公表番号】
(43)【公表日】2020-10-08
(86)【国際出願番号】 US2018044976
(87)【国際公開番号】W WO2019028236
(87)【国際公開日】2019-02-07
【審査請求日】2021-07-29
(31)【優先権主張番号】15/667,285
(32)【優先日】2017-08-02
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】ワイアット,ナサニエル
(72)【発明者】
【氏名】ラスプディク,スティーブン
(72)【発明者】
【氏名】ジュッジュリ,ヴェンカテスワララオ
【審査官】松尾 真人
(56)【参考文献】
【文献】特開平09-237226(JP,A)
【文献】米国特許第07739677(US,B1)
【文献】特表2016-526229(JP,A)
【文献】特表2011-526038(JP,A)
【文献】特表2004-528659(JP,A)
【文献】米国特許出願公開第2015/0212760(US,A1)
【文献】米国特許出願公開第2004/0225865(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G06F 11/16-11/20
(57)【特許請求の範囲】
【請求項1】
複数のデータベースノードの中で共有されている分散ストレージによって保管されたデータに対するリクエストを処理するように動作可能であるデータベースクラスタにおける前記複数のデータベースノードのうち第1データベースノードをフェンシングアウトする、データベースシステムのためのコンピュータソフトウェアによる情報処理の方法であって、
前記複数のデータベースノードは、前記データベースクラスタを実装するために、高可用性(HA)アプリケーションを実行するように動作可能であり、かつ、前記方法は、前記HAアプリケーションによって実行されるものであり、
前記HAアプリケーションが、前記データベースシステムのメタデータサーバにおいて、前記第1データベースノードが前記メタデータサーバに保管されたカタログを更新するように許可されていることを示す認可識別子を保管するステップであり、前記カタログは、データを保管するために前記分散ストレージで割り当てられた部分を示し、かつ、前記第1データベースノードは、追加的な部分を参照するために前記カタログを更新する以前に、前記認可識別子を調査するように動作可能である、ステップと、
前記HAアプリケーションが、前記第1データベースノードが誤動作していると決定するステップと、
前記HAアプリケーションが、前記決定に応答して、前記第1データベースノードが、前記データベースクラスタの代わりに、前記分散ストレージにデータを書込むことを防止するために、前記第1データベースノードをフェンシングアウトするステップであり、前記第1データベースノードをフェンシングアウトするステップは、
前記メタデータサーバにおいて、前記第1データベースノードではなく、前記複数のデータベースノードのうち第2データベースノードが、データを保管するために前記分散ストレージで割り当てられた追加的な部分を参照するために前記カタログを更新するように許可されていることを示す、前記認可識別子を更新するステップと、
前記分散ストレージに対して、前記第1データベースノードによって前記分散ストレージで既に割り当てられている1つまたはそれ以上の部分に対する書込みオペレーションを防止するように指示するステップと、
前記データベースクラスタの代わりに前記分散ストレージへのデータ書込みを開始するように、前記第2データベースノードにさせるステップと、
を含む、ステップと、
を含む、方法。
【請求項2】
前記方法は、さらに、
前記HAアプリケーションが、前記分散ストレージにデータを書込むために前記第2データベースノードを選択するステップと、
前記第2データベースノードの選択に応答して、前記HAアプリケーションが、前記第2データベースノードに前記認可識別子のコピーを保持させるステップであり、前記第2データベースノードは、前記カタログを更新する以前に、前記認可識別子のコピーを前記メタデータサーバで保管されている前記認可識別子と比較するように動作可能である、ステップと、
を含む、請求項に記載の方法。
【請求項3】
前記第1データベースノードは、
データを書込むために前記分散ストレージにおける部分のセットを割り当て、
前記部分のセットの割り当てに応答して、前記認可識別子が更新されたか否かを判断するために前記認可識別子を調査することを含めて、前記データベースシステムの前記カタログの更新するように試み、かつ、
前記認可識別子が更新されたとの判断に応答して、前記分散ストレージにおける部分の割り当てを中止する、ように動作可能である、
請求項1または2に記載の方法。
【請求項4】
前記複数のデータベースノードのうち第3データベースノードは、
前記第1データベースノードによって割り当てられた部分を判断するために、前記データベースシステムの前記カタログをモニタリングし、かつ、
前記カタログを更新する前記第1データベースノードに応答して、前記第3データベースノードによって維持されているキャッシュを更新するために、割り当てられた前記部分のセットから読出すように前記指示を使用する、ように動作可能である、
請求項に記載の方法。
【請求項5】
前記第1データベースノードは、
前記メタデータサーバによって保管される前記認可識別子のインスタンスを保管し、
前記認可識別子の前記保管されたインスタンスと前記メタデータサーバによって保管される前記認可識別子を比較することによって、前記認可識別子が更新されたか否かを判断する、ように動作可能である、
請求項1乃至いずれか一項に記載の方法。
【請求項6】
前記分散ストレージは、
前記分散ストレージにおいて割り当てられた部分に対する複数のフラグを維持し、前記複数のフラグのうち1つは、所与の部分が前記第1データベースノードによって書込まれ得るか否かを示し、かつ、
書込みを防止するように指示されたことに応答して、前記既に割り当てられている1つまたはそれ以上の部分と関連する複数のフラグの一部を、前記既に割り当てられている1つまたはそれ以上の部分に対して書込みできないことを示すように設定する、ように動作可能である、
請求項1乃至いずれか一項に記載の方法。
【請求項7】
前記第1データベースノードは、
クライアント装置からのリクエストをサービスするために、前記分散ストレージにおいてデータを書込むための1つまたはそれ以上の部分のセットを割り当て、
前記認可識別子が更新されていないとの判断に応答して、前記1つまたはそれ以上の部分のセットに係る1つまたはそれ以上の指示を提供するために、前記カタログのデータを更新する、ように動作可能である、
請求項1乃至いずれか一項に記載の方法。
【請求項8】
データベースシステムであって、
データベースクラスタを実装するように構成されている複数のデータベースノードと、
前記複数のデータベースノードに対してアクセス可能であり、かつ、前記データベースシステムのデータを保管するように構成されている、分散ストレージと、
メタデータサーバであり、前記複数のデータベースノードのうちのアクティブデータベースノードが前記メタデータサーバによって維持されているデータベースカタログを更新するのを許可されていることを示す認可識別子を維持するように構成されており、前記データベースカタログは、データを保管するために前記分散ストレージで割り当てられた部分を参照し、かつ、前記複数のデータベースノードのうち他のデータベースノードが、前記割り当てられた部分にアクセスするのを可能にする、メタデータサーバと、含み、
前記データベースシステムは、
前記アクティブデータベースノードが誤動作していると決定することに応答して、前記アクティブデータベースノードが、前記データベースクラスタの代わりに、前記分散ストレージに対してデータを書込むことを防止するように前記アクティブデータベースノードをフェンシングアウトするように構成されており、
前記アクティブデータベースノードをフェンシングアウトすることは、
前記メタデータサーバにおいて、前記アクティブデータベースノードではなく、前記複数のデータベースノードのうち第2データベースノードが、前記分散ストレージで割り当てられた追加的な部分を参照するため前記データベースカタログを更新するのを許可されていること示すように前記認可識別子を変更すること、
前記アクティブデータベースノードが、前記アクティブデータベースノードによって前記分散ストレージで既に割り当てられている1つまたはそれ以上の部分に対する書込みオペレーションを防止するように、前記分散ストレージに指示すること、および、
前記データベースクラスタの代わりに前記分散ストレージへのデータ書込みを開始するように、前記第2データベースノードにさせること、
を含む、
データベースシステム。
【請求項9】
前記アクティブデータベースノードは、
前記認可識別子の保管されたインスタンスが前記メタデータサーバによって維持されている前記認可識別子と一致しないと判断されたことに応答して、前記アクティブデータベースノードによって割り当てられた部分を示すため前記データベースカタログの更新を中止する、
ように構成されている、請求項に記載のデータベースシステム。
【請求項10】
前記データベースシステムは、
前記アクティブデータベースノードが前記データベースカタログを更新すること、および、前記分散ストレージに対してデータを書込むことを防止するように決定することに応答して、
前記分散ストレージにデータを書込むために、別の第2のアクティブデータベースノードであるように前記第2データベースノードを選択し、かつ、
前記第2のアクティブデータベースノードに前記変更された認可識別子のインスタンスを保管させ、前記インスタンスは、前記変更された認可識別子がその後に変更されたか否かを判断するために使用可能である、
ように構成されている、請求項に記載のデータベースシステム。
【請求項11】
前記データベースシステムは、
前記第2のアクティブデータベースノードに前記インスタンスを保管させる以前に、前記第2のアクティブデータベースノードに前記認可識別子を変更させることによって前記認可識別子を変更する、ように構成されており、
前記認可識別子は、数値である、
請求項10に記載のデータベースシステム。
【請求項12】
実行可能なプログラム命令が保管されている非一時的コンピュータ読取可能な記憶媒体であり、1つまたはそれ以上のプロセッサによって実行されると、請求項1乃至いずれか一項に記載の方法を実行する、
コンピュータ読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般的に、高可用性システムに関する。そして、より特定的には、クラスタ化されたデータベースシステム(clustered database system)に関する。
【背景技術】
【0002】
組織(organization)が、そのユーザのために情報を保管することを望む場合に、組織は、典型的に、効率的にアクセスされ得る組織化された方法において、この情報を保管するデータベースシステムを実装する。大きなエンタープライズシステムのためのデータベースシステムは、コンピュータクラスタを実装するために複数のサーバに依存し得る。ここで、個々のサーバは、データベースアプリケーションのインスタンスを実行するクラスタノードとして機能する。これらのノードは、ユーザからのリクエストを個別にサービスすることができ、データについて操作する。クラスタの信頼性を確保するために、クラスタは、ノードが誤動作するシナリを説明する必要があり得る。
【図面の簡単な説明】
【0003】
図1図1は、いくつかの実施形態に従って、データベースを実装するデータベースシステムの例示的な要素を示すブロック図である。
図2図2は、いくつかの実施形態に従って、認可識別子(authorization identifier)を維持するメタデータサーバの例示的な要素を示すブロック図である。
図3図3は、いくつかの実施形態に従って、分散ストレージに対するデータ書込みのためのリクエストをサービスするアクティブノードの例示的な要素を示すブロック図である。
図4図4は、いくつかの実施形態に従って、ノードのフェンシングアウト(fencing out)に関する例示的な方法を示すフローチャートである。
図5図5は、いくつかの実施形態に従って、ノードのフェンシングアウトに関する例示的な方法を示すフローチャートである。
図6図6は、いくつかの実施形態に従って、ノードのフェンシングアウトに関する例示的な方法を示すフローチャートである。
図7図7は、いくつかの実施形態に従って、例示的なコンピュータシステムを示すブロック図である。
【0004】
本開示は、「一つの実施形態(”one embodiment”)」または「実施形態(”an embodiment”)」に対する言及を含んでいる。フレーズ「一つの実施形態において」または「実施形態において」の出現(appearance)は、必ずしも同一の実施形態について参照するものではない。特定的な特徴、構造、または特性は、この開示と一貫した任意の適切な方法において組み合わせることができる。
【0005】
この開示の中では、異なるエンティティ(「ユニット(”units”)」、「回路(”circuits”)」、他のコンポーネント、等として様々に参照され得るもの)が、1つまたはそれ以上のタスクまたはオペレーションを実行するために「構成された(”configured”)」ものとして説明され、または、請求され得る。この定式化-[エンティティ]は[1つまたはそれ以上のタスクを実行]するように構成される(”[entity]configured to[perform one or more tasks]”)-は、構造(structure)(すなわち、電子回路といった、何らかの物理的なもの)を参照するために、ここにおいて使用されている。より特定的に、この定式化は、この構造がオペレーションの最中に1つまたはそれ以上のタスクを実行するように配置されていることを示すために使用される。構造は、たとえその構造体が現在オペレーションされていなくても、あるタスクを実行するように「構成された(”configured to”)」、ということができる。「データベース管理アプリケーションのインスタンスを実行するように構成されたノード(”node configured to execute an instance of a database management application”)」は、例えば、オペレーションの最中にこの機能を実行する回路を有する集積回路をカバーするように意図されている。たとえ問題の集積回路が現在使用されていない(例えば、電源が接続されていない)場合であってもである。従って、あるタスクを実行するように「構成された」ものとして説明または語られたエンティティは、デバイス、回路、タスクを実行するために実行可能なプログラム命令を保管しているメモリ、等といった、何らかの物理的なものを参照する。このフレーズは、ここにおいて、何か無形のものを参照するためには使用されない。従って、ここにおいて、作成するように「構成された」は、アプリケーションプログラミングインターフェイス(application programming interface、API)といった、ソフトウェアエンティティを参照するためには使用されない。
【0006】
用語「構成された」は、「構成可能である("configurable to")」を意味するように意図されたものではない。プログラムされていないFPGAは、例えば、ある特定的な機能を実行するように「構成され」ているとは考えられないだろうが、その機能を実行するように「構成可能である」だろうし、そして、プログラミングの後でその機能を実行するように「構成され」得る。
【0007】
ここにおいて使用されるように、用語「第1("first")」、「第2("second")」、等は、それらが先行する名詞のためのラベルとして使用され、そして、具体的に記述されない限り、いかなるタイプの順序付け(ordering)(例えば、空間的、時間的、論理的なもの、等)も意味しない。例えば、8つのノードを有しているデータベースシステムにおいて、用語「第1」および「第2」ノードは、8つのノードのうち任意の2つを参照するように使用することができる。
【0008】
ここにおいて使用されるように、用語「基づいて(”based on”)」は、決定に影響する1つまたはそれ以上のファクタを記述するために使用される。この用語は、追加的なファクタが決定に影響し得る可能性を排除するものではない。つまり、決定は、特定的なファクタのみに基づいてよく、または、特定的なファクタ並びに他の不特定のファクタに基づいてもよい。フレーズ「Bに基づいてAを決定する(”determine A based on B”)」を考える。このフレーズは、Bが、Aを決定するために使用されるファクタであること、または、Aの決定に影響するファクタであることを規定している。このフレーズは、Aの決定も、また、Cといった、他のファクタに基づき得ることを排除するものではない。このフレーズは、また、AがBのみに基づいて決定される実施形態もカバーするように意図されている。ここにおいて使用されるように、「基づいて」は、従って、フレーズ「少なくとも部分的に基づいて(”based at least in part on”)」と同義語である。
【発明を実施するための形態】
【0009】
誤動作している(malfunctioning)データベースノードは、データを破壊し、かつ/あるいは、データベースの運用を妨害する可能性を有するので、問題のあるデータベースノードをフェンスオフ(fence off)(すなわち、隔離(isolate))することが重要であり得る。誤動作しているノードを隔離する1つのアプローチは、物理的に電源を落とすことを含んでおり、-シュートアザーノードインヘッド(Shoot The Other Node In The Head、STONITH)として参照されている。このアプローチにおいて、誤動作しているノードは、典型的に、手動によるか、または、ロボット制御プロセスを使用するかのいずれかによって、ノードにおける電力スイッチをフリップする(flipping)ことによってシャットダウンされる。そうしたアプローチは、しかしながら、「電線(”wire”)」上で、または、コントローラレベルにおいて現在通信されている入力/出力を中止しない。別のアプローチは、一連の複雑なスモールコンピュータシステムインターフェイス(Small Computer System Interface、SCSI)コマンドを発行することを含み、SCSIプロトコルの機能を利用する。-しばしばSCSIフェンシングとして参照されるものである。このアプローチは、しかしながら、分散データベースシステムにおいては上手く機能しない。データが複数のディスクおよびコントローラにわたり共有されると、複雑さが増加するからである。
【0010】
本開示は、従来のアプローチの欠点を克服するやり方で、データベースノードをフェンシングアウトするための技術を説明する。以下に説明される様々な実施形態において、データベースシステムは、データベースノードが、1)共有ストレージでデータを書込むために割り当てられた新たなデータベース部分を示すためのカタログを更新すること、および、2)既に割り当てられた部分に対して書込むこと、を防止することによって、データベースノードをフェンシングアウトする。カタログが更新されることを防止するために、データベースシステムのメタデータサーバは、データベースノードがカタログを更新してよいか否かを示す識別子を維持することができる。それとして、データベースノードがカタログを更新することを望む場合、データベースノードはメタデータサーバと通信して、そうする権限を有するか否かを判断することができる。-この権限は、維持されている識別子に基づいている。そうした実施形態においては、データベースノードがフェンスで囲まれる(fenced off)場合、データベースシステムは、データベースノードがカタログを更新する権限を有さないことを示すように、メタデータサーバでの識別子を更新することができる。誤動作しているノードが、既に割り当てられた部分に書込むことを防止するために、データベースシステムは、割り当てられた部分を保管している共有ストレージに、既に割り当てられている部分に対するあらゆる新たな書込みを防止するように指示する(instruct)ことができる。このフェンシングアプローチは、従来のアプローチよりも有利であり得る。例えば、ノードの電源を切るために何らかの外部メカニズム(例えば、アドミニストレータ)に依存することがなく、そして、例えば、SCSIに基づくソリューションよりも複雑でないからである。
【0011】
これから図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は、また、分散ストレージでなくてもよい。
【0012】
データベースシステム10は、様々な実施形態において、データベースクラスタ100として動作し、かつ、トランザクションリクエスト146および156を処理するように構成されている、ノード140および150を介して部分的に実装される。これらのリクエストは、ストレージ120に対するデータの読出し及び/又は書込みを含み得る。例えば、アクティブノード140は、ユーザのパスワードを新たな値に更新するためのリクエスト146を受信することができ、そして、従って、レコードがその値を含んでいる割り当てられた領域122に対してレコードを書込むことができる。いくつかの実施形態において、データベースシステム10は、アクティブスタンバイトポロジを使用してHAサービスを実装しており、そこでは、データベースノードの1つまたはそれ以上が、他のノードに代わって、ストレージ120に対してデータを書込むために選択される。-選択されたノードはアクティブノード140として示されており、そして、選択されなかったノードはスタンバイノード150として示されている。
【0013】
アクティブノード140は、様々な実施形態において、分散ストレージ120に対するデータの読出し及び書込みリクエストをサービスするように構成されている(トランザクション書込みリクエスト146だけが示されているにもかかわらず)。従って、アクティブノード140は、クライアント装置からトランザクション書込みリクエスト146を受信し、そして、ストレージ120における割り当てられた領域122に対してデータを書込むための対応するレコード書込みリクエスト144を発行することができる。以下に説明されるいくつかの実施形態において、割り当てられた領域122は、レコードが書込まれ、かつ、読出され得るストレージ120内の割り当てられていないスペース124からノード140によって生成されたファイルである。アクティブノード140が、図3に関して、以下により詳細に説明される。
【0014】
スタンバイノード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の1つは、アクティブノード140になるように選択することができ、-この時点で、ノードは、トランザクション書込みリクエスト146をサービスすることができる。システム10の現在の状態に関した最新(up-to-date)のメタデータを維持することによって、新たに選択されたノード150は、より迅速にアクティブノード140の役割を引き受けることができる。
【0015】
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によって、代替的に実行され得る)。
【0016】
以下でより詳細に説明されるように、マネージャ110は、また、ノードが誤作動しているという決定に応答して(または、ユーザのリクエストに応答して)、ノード140および150をフェンシングアウトするようにも実行可能であり得る。(様々なフェンシングオペレーションが、マネージャ110によって実行されるものとして以下に説明されるが、いくつかの実施形態において、これらのオペレーションは、マネージャ110以外のエンティティによって実行されてよい)。以下に説明する様々な実施形態において、マネージャ110は、ノードがカタログ134を更新すること、および、割り当てられた領域122に書込むことを防止することによって、ノード140をフェンシングアウトすることができる。このプロセスは、ストレージ120およびメタデータサーバ130を簡単に説明した後で、以下でより詳細に説明される。
【0017】
分散ストレージ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を割り当てることができる。-例えば、10個の領域122のブロックである。より詳細に説明されるように、様々な実施形態において、アクティブノード140は、新たな領域122を割り当て、レコードで満杯の、古い領域をクローズアウトするときに、(図1に示すリクエスト142を介して)カタログ134を更新する。これらの更新は、スタンバイノード150によって調査(reviewed)され得る。新たに割り当てられた領域122に気付き、そして、それらの領域122の内容を読出すためである。例えば、ノード150は、所与の領域122内のデータベースレコードを読出すことができ、そうして、データベースシステムの現在の状態を反映させるために、様々なローカルに維持されているメタデータ(上述のローカルキャッシュといったもの)を更新することができる。以下に説明されるように、アクティブノード140をフェンシングアウトしようと試みるとき、カタログ134に対するアクセスは制限され得る。
【0018】
様々な実施形態において、ストレージ120は、割り当てられた領域122がアクティブノード140によって書込まれることが許可されているか否かを示すメタデータを維持するように構成されている。例えば、いくつかの実施形態において、このメタデータは、現在のアクティブノード140が、関連する割り当てられた領域122に対してレコードを書込むことが許可されているか否か(または、より一般的には、システム10内のいずれかのノードが領域122を変更できるか否か)を示している、各領域122に対する書込みフラグ(write flag)を含んでよい。以下に説明されるように、これらの書込みフラグは、ノード140がフェンシングアウトされるべきであるという決定に応答して、マネージャ110によって設定されてよい。
【0019】
メタデータサーバ130は、様々な実施形態において、データベースシステム10を実装するためにノード140および150によって使用可能なメタデータを維持するように構成されている。例えば、示されるように、サーバ130は、様々なデータベース構造およびオブジェクト、データベース内のデータを検索する(looking up)ためのインデックス、データベース情報にアクセスするためのユーザ許可、等を定義しているスキーマ(schema)を指定することができるカタログ134を維持し得る。上述のように、いくつかの実施形態において、カタログ134は、割り当てられた領域122の指示を提供しているメタデータを保管する。このメタデータは、対応する割り当てられた領域122が配置されている、ストレージ120内の物理的位置を特定する位置情報(領域122のID、キー、等といったもの)を含んでよい。変更されたカタログ134に応答して、サーバ130は、カタログ134が変更されたことをノード150に通知することができる。従って、ノード150は、次いで、カタログ134を調査し、そして、新たに追加されたキーを使用して、対応する割り当てられた領域122を配置することができる。様々な場合において、ノード150は、通知されることなく、カタログ134を定期的に調査することができる。
【0020】
上述のように、アクティブノード140は、領域122を割り当てた後で、カタログ更新リクエスト142を介してカタログ134を更新することに責任を負い得る。サーバ130は、様々な実施形態において、現在のアクティブノード140がカタログ134を更新してよいか否かを示す値(認可識別子132として示されるもの)を維持する。アクティブノード140は、カタログ134を更新するように望むとき、様々な実施形態において、識別子132が変更されたか否かを判断する。識別子132が変更されていない場合、ノード140は、カタログ134を更新するように進めることができる。しかしながら、識別子132が変更されている場合に、ノード140は、新たに割り当てられた領域122を反映するようにカタログ134を更新しなくてよい。
【0021】
上述のように、種々の実施形態において、HAクラスタマネージャ110は、あるポイントで、アクティブノード140をフェンシングアウトすることが保証されていると判断することができる。例えば、ハートビート信号は、もはや受信されていない、ユーザがそれをリクエストした、等だからである。そうした判断を行うことに応答して、マネージャ110は、アクティブノード140が、おそらく壊れているレコードを書込むこと、および、より壊れた可能性のあるレコードを書込むために追加の領域122を割り当てることを防止しようとすることができる。ノード140がカタログ134を更新すること防止するために、様々な実施形態において、マネージャ110は、認可識別子132を変更するために、メタデータサーバ130についてリクエスト(変更識別子リクエスト112として示される)を発行する。いくつかの実施形態において、このリクエスト112は、マネージャ110のインスタンスを実行している、新たに選択されたスタンバイノード150からのものであってよい。上述のように、そうした実施形態において、一旦識別子132が変更されると、アクティブノード140はカタログ134を更新することが許されない。カタログ更新リクエスト142は、従って、アクティブノード140がカタログ134を更新することが妨げられていることを示すために、図1の「X」を用いて示されている。いくつかの実施形態において、アクティブノード140は、既に割り当てられた領域122を反映するためにカタログ134を更新することができない場合に、新たな領域122を割り当てることを中止するように構成されている。-従って、ノード140は、変更されている認可識別子132に応答して、新たなレコードを保管するために、新たな領域122を割り当てることを効果的に禁じられている。
【0022】
ノード140が既に割り当てられた領域122に対して書込むことを防止するために、図示された実施形態において、マネージャ110は、ストレージ120に対してブロック書込みリクエスト114を発行する。このリクエストは、割り当てられた領域122のうち指定されたセットに対する書込みオペレーションを防止するようにストレージ120に指示することができ、そして、いくつかの実施形態においては、新たに選択されたノード150によって発行され得る。リクエスト114の受信に応答して、ストレージ120は、アクティブノード140がレコードを書込むことを防止するために、領域122の指定されたセットに関連する書込みフラグを設定することができる。その後、ノード140がストレージ120に対するレコード書込みリクエスト144を発行するとき、いくつかの実施形態において、ストレージ120は、フラグから、リクエスト144を拒否し、そして、既に割り当てられた領域122に対して別のレコードを追加しないことを決定する。レコード書込みリクエスト144は、従って、図1において「X」を用いて示されており、ノード140が指定された領域122に対してレコードを書込むことが防止されたことを示している。カタログ更新リクエスト142およびレコード書込みリクエスト144をブロックすることにおいて、マネージャ110は、アクティブノード140を効果的にフェンシングアウトして、データベースシステム10内のデータを潜在的に破損することを防止している。
【0023】
これから図2に移ると、メタデータサーバ130の一つの実施形態に係るブロック図が示されている。上述のように、様々な実施形態において、サーバ130は、データベースシステム10を実装するためにノード140および150によって使用可能なメタデータを保管するように構成されている。図示された実施形態において、サーバ130は、認可識別子132およびカタログ134を含んでいる。さらに、示されるように、カタログ134は、割り当てられた領域メタデータ210を含んでいる。様々な実施形態において、メタデータサーバ130は、図示されたものとは異なるように実装され得る。
【0024】
上述のように、カタログ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に対するタイムスタンプ、等といったものである。
【0025】
上述のように、様々な実施形態において、認可識別子132は、現在のアクティブノード140がカタログ134を更新し得るか否かを示す値である。いくつかの実施形態において、識別子132は、アクティブノード140を明示的に識別する。例えば、識別子132は、ノード140のIPアドレス、固有のノード識別子、等であり得る。他の実施形態において、図3を用いて説明されるように、識別子132は、ノード140を明示的に識別せず、むしろ、識別子132は、現在のアクティブノード140になるノードについて設定される英数字(alpha and/or numeric characters)のシーケンスであり、そして、ノードが依然としてアクティブノード140である限り、変更されないままである。従って、そうした実施形態において、識別子132は、マネージャ110が新たなアクティブノード140を選択したときにだけ更新される。
【0026】
これから図3に移ると、アクティブノード140の一つの実施形態に係るブロック図が示されている。図示された実施形態において、アクティブノード140は、HAクラスタマネージャ110のインスタンス、データベースアプリケーション310、および、認可識別子コピー320を含んでいる。様々な実施形態において、アクティブノード140は、図示されたものとは異なるように実装され得る。例えば、HAクラスタマネージャ110およびデータベースアプリケーション310は、同じアプリケーションの一部である。
【0027】
データベースアプリケーション310は、様々な実施形態において、領域122からのレコードの書込み及び読出しを含む、クライアントからのリクエスト146および156をサービスするために、ノード140によって実行可能なアプリケーションである。いくつかの実施態様において、アプリケーション310は、また、ストレージ120における領域122に関するメタデータ210を用いてカタログ134を更新するためにも実行可能である。1つまたはそれ以上の領域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も割り当てしない。
【0028】
これから図4に移ると、方法400のフローチャートが示されている。方法400は、データベースノード(例えば、ノード140)をフェンシングアウトするために、コンピュータシステム(例えば、データベースシステム10)によって実行される方法に係る一つの実施形態である。様々な実施形態において、コンピュータシステムのノード(例えば、ノード140および150)は、高可用性(HA)アプリケーション(例えば、HAクラスタマネージャ110)を実行する。HAデータベースクラスタを実装し、かつ、方法400のステップを実行するものである。いくつかの実施形態において、方法400は、分散ストレージ(例えば、ストレージ120)において割り当てられた部分(例えば、領域122)からの読出しといった追加のステップを含んでいる。
【0029】
方法400は、ステップ410において開始し、コンピュータシステムは、メタデータサーバ(例えば、サーバ130)内に、第1ノード(例えば、ノード140)はデータベースシステムのメタデータサーバに保管されたカタログ(例えば、カタログ134)を更新することが許可されていることを示す値(例えば、識別子132)を保管している。第1ノードは、カタログを更新する以前に値を調査することができる。例として、一つの実施形態において、第1ノードは、データを書込むために、分散ストレージにおける部分のセットを割り当て、そして、そうすることに応答して、割り当てられた部分のセットに関するメタデータを用いてカタログを更新しようと試みる。第1ノードは、最初に、メタデータサーバに保管されている値を調査することによって、それが更新されたか否かを判断し、そのように行うことができる。様々な事例において、第1ノードは、値が更新されていないと判断し、そして、結果として、割り当てられた部分の指示を含むように、カタログを更新することができる。他の実施形態において、第1ノードは、値が更新されたと判断し、そして、分散ストレージでの部分の割り当てを中止する。様々な実施形態において、値は、メタデータサーバの代わりに分散ストレージにおいて保管される。
【0030】
第1ノードが、カタログを更新し、そして、分散ストレージに書込むことを防止する決定に応答して、ステップ420において、コンピュータシステムは、メタデータサーバに保管された値を更新し、第1ノードがカタログを更新するのを許可されていないことを示す。この決定は、ユーザからのリクエストから、または、自動化プロセスを介して、結果として生じ得るものである。様々なインスタンスにおいて、HAアプリケーションは、この決定を行うことができる。いくつかの実施形態において、HAアプリケーションは、分散ストレージに対してデータを書込むための第2ノード(例えば、ノード140)を選択し、そして、選択されたノードにその値を更新させ、かつ、そのコピー(例えば、認可識別子コピー320)を保管させる。
【0031】
ステップ430において、コンピュータシステムは、データを書込むためにデータベースノードについて割り当てられた特定の部分に対する書込みオペレーションを防止するように、分散ストレージに指示する。いくつかの実施形態において、分散ストレージは、割り当てられた部分それぞれについて書込みフラグを保管し、そして、指示されたことに応答して、コンピュータシステムのノードが特定の部分に対してデータを書き込むことができないことを示すために、特定の部分の書込みフラグを設定する。
【0032】
これから図5に移ると、方法500のフローチャートが示されている。方法500は、アクティブノード(例えば、ノード140)をフェンシングアウトするために、データベースシステム(例えば、システム10)によって実行される方法に係る一つの実施形態である。方法400と同様に、方法500のステップは、データベースシステムのノード(例えば、ノード140および150)にわたり分散されたHAアプリケーション(例えば、マネージャ110)によって実行され得る。様々な実施形態において、方法500は、追加のステップを含んでいる。-例えば、スタンバイノード(例えば、ノード150)はカタログ(例えば、カタログ134)をモニタリングし、アクティブノードによって何らかの新たな部分(例えば、領域122)が割り当てられたか否かを判断する。
【0033】
方法500は、ステップ510において開始し、データベースシステムは、アクティブノードがカタログを更新し、そして、分散ストレージ(例えば、ストレージ120)に対してデータを書込むことを防止するように決定する。アクティブノードの防止する決定に応答して、様々な実施形態において、データベースシステムは、分散ストレージに対してデータを書込むための新たなアクティブノードを選択する。決定は、クライアントシステムからリクエストを受信することに応答して行われてよい。
【0034】
アクティブノードがカタログを更新することを防止するように決定することに応答して、ステップ520において、データベースシステムは、アクティブノードがカタログを更新するのを許可されていないことを示すために識別子(例えば、132)を変更する。様々な実施形態において、メタデータサーバ(例えば、サーバ130)は、識別子を維持する。アクティブノードは、識別子のインスタンス(例えば、コピー320)を保管し、そして、その識別子がカタログを更新する以前に変更されたか否かを判断するためにインスタンスを使用することができる。様々な実施形態において、アクティブノードは、保管されたインスタンスをメタデータサーバにおいて維持されている識別子と比較することによって、この判断を行う。いくつかの実施形態において、アクティブノードは、保管されたインスタンスが識別子と一致しないという判断に応答して、アクティブノードによって割り当てられた部分を示すために、カタログの更新を中止する。いくつかの実施形態において、データベースシステムは、新たに選択されたノードに、識別子を変更させ、そして、変更された識別子がその後に変更されたか否か判断するために、変更された識別子のインスタンスを保管させる。様々な実施形態において、メタデータサーバによって維持される識別子は数値である。
【0035】
ステップ530において、アクティブノードが分散ストレージに対してデータを書込むことを防止する決定に応答して、データベースシステムは、アクティブノードから、データを書込むために割り当てられた特定の部分に対する書込み動作を防止するように分散ストレージに指示する。様々な実施形態において、分散ストレージは、分散ストレージにおいて割り当てられた部分についての書込みフラグを維持する。これらのフラグは、与えられた部分がアクティブノードによって書き込まれ得るか否かを示すことができる。データベースシステムによって書込みを防止するように指示されていることに応答して、分散ストレージは、特定の部分がアクティブノードによって書込みできないことを示すために、特定の部分に関連するフラグを設定することができる。
【0036】
これから図6に移ると、方法600のフローチャートが示されている。方法600は、共有ストレージ(例えば、ストレージ120)の領域(例えば、領域122)を割り当て、そして、割り当てられた領域を示すようにカタログ(例えば、カタログ134)を更新するために、データベースノード(例えば、ノード140)によって実行される方法に係る一つの実施形態である。方法600のステップは、共有ストレージに対してデータを書込むためのトランザクションリクエスト(例えば、リクエスト146)を受信することに応答して実行されてよい。様々な実施形態において、方法600は、追加のステップを含む。-例えば、割り当てられた領域が追加のデータを保管するための容量を有するか否かを決定すること、データベースノードで問題が発生したことを決定すること、等である。
【0037】
方法600は、ステップ610において開始し、データベースノードは、そのデータベースノードのデータベースシステム(例えば、システム10)によって維持されている識別子(例えば、132)のインスタンス(例えば、コピー320)を保管している。様々な実施形態において、識別子は、データベースノードがデータベースシステムのカタログを変更するのを許可されていることを示すように設定されている。最初に、データベースシステムは、共有ストレージに対してデータを書込むために、複数のデータベースノードからデータベースノードを選択することができる。データを書込むために選択されていることに応答して、データベースノードは、新たに選択されたデータベースノードがカタログを変更するのを許可されていることを示すために、識別子を変更することができる。その後に、様々な実施形態において、データベースノードはステップ610を実行する。
【0038】
共有ストレージにデータを書込むためのリクエストの受信に応答して、ステップ620において、データベースノードは、リクエストをサービスするために、共有ストレージの領域を割り当てる。いくつかの実施形態において、データベースノードは、領域に対してデータを書き込もうと試み、そして、データベースノードが領域にデータを書込むことをデータベースシステムが防止したと判断する。様々な実施形態において、共有ストレージは、特定の領域がデータベースノード(例えば、ノード140)によって書き込まれ得るか否かの指示を維持している。
【0039】
ステップ630において、データベースノードは、維持されてきた識別子が変更されたか否かを判断するためにインスタンスと維持された識別子とを比較することによって、カタログの変更が許可されているか否かを判断する。データベースノードは、HAデータベースクラスタを実装するために、高可用性(HA)アプリケーション(例えば、マネージャ110)を実行することができる。いくつかの実施形態において、HAアプリケーションはデータベースノードにおいて問題が発生したか否かを判断するために、データベースノードのハートビート(heart beat)をモニタリングしている。データベースノードにおいて問題が発生したと判断することに応答して、HAアプリケーションは、データベースノードがカタログを変更するのを許可されていないことを示すために識別子を変更することができ、そして、割り当てられた領域に対する書込み操作を防止するように共有ストレージに指示することができる。いくつかの実施形態において、HAアプリケーションは、共有ストレージに対してデータを書込むために他のデータベースノードを選択し、そして、他のノードは、識別子を変更し、かつ、共有ストレージに指示する。
【0040】
認可されている変更に基づいて、ステップ640において、データベースノードは、割り当てられた領域の指示を含むようにカタログを更新する。いくつかの実施形態においては、データベースノードがカタログを変更するのを許可されていないことを示すように維持されている識別子が変更されたと判断することに基づいて、データベースノードは、割り当てられた領域の指示を含むようにカタログを更新することを中止してよい。いくつかの事例において、割り当てられた領域の指示を含んでいないカタログは、他のノード(例:150)を割り当てられた領域に気付かないようにさせる。
【0041】
コンピュータシステムの実施例
これから図7に移ると、データベースシステム10を実装することができる、例示的なコンピュータシステム700のブロック図が示されている。コンピュータシステム700は、インターコネクト760(例えば、システムバス)を介してシステムメモリ720およびI/Oインターフェイス740に接続されているプロセッササブシステム780を含む。I/Oインターフェイス740は、1つまたはそれ以上の入出力装置(I/O devices)750に接続されている。コンピュータシステム700は、様々なタイプのデバイスのいずれであってもよく、これらに限定されるわけではないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、移動電話といった消費者機器、音楽プレーヤ、またはパーソナルデータアシスタント(PDA)を含んでいる。便宜上、図7には単一のコンピュータシステム700が示されているが、システム700は、また、一緒に動作する2つまたはそれ以上のコンピュータシステムとして実装されてもよい。
【0042】
プロセッササブシステム780は、1つまたはそれ以上のプロセッサまたは処理ユニットを含んでよい。コンピュータシステム700の様々な実施形態において、プロセッササブシステム780の複数のインスタンスが、インターコネクト760に接続され得る。様々な実施形態において、プロセッササブシステム780(または、780内の各プロセッサユニット)は、キャッシュまたは他の形態のオンボードメモリを含んでよい。
【0043】
システムメモリ720は、ここにおいて説明された種々のオペレーションをシステム700に実行させるように、プロセッササブシステム780によって実行可能なプログラム命令を保管するために使用可能である。システムメモリ720は、異なる物理的なメモリメディアを使用して実装され得る。ハードディスクストレージ、フロッピー(登録商標)ディスクストレージ、リムーバブルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM、等)、読出し専用メモリ(PROM、EEPROM、等)など、といったものである。コンピュータシステム700内のメモリは、メモリ720といった、1次記憶装置(primary storage)に限定されない。むしろ、コンピュータシステム700は、また、他の形態のストレージを含んでもよい。プロセッササブシステム780内のキャッシュメモリ、および、入出力装置750における2次記憶装置(例えば、ハードドライブ、ストレージアレイ、等)といったものである。いくつかの実施形態において、これらの他の形態のストレージは、また、プロセッササブシステム780によって実行可能なプログラム命令を保管してもよい。いくつかの実施形態において、上述のマネージャ110は、システムメモリ720を含んでよく(または、その中に含まれてよい)。
【0044】
I/Oインターフェイス740は、様々な実施形態に従って、他の装置に対して接続し、かつ、通信するように構成された様々なタイプのインターフェイスのいずれであってもよい。一つの実施形態において、I/Oインターフェイス740は、フロントサイドから1つまたはそれ以上のバックサイドのバスまでのブリッジチップ(例えば、サウスブリッジ(Southbridge))である。I/Oインターフェイス740は、1つまたはそれ以上の対応するバスまたは他のインターフェイスを介して、1つまたはそれ以上の入出力装置750に接続されてよい。入出力装置750の実施例は、ストレージデバイス(ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレイ、SAN、または、それらに関連するコントローラ)、ネットワークインターフェイス装置(例えば、ローカルまたはワイドエリアネットワークに対するもの)、または、他の装置(例えば、グラフィックス、ユーザインターフェイス装置、等)を含んでいる。一つの実施形態において、コンピュータシステム700は、ネットワークインターフェイス装置750(例えば、Wi-Fi、Bluetooth(登録商標)、Ethernet、等にわたり通信するように構成されているもの)を介してネットワークに接続されている。
【0045】
本出願のサブジェクトマター(subject matter)の実現化は、これらに限定されるわけではないが、以下の実施例1から20までを含んでいる。
1. 分散ストレージ内に保管されたデータベースシステムのデータに対するリクエストを処理するように構成されている複数のノードのうち第1ノードをフェンシングアウトする、データベースシステムのための方法であって、前記方法は、
前記データベースシステムのメタデータサーバ内に、前記第1ノードが前記メタデータサーバに保管された前記データベースシステムのカタログの更新するように許可されていることを示す値を保管するステップであって、前記第1ノードは、前記カタログを更新する以前に、前記値を調査するように構成されている、ステップと、
前記第1ノードが、前記カタログを更新すること、および、前記分散ストレージに書込むことを防止する決定に応答して、
前記メタデータサーバにおいて、前記第1ノードが前記カタログを更新するように許可されていないことを示す値を更新するステップ、および、
分散ストレージに対して、データ書込みのために前記第1ノードに割り当てられた特定の部分に対する書込みオペレーションを防止するように指示するステップ、を含む、方法。
2. 前記複数のノードは、高可用性(HA)データベースクラスタを実装するために、HAアプリケーションを実行するように構成されており、前記方法は、前記HAアプリケーションによって実行される、実施例1に記載の方法。
3. 前記方法は、さらに、
前記HAアプリケーションが、前記分散ストレージにデータを書込むために前記複数のノードのうち第2ノードを選択するステップと、
前記第2ノードの選択に応答して、前記HAアプリケーションが、前記第2ノードに値のコピーを保持させるステップであり、前記第2ノードは、前記カタログを更新する以前に、前記値のコピーと前記メタデータサーバ内に保管された値を比較するように構成されている、ステップを含む、実施例2に記載の方法。
4. 前記方法は、さらに、
前記HAアプリケーションが、前記第1ノードが前記分散ストレージに書込むことを防止するように決定を行うステップを含む、実施例2に記載の方法。
5. 前記第1ノードは、
データを書込むために前記分散ストレージにおける部分のセットを割り当て、
前記部分のセットの割り当てに応答して、前記値が更新されたか否かを判断するために前記値を調査することを含めて、前記データベースシステムの前記カタログの更新するように試み、かつ、
前記値が更新されたとの判断に応答して、前記分散ストレージにおける部分の割り当てを中止する、ように構成されている、実施例1に記載の方法。
6. 前記第1ノードは、
データを書込むために前記分散ストレージにおける部分のセットを割り当て、
前記部分のセットの割り当てに応答して、前記値が更新されたか否かを判断するために前記値を調査することを含めて、前記データベースシステムの前記カタログの更新するように試み、かつ、
前記値が更新されなかったとの判断に応答して、割り当てられた前記部分のセットを含むように前記カタログを更新する、ように構成されている、実施例1に記載の方法。
7. 前記複数のノードのうち第2ノードは、
前記第1ノードによって割り当てられた部分を判断するために、前記データベースシステムの前記カタログをモニタリングし、かつ、
前記カタログを更新する前記第1ノードに応答して、前記第2ノードによって維持されているキャッシュを更新するために、割り当てられた前記部分のセットから読出すように前記指示を使用する、ように構成されている、実施例6に記載の方法。
8. データベースシステムであって、
データベースクラスタを実装するように構成されている複数のノードと、
前記複数のノードに対してアクセス可能であり、かつ、前記データベースシステムのデータを保管するように構成されている、分散ストレージと、
メタデータサーバであり、前記複数のノードのうちのアクティブノードが前記メタデータサーバによって維持されているデータベースカタログを更新するのを許可されていることを示す識別子を維持するように構成されている、メタデータサーバと、含み、
前記データベースシステムは、
前記アクティブノードが前記データベースカタログを更新すること、および、前記分散ストレージに対してデータを書込むことを防止するように決定し、かつ、
前記アクティブノードに対する防止の決定に応答して、
前記メタデータサーバにおいて、前記アクティブノードが前記データベースカタログを更新するのを許可されていないこと示すように前記識別子を変更し、
前記アクティブノードがデータ書込みのために割り当てられている特定の部分に対する書込みオペレーションを防止するように、前記分散ストレージに指示する、
ように構成されている、データベースシステム。
9. 前記アクティブノードは、
前記メタデータサーバによって維持されている前記識別子のインスタンスを保管し、かつ、
前記識別子の保管されたインスタンスと前記メタデータサーバによって維持されている識別子を比較することによって、前記識別子が変更されたか否かを判断する、
ように構成されている、実施例8に記載のデータベースシステム。
10. 前記アクティブノードは、
前記保管されたインスタンスが前記識別子と一致しないと判断されたことに応答して、前記アクティブノードによって割り当てられた部分を示すために、前記データベースカタログの更新を中止する、
ように構成されている、実施例9に記載のデータベースシステム。
11. 前記分散ストレージは、
前記分散ストレージにおいて割り当てられた部分に対する複数のフラグを維持し、前記複数のフラグのうち1つは、所与の部分が前記第1ノードによって書込まれ得るか否かを示し、かつ、
書込みを防止するように指示されたことに応答して、前記特定の部分と関連する複数のフラグのうち1つを、前記特定の部分に対して書込みできないことを示すように設定する、ように構成されている、
実施例8に記載のデータベースシステム。
12. 前記アクティブノードは、
クライアント装置からのリクエストをサービスするために、前記分散ストレージにおいてデータを書込むための1つまたはそれ以上の部分のセットを割り当て、
前記識別子が更新されていないとの判断に応答して、前記1つまたはそれ以上の部分のセットに係る1つまたはそれ以上の指示を提供するために、前記カタログのデータを更新する、ように構成されている、
実施例1乃至4および実施例7乃至9のいずれか一項に記載の方法。
13. 前記データベースシステムは、
前記アクティブノードが前記データベースカタログを更新すること、および、前記分散ストレージに対してデータを書込むことを防止するように決定することに応答して、
前記分散ストレージにデータを書込むために、前記複数のノードのうちの別のアクティブノードを選択し、かつ、
前記別のアクティブノードに前記変更された識別子のインスタンスを保管させ、前記インスタンスは、前記変更された識別子がその後に変更されたか否かを判断するために使用可能である、
ように構成されている、実施例8に記載のデータベースシステム。
14. 前記データベースシステムは、
前記別のアクティブノードにインスタンスを保管させる以前に、前記別のアクティブノードに前記識別子を変更させることによって前記識別子を変更する、ように構成されており、
前記識別子は、数値である、
実施例13に記載のデータベースシステム
15. 実行可能なプログラム命令が保管されている非一時的コンピュータ読取可能な記憶媒体であって、データベースシステムの第1データベースノードに、
前記データベースシステムによって維持されている識別子のインスタンスを保管するステップであり、前記識別子は、前記第1データベースノードが前記データベースシステムのカタログを変更するのを許可されていることを示すように設定されている、ステップと、
共有ストレージに対してデータを書込むための第1リクエストを受信したことに応答して、
前記第1リクエストにサービスするために、前記共有ストレージの第1領域を割り当て、
前記インスタンスと前記維持されている識別子を比較して、前記維持されている識別子が変更された否かを判断するよって、前記カタログの変更が許可されているか否かを判断し、かつ、
前記許可された変更に基づいて、前記第1領域の指示を含むように前記カタログを更新する、
ステップを含む、オペレーションを実行させることができる、
コンピュータ読取可能な記憶媒体。
16. 前記オペレーションは、さらに、
共有ストレージに対してデータを書込むための第2リクエストを受信したことに応答して、
前記共有ストレージの第2領域を割り当て、
前記インスタンスと前記維持されている識別子を比較して、前記維持されている識別子が変更された否かを判断し、かつ、
前記維持されている識別子が変更されたとの判断に応答して、前記第2領域の指示を含むように前記カタログを更新しないように決定する、
ステップ、を含む、実施例15に記載のコンピュータ読取可能な記憶媒体。
17. 前記オペレーションは、さらに、
第2リクエストをサービスするために、前記第1領域に対してデータの書込みを試みるステップと、
前記試みに応答して、前記第1データベースノードが前記第1領域に対してデータを書込むことを前記データベースシステムが防止したものと判断するステップであり、前記共有ストレージは、特定の領域が前記データベースシステムのデータベースノードによって書込み可能か否かの指示を維持するように構成されている、ステップと、
を含む、実施例15に記載のコンピュータ読取可能な記憶媒体。
18. 前記データベースシステムは、前記共有ストレージに対してデータを書込むために、前記データベースシステムの複数のデータベースノードのうち1つを選択するように構成されており、かつ、
前記オペレーションは、さらに、
前記共有ストレージに対してデータを書込むための第1データベースノードを前記データベースシステムが選択したことに応答して、
前記第1データベースノードが前記データベースシステムの前記カタログを変更するのを許可されていることを示す前記識別子を変更し、
前記データベースシステムによって維持されている前記識別子のインスタンスの保管を実行する、ステップ、
を含む、実施例15に記載のコンピュータ読取可能な記憶媒体。
19. 前記オペレーションは、さらに、
高可用性(HA)データベースクラスタを実装するために、HAアプリケーションを実行するステップ、を含み、
前記HAアプリケーションは、
前記第1データベースノードにおいて問題が発生したか否かを判断するために、前記第1データベースノードのハートビートをモニタリングし、かつ、
前記第1データベースノードにおいて問題が発生したとの判断に応答して、前記第1データベースノードがカタログの変更を許可されていないことを示すために前記識別子を変更し、かつ、前記第1領域に対する書込みオペレーションを防止するように前記共有ストレージに指示する、
ように動作可能である、実施例15に記載のコンピュータ読取可能な記憶媒体。
20. 前記オペレーションは、さらに、
共有ストレージに対してデータを書込むための第2リクエストを受信したことに応答して、
前記第1領域が前記第2リクエストに関連するデータを保管するための容量を有するか否かを判断し、かつ、
前記第1領域が前記容量を有しているとの判断に応答して、前記第1領域に対して前記第2リクエストのデータを書込み、前記第2リクエストは、クライアント装置から受信される、
ステップ、を含む、実施例15に記載のコンピュータ読取可能な記憶媒体。
***
【0046】
特定の実施形態が上述されてきたが、たとえ特定の機能に関して単一の実施形態だけが説明されている場合でも、これらの実施形態は、本開示の範囲を限定するように意図されたものではない。本開示において提供される機能の実施例は、特に指示の無い限り、限定的ではなく、むしろ例示的であるように意図されている。上記の説明は、本開示の利益を有している当業者にとって明らであろうように、代替、変更、および等価物をカバーすることが意図されている。
【0047】
本開示の範囲は、ここにおいて取り扱われる問題の一部または全部を軽減するか否かにかかわらず、ここにおいて(明示的または暗示的のいずれかで)開示された任意の特徴または特徴の組み合わせ、もしくは、その任意的な一般化を含んでいる。従って、この出願(または、その優先権を主張する出願)の審査の最中に、任意のそうした特徴の組み合わせに対して新たな請求項(claims)が作成され得る。特に、添付の請求項を参照すると、従属クレームの特徴は、独立クレームの特徴と組み合わされてよく、そして、それぞれの独立クレームの特徴は、単に添付の請求項において列挙された特定の組み合わせだけでなく、任意の適切な方法で組み合わされてよい。
図1
図2
図3
図4
図5
図6
図7