JP6091376B2 - クラスタシステムおよびSplit−BrainSyndrome検出方法 - Google Patents
クラスタシステムおよびSplit−BrainSyndrome検出方法 Download PDFInfo
- Publication number
- JP6091376B2 JP6091376B2 JP2013167405A JP2013167405A JP6091376B2 JP 6091376 B2 JP6091376 B2 JP 6091376B2 JP 2013167405 A JP2013167405 A JP 2013167405A JP 2013167405 A JP2013167405 A JP 2013167405A JP 6091376 B2 JP6091376 B2 JP 6091376B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- cluster
- proposal
- privileged
- nodes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Hardware Redundancy (AREA)
- Debugging And Monitoring (AREA)
Description
分散処理を行う際に、分散システム(以降、クラスタと称す)を構成するサーバ(以降、ノードと呼ぶ)間で協調動作を行う場合がある。例えば、高可用性の求められるシステムにおいては、あるノードに障害が発生した場合にも他のノードで処理を継続できるように複製データを他のノードで保持する(データ冗長化)といった協調動作を行う例が挙げられる。このような協調動作を実施するためには、クラスタを構成するノードの情報(IPアドレス等)をクラスタに参加している全てのノードで把握している必要が生じる。ノードの管理を行う一つの手法として、ノードとは独立に管理サーバを設ける方法が挙げられる。しかし、独立に管理サーバを設ける方法は、この管理サーバがシステム全体の単一障害点(SPOF:Single Point of Failure)となってしまうという問題点がある。
図9(a)に示すように、クラスタを構成するサーバ群であるノードA〜Eを相互接続して1台のサーバのように動作させるクラスタシステムにおいて、ノードA,BとノードC〜Eとを繋ぐ経路が、経路故障したとする。図9(a)では、ノードA,BとノードC〜Eとを繋ぐ経路に、経路故障したことを示す×印が付されている。また、クラスタのノードAに当該クラスタの特権ノードであることを示す王冠印が付されている。図9(a)の場合、経路故障によってクラスタを構成するノードA,BとノードC〜Eとに分断され、ノードA,BからはノードC〜Eが故障したように見え、またノードC〜EからはノードA,Bが故障したように見える。
また、請求項2に記載の発明は、複数のノードにより構成されるクラスタを備え、前記クラスタを構成する複数のノードの中からノードを管理する特権を持つ特権ノードを選出するクラスタシステムであって、前記ノードは、ノード識別子が記憶されるノード管理情報と死活を監視する対象のノードをリストアップした死活監視情報とを記憶する記憶部と、前記クラスタへのノードの追加や離脱が発生した際に、前記クラスタを構成するノード識別子を更新し、前記ノード管理情報に記憶するノード管理部と、前記死活監視情報に基づき、指定されたノードと死活監視信号をやり取りして、前記クラスタを構成するノードの障害を検出する死活監視部と、アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れることを保証する多数決プロトコルであるPaxosアルゴリズムを適用して、Master Leaseで用いるリース期間が途切れないようにリース期間更新間隔を設定して、自身の提案しか通らないように特権ノードである権利期間を確保し、かつ、Proposerが前記Paxosアルゴリズムの一連の流れが完結する前に連続して提案できる回数を2回以上とすることにより、自身が前記ノード管理情報を更新できる前記特権ノードであることを提案し合意を得るとともに、前記死活監視部からノード離脱情報を受信し、自身が特権ノードか否かを判定し、自身が特権ノードでない場合に、前記特権ノードのリース期間中が経過したときには、前記クラスタにおいて定められた特権ノード選出の所定の条件に基づき、自身が特権ノード候補であるとする、特権ノード選出部と、前記提案が2回以上Rejectされた場合、または自身の所属するクラスタの過半数から応答を集められなかった場合、Split-Brain Syndromeが発生したと判定するクラスタ離脱指示部と、を備えることを特徴とする。
また、請求項6に記載の発明は、複数のノードにより構成されるクラスタを備え、前記クラスタを構成する複数のノードの中からノードを管理する特権を持つ特権ノードを選出するクラスタシステムのSplit-Brain Syndrome検出方法であって、前記ノードは、ノード識別子が記憶されるノード管理情報と死活を監視する対象のノードをリストアップした死活監視情報とを記憶しており、前記クラスタへのノードの追加や離脱が発生した際に、前記クラスタを構成するノード識別子を更新し、前記ノード管理情報に記憶するステップと、前記死活監視情報に基づき、指定されたノードと死活監視信号をやり取りして、前記クラスタを構成するノードの障害を検出するステップと、アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れることを保証する多数決プロトコルであるPaxosアルゴリズムを適用して、Master Leaseで用いるリース期間が途切れないようにリース期間更新間隔を設定して、自身の提案しか通らないように特権ノードである権利期間を確保し、かつ、Proposerが前記Paxosアルゴリズムの一連の流れが完結する前に連続して提案できる回数を2回以上とすることにより、自身が前記ノード管理情報を更新できる前記特権ノードであることを提案し合意を得るとともに、ノード離脱情報を受信し、自身が特権ノードか否かを判定し、自身が特権ノードでない場合に、前記特権ノードのリース期間中が経過したときには、前記クラスタにおいて定められた特権ノード選出の所定の条件に基づき、自身が特権ノード候補であるとするステップと、前記提案が2回以上Rejectされた場合、または自身の所属するクラスタの過半数から応答を集められなかった場合、Split-Brain Syndromeが発生したと判定するステップと、を実行することを特徴とするクラスタシステムのSplit-Brain Syndrome検出方法とした。
このようにすることで、単一障害点(SPOF)を作らないためにクラスタを構成するノード管理をクラスタ内で実行する分散システムにおいて、経路障害等によりクラスタが複数クラスタに分断された場合に、Split-Brain Syndromeの発生を検出することができる。また、単一障害点となる外部のノード管理システムを利用せずにSplit-brain Syndromeを回避することができる。
さらに、リース期間経過後に特権ノード候補を選出することで、特権ノード候補を所定の条件に基づき選出することができる。
(本実施形態の概要)
本発明は、分散システムにおいて、特権ノードを選出するためにPaxosアルゴリズム(非特許文献1参照)を導入し、そのPaxosアルゴリズムに対し、Master Lease(非特許文献2参照)を適用し、さらに独自にパラメータ(特に提案回数、提案間隔)を設定する。これにより、経路障害等によりクラスタが複数クラスタに分断された場合であっても、自身がノード管理テーブルを更新できる特権ノードであることを提案し合意を得ることができる。つまり、Split-Brain Syndromeの発生を検出し解消することができる。
[分散システムの構成]
図1は、本実施形態に係るクラスタを含む分散システムの構成例を示す図である。
図1に示すように、分散システム100は、クラスタ10を構成する複数のノード1と、ネットワーク20と、各クライアント30とを含んで構成される。
ノード1は、クラスタ10を構成する、コンピュータ等の物理装置である。また、ノード1は、仮想マシン等の論理装置であってもよい。なお、図1では、ノード1は、物理サーバイメージで表している。ノード1は、クライアント30から送信されるメッセージを受信して処理を実行し、クライアント30に応答情報(サービス情報)を返信することによって、サービスを提供する機能を有する。
クライアント30からのメッセージは、ネットワーク20を介してクラスタ10を構成する何れかのノード1に送信される。各ノード1は、メッセージ処理を行い、クライアント30にサービスを提供する。
なお、クライアント30からノード1へ直接メッセージを送信せず、クライアント30とノード1の間にロードバランサ等を設置してメッセージをノード1に振り分けてもよい。このロードバランサ(不図示)は、クライアント30から送信されるメッセージを、単純なラウンドロビン法等により振り分ける機能を有する。
次に、ノード1の機能例について、図2を用いて説明する(適宜、図1参照)。
図2は、ノード1の機能例を示す図である。
図2に示すように、ノード1は、処理部11、記憶部12および通信部13を備える。
処理部11は、図示しないCPU(Central Processing Unit)およびメインメモリで構成され、記憶部12に記憶されているプログラムをメインメモリに展開して、ノード管理部111、メッセージ処理部112、死活監視部113、特権ノード選出部114、およびクラスタ離脱指示部115を機能として実現する。
記憶部12は、メモリやハードディスク等で構成され、ノード管理テーブル(ノード管理情報)121、死活監視テーブル(死活監視情報)122およびデータ記憶部123を有する。データ記憶部123は、ノード1が管理するデータ等、およびPaxosアルゴリズムの提案番号b,提案内容Vを記憶する。
通信部13は、メッセージや応答情報を送受信するための通信インタフェースである。
ノード管理部111は、クラスタ10へのノード1の追加や離脱が発生した際に、クラスタ10を構成するノード1の情報を更新し、ノード管理テーブル121として管理する。ここで、「ノードの情報の更新」とは、自身が特権ノードの場合には、死活監視部113から通知されるノード1の障害情報(後述)や追加ノード1からのノード参加情報等に基づき、ノード管理テーブル121(図3参照)を更新し、その情報を残りの全ノード1に配信することを指す。また、自身が特権ノード以外のノード1の場合には、特権ノードから配信されるノード1の更新情報をノード管理テーブル121に反映することを指す。
ノード情報には、各ノード1の少なくともクラスタ10を構成するノード1を一意に識別するもの(例えば、クラスタ10を構成するノード1が同一サブネット内であればIP(Internet Protocol)アドレス)と必要に応じて付属情報(例えば、クラスタ参加時刻等)が含まれる。
次に、ノード管理テーブル121の一例について、図3を用いて説明する(適宜、図2参照)。
図3は、ノード管理テーブル121の一例を示す図である。
ノード管理テーブル121は、記憶部12に記憶され、IPアドレス(ノード識別子)131および必要に応じて付属情報としてクラスタ参加時刻132を関連付けて記憶している。
IPアドレス131は、ノード1を識別するように付与されるものであって、例えばコンシステントハッシュ(Consistent Hashing)法の管理(振り分け)手法で用いるID空間のIDまたは仮想IDと一意に対応しているものであってもよい。
クラスタ参加時刻132は、ノード1のクラスタ参加時刻を記憶する。
図2に戻って、メッセージ処理部112は、受信したメッセージの処理を実行し処理結果をクライアントに返すことにより、サービスを提供する。この時、上述の例で示したように他のノード1に複製データを配置するようなシステムでは、ノード管理テーブル121を参照して事前に設定された規則(例えば、ノード管理テーブル121の自身の下の行のノード)に基づき複製先を特定し、データの複製を配置するような協調動作を行うこともある。
死活監視部113は、死活監視テーブル122を参照して、指定されたノード(例えば、自身の次の行のノード)と常に死活監視信号のやり取りを行い、クラスタ10を構成するノード1の障害を検出する。ノード1の障害を検出した場合、死活監視部113は、自身が特権ノードの場合はノード管理部111に、自身が特権ノード以外の場合には特権ノードに通知を行う。死活監視部113は、クラスタ10を構成するノード1の追加や離脱があった場合、ノード管理テーブル121の更新に同期して死活監視テーブル122を更新する。
特権ノード選出部114は、アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れることを保証する多数決プロトコルであるPaxosアルゴリズムを適用して、Master Leaseで用いるリース期間Tが途切れないようにリース期間更新間隔を設定して、自身の提案しか通らないように特権ノードである権利期間を確保して特権ノードを選出する。また、特権ノード選出部114は、PaxosアルゴリズムにおけるProposerがPaxosアルゴリズムの一連の流れが完結する前に連続して提案できる回数を2回以上とする。
次に、死活監視テーブル122の設定例について、図4を用いて説明する。
図4は、死活監視テーブル122の設定例を示す図である。
死活監視テーブル122は、1台の物理装置を単位として作成され、監視対象のノードをリストアップしたものである。死活監視テーブル122は、監視対象のノードのIPアドレスを記憶している。
死活監視テーブル122は、論理装置単位でノードが構成されるパターンを考慮して、物理メンバ単位に少なくとも1回選択されるようにする。すなわち、物理メンバ単位に少なくとも1回は選択されることで、死活監視がされていないメンバ(ノード)は存在しないようにしている。
クラスタ離脱指示部115は、2回連続で提案がRejectされた場合、または過半数から応答を集められなかった場合、Split-Brain Syndromeが発生したと判定する。
クラスタ離脱指示部115は、2回連続で自身が特権ノードである旨の提案がRejectされた場合、または過半数から応答を集められなかった場合、自身の所属するクラスタ10の全ノードに対し、クラスタ10からの離脱指示を行い、クラスタ10からの離脱指示を受け取ったノードは当該クラスタ10から離脱することで、Split-Brain Syndromeを解消させる。なお、上記において、分断した他方のクラスタには指示が届かないため、あくまでも分断した一クラスタに対する離脱指示である。
また、クラスタ離脱指示部115は、Split-Brain Syndromeの発生を検出した場合、Split-brain Syndrome発生したことを示す警報情報をアラームとして出力するものでもよい。この警報情報により、Split-Brain Syndromeの発生を管理者に気付かせることができる。
特権ノードは、所定の規則に則り、一意に決定される。具体的には、特権ノードは、ノード管理テーブル121または死活監視テーブル122内の一番上の行のノードから順に、若しくはクラスタ参加時刻が最も古いノードから順にといった規則に従い、一意に決定される。同様に、次に特権ノードとなるノード候補についても、上記所定の規則に則り、一意に決定される。
(原理説明)
本発明の特徴については、以下の通りである。
本発明は、クラスタシステムにおいて、Split-Brain Syndrome(ノードの障害等によりシステムが分断され、クラスタが複数に分断したまま、双方が動作し続ける状況)を検出する方法を提供する。
本Paxosアルゴリズムを実行するため、本実施形態では、ノード1のデータ記憶部123(図2参照)に、Paxosアルゴリズムの提案番号b,提案内容Vを記憶している。
特権ノード選出の動作は、ノードが離脱したことの察知、すなわち、あるノードがノード離脱情報を受信することから開始する。ノード離脱情報を受信するのは、すべてのノードではなく、特権ノードまたは特権ノードが離脱した場合には、次に特権ノードとなるノード候補である。
特権ノードのノード離脱を検出したノードまたはあるノードの離脱を検出し特権ノードにノード離脱情報を送付したが失敗したノードは、次に特権ノードとなるノード候補にノード離脱情報を送付する。この場合、数回のリトライ等、ある規則に従い送付先を変更することができる。
次に、Split-Brain Syndromeを検出し解消する機能について述べる。まず、Split-brain Syndromeの発生について述べ、次いで一般的なPaxosアルゴリズムおよびMaster Leaseについて説明し、最後に本方式について説明する。
前記図9に示すように、経路障害等で1つのクラスタが複数のクラスタに分断されると、各クラスタ内で他方のクラスタのノードからの死活監視信号の応答がなくなる。そして、特権ノードの存在しない(特権ノードと分断された)クラスタでは新たな特権ノードが選出され、双方のクラスタで特権ノードがノード管理テーブル121の更新を行うことでSplit-Brain Syndrineとなる場合が考えられる。
一般的に、Paxosアルゴリズム(非特許文献1参照)とは、分散環境において、信頼性の低いプロセスの集合(本実施形態における複数ノードの集合で構成されるクラスタ)が1つの値に関する合意をとるためのアルゴリズムである。Paxosアルゴリズムは、同時に半数までの障害発生の場合であれば、分散システムを構成するノード数が変動する、また各ノードの処理時間が保証できない場合でも、分散システム内で必ず1つの提案で合意が取れるまたは何も合意されない、ということを保証することが可能である。
ただし、Paxosアルゴリズムは、アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れるまたは何も合意されない、ということを保証するものであり、提案が連続して合意に至るケースもある。
そのような問題を補うために、本方式では、Master Lease(後記)をあわせて利用する。またPaxosアルゴリズムとMaster Leaseに関する独自のパラメータの設定を行う。
Master Lease(非特許文献2参照)は、所定のリース期間Tを設定するものである。ここではMaster Leaseは、特権ノードである権利(本実施形態では、ノード管理テーブル121を更新する権利、またPaxosにおける提案を行う権利)を一定期間確保する。
本方式は、Paxosアルゴリズムを適用する場合において、第一フェーズのリクエストを行う権利があるかどうかを判断する方法として、MasterLeaseのリース期間中かどうかを利用し、さらに独自にパラメータ(特に提案回数、提案間隔)を設定することにより、同時に1台のノードしか特権ノードを提案させないようにする。
本実施形態について、より詳細に説明する。本方式によれば、分散システム100(図1参照)において、経路障害等に起因して発生するSplit-brain Syndromeの発生の可能性を検出することができる。なお、以下の一連の処理は、死活監視部113(図2参照。以下同様)に連動する特権ノード選出部114、およびクラスタ離脱指示部115により実現される。
第一フェーズ(Prepare phase)は、提案内容を提案できる提案者を選定する。
第一フェーズ(Prepare phase)では、Paxosアルゴリズム(非特許文献1参照)に準拠するように、特権ノードあるいは特権ノード候補のノード(以降、Proposer(提案者:提案ノード)と呼ぶ)は、ノード1(後記図5参照)の離脱を通知された場合、残りのノード1(以降、Acceptor(受理ノード)と呼ぶ)に対して、提案番号付きのPrepareリクエストを送信する。上記残りのノードとは、ノード管理テーブル121に存在する全ノードであり、仮にあるノード1の離脱通知を受けたことによるノード管理テーブル121の更新の場合でもそのノード1を含むものである。
なお、一連の流れが完結していない場合とは、提案を受けている途中、すなわち以下に説明する第三フェーズ(Commit phase)に移行していない状態をいう。
Proposerが、過半数のノードからPromise応答を受信した場合、第二フェーズ(Vote phase)に移行する(後記図5のステップS3参照)。
なお、一般的に、Paxosアルゴリズムでは、新たなPaxosアルゴリズムの実行にあたり、提案しようとするノードが前回完結したPaxosアルゴリズムのProposerであった場合には、第一フェーズを省略し、後記する第二および第三フェーズのみを実行することが認められている。
第二フェーズ(Vote phase)は、提案者が提案内容を提案するフェーズである。
第二フェーズ(Vote phase)では、Paxosアルゴリズム(非特許文献1参照)に準拠するように、Proposerは、過半数のAcceptorからPromise応答を受信した時点でAcceptリクエストをAcceptorに送信する。Acceptリクエストには、提案番号bと提案内容Vが含まれ、提案番号bは第一フェーズで利用した提案番号bを採用する。つまり、第二フェーズにおける提案番号bは、自身が第一フェーズ(Prepare phase)で提案してPromise応答を受けた提案番号である。他のAcceptorから見れば、その約束した提案番号bから提案が来たので第二フェーズでAcceptリクエストを受けることになる。提案内容Vは、第一フェーズのPromise応答内で提案番号bと提案内容Vを受理していた場合には、その中から最も大きな提案番号bを持つ提案を、受理していない場合は任意の内容を採用する。ここでは、提案内容Vとは、あるノードが特権ノードとして、ノードの離脱に伴うノード管理テーブル121の更新を行うという提案である。
ここで、Proposerが、過半数のノードからACKを受信した場合、第三フェーズ(Commit phase)に移行する(後記図5のステップS7参照)。
第三フェーズ(Commit phase)は、更新情報(Commit)を通知する。
第三フェーズ(Commit phase)では、Learnerは、過半数のAcceptorからACKを受信した時点で提案が合意に至ったことを認識する。すなわち、この段階で特権ノードとしてのノード管理テーブル121を更新する権利を得ることとなる。そして、ノード管理テーブル121を更新して離脱したノードを除くAcceptorに対し、更新したノード管理テーブル121または更新したノードの情報を配信する。ノード管理テーブル121をそのまま送信すると配信負荷が大きくなるため、ノード管理テーブル121の送信に代えて、更新したノードの情報(差分情報)を配信するようにしてもよい。
Acceptorは、ノード管理テーブル121の更新情報を受信した場合、ACKを返す。
以上で述べた特権ノード選出の流れについて、図5を参照して説明する。
図5は、本実施形態に係るクラスタシステムの特権ノード選出の流れを説明するシーケンス図である。
まず、特権ノードあるいは特権ノード候補のノード1(「Proposer」)は、ノードの離脱を通知された場合、ノード管理テーブル121(図2参照)に存在する全ノード1(「Acceptor」)に対して、提案番号付きのPrepareリクエストを送信する(ステップS1)。
以上は第一フェーズ(Prepare phase)における処理である。
Proposerは、過半数のAcceptorからPromise応答を受信した時点でAcceptリクエストをAcceptorに送信する(ステップS4)。Acceptリクエストには、提案番号bと提案内容Vが含まれ、提案番号bは第一フェーズで利用した番号を採用する(Paxosアルゴリズム(非特許文献1参照)に準拠)。なお、提案内容Vは、第一フェーズのPromise応答内で提案番号bと提案内容Vを受理していた場合には、その中から最も大きな提案番号bを持つ提案を、受理していない場合は任意の内容を採用する。
ここではProposerは、Learnerとして既に動作中である(ステップS6)。
Proposer(ここではLearner)は、過半数のノードからACKが返っていることを確認する(ステップS7)。
なお、Proposer(Learner)は、一定時間待って過半数からのACKを集めることができないかつRejectもされない場合、Proposerとして再度Prepareから開始する。Reject応答を1つでも受け取った場合もProposerとして再度提案を行う。
Acceptorは、ノード管理テーブル121の更新情報を受信した場合、ACKを返す(図示省略)。
次に、設定ミスやソフトウェアバグ等による論理的な分断により、一部のノードが双方のクラスタに属するように分断した論理的な分断の発生例について説明する。
図6は、論理的な分断の発生例を説明する図である。
図6に示すように、設定ミスやソフトウェアバグ等による論理的な分断により、クラスタ10Aを構成するノード1a〜1fと、クラスタ10Bを構成するノード1e〜1jとにシステムが分断された場合を例に採る。ノード1e,1fは、両方のクラスタ10A,10Bに論理的に属している。このような論理的な分断が発生すると、クラスタが複数に分断したまま、双方が動作し続ける状況が発生する。図6では、クラスタ10Aのノード1aが既存の特権ノードを、またクラスタ10Bのノード1jが新しい特権ノードであることを示し、それぞれ王冠印が付されている。
Master Leaseは、特権ノードである権利(本実施形態では、ノード管理テーブル121を更新する権利、またPaxosにおける提案を行う権利)を一定期間確保し、その時間を更新する仕組みである。特権ノードは、一定期間(以降、リース期間Tと呼ぶ)自身が特権ノードとしての権利を持つことを他ノードに対して提案する。特権ノードは、リース期間Tが途切れることがないように、一定間隔で他ノードに対してリース期間Tの更新リクエストを投げる。特権ノードは、リース期間Tの更新リクエストを投げる前にリース期間Tのカウントを開始する。また、残りのノードは、それぞれリース期間Tの更新リクエストを受理してACKを返す前にリース期間Tのカウントを開始する。残りのノード(PaxosアルゴリズムのAcceptor)は、リース期間Tのカウント中には自身がProposerとして新たな提案を行わないこと、および他のProposerからの提案をRejectすることを保障する。換言すれば、他のProposerからの提案を通ることがなくすためにリース期間Tが重なり合うように更新するものである。
なお、ノード離脱処理を実施する際には、リース期間Tの更新とは別にPaxosアルゴリズムによる合意を得てから処理を実施する必要がある。
次に、リース期間Tを獲得するまでの流れについて、図7を参照して説明する。
図7は、本実施形態に係るクラスタシステムのリース期間Tを獲得するまでの流れを示すシーケンス図である。
まず、Proposerは、図7の☆印に示すようにリース期間Tの計時を開始し(ステップS11)、図7の太実線に示すようにリース期間Tを計時する(ステップS12)。なお、図7の☆印は、各ノード1でリース期間Tの計時し始めたことを表している。また、符号eは、各ノード1で計時されたリース期間Tの終了を表している。ここで、Proposerとしては、自身が提案した時点でリース期間Tの計時を開始しておく。Proposerは、各Acceptorよりも早くリース期間Tの計時を開始することで、自身のリース期間Tが最も早く終了することになる(図7のProposerの符号e参照)。また、Proposerは、ノード管理テーブル121(図2参照)に存在する全ノード1(「Acceptor」)に対して、リースの更新を通知する(ステップS13)。
Master Leaseを利用することにより、図6のケースでは、新しい特権ノード候補(図6のクラスタ10Bのノード1j参照)は、既存特権ノード(図6のクラスタ10Aのノード1a参照)のリース期間Tがタイムアウトするまで特権ノードとしてノード管理テーブル121の更新処理を実行することを提案することができない。その間にも既存特権ノード(図6のクラスタ10Aのノード1a参照)は、双方のクラスタ10A,10Bに組み込まれている2台のノードに対してリース期間Tの更新を続けるため、新しい特権ノード候補(図6のクラスタ10Bのノード1j参照)がリース期間Tのタイムアウト後に提案を実行しても受理することはない。すなわち、新しい特権ノード候補(図6のクラスタ10Bのノード1j参照)は、2回提案を実施した後に自身が所属するクラスタを構成するノードの離脱処理を行うこととなり、2つのクラスタ10A,10Bでノード管理テーブル121更新処理が並行で実行されることを防ぐことが可能である。なお、2つのクラスタ10A,10Bに跨がって存在する2台のノード1e,1fは離脱をしないようにガードする。このガードは、例えば下記の動作である。図6のクラスタ10Aでは、ノード管理テーブル121の更新が実行されている(すなわちノード1e,1fのリストに載っていない)ものとする。この場合、リストに載っていないノード(すなわちノード1g,1h,1i,1j)からの要求を拒否することでガードを行う。
以下、PaxosアルゴリズムおよびMaster Leaseで使用する各パラメータの設定指針について述べる。
リース期間Tが短いと更新処理が多くなるため望ましくない。しかし、リース期間Tが長くても特権ノードの故障時に新しい特権ノードを選出するまでの期間が長くなる。よって、死活監視による障害検出時間とシステムのサービス条件(例えば、所定プロトコルによる信号の再送期間等)を考慮して適切な値を設定する必要がある。
リース期間更新間隔は、リース期間Tの更新を繰り返し行う際の、その繰り返し間隔である。換言すれば、リース期間更新間隔は、リース期間Tの計時を開始する起点となる信号を各ノードに対して送信する間隔である。リース期間更新間隔は、過半数のノードからリース期間Tの更新リクエストに対するACKが返ってくる時間の期待値とリース期間Tを基に設定する。例えば、リース期間更新間隔は、上記期待値に所定の係数を乗じた数値を、リース期間Tから減算することによって設定する。すなわち、自身のリース期間Tが終わるまでに確実に、過半数のノードからリース期間Tの更新リクエストに対するACKが返ってくるようにリース期間更新間隔を設定する。
最大提案回数は、2回以上(最適には2回)とする。提案回数を、2回以上とする理由について説明する。各ノードのリース期間Tのカウント開始タイミングはわからないため、提案回数を1回とした場合、特権ノード故障時に新しい特権ノード候補がリース期間Tのタイムアウトを待って提案したにも関わらず、他のメンバではリース期間Tが完了しておらず提案が受理されない可能性がある。したがって、最大提案回数は2回以上にしなければならない。次に、最大提案回数は2回が最適である理由について説明する。
前提として、提案回数が、2回以上であれば、Paxosアルゴリズム(非特許文献1参照)としては一連の処理として実行することができることが挙げられる。その上で、本発明者らは、最大提案回数2回が最適であることを見出した。
提案間隔△dは、一度提案が受理されなかった場合に次の提案をするまでの時間を指す。2回連続で提案が失敗する可能性を排除するためには、△d=Tとする。
なお、上記リース期間、リース期間更新間隔、最大提案回数、および提案間隔の各値は、システム上一意の値として、システム初期化時に各ノードの特権ノード選出部114に設定される。
提案番号bは、b mod N=kを満たす値とし、提案する度に大きな値を選択していく。なお、kはノード管理テーブル121の行数−1の値とする。また、Nはクラスタを構成するノード数である。新しく特権ノード候補となったノードは、既存の特権ノードがノード管理テーブル121の更新のために使用した提案番号bより大きく、b mod N=kを満たす数値の中から最少のものを選択して提案を開始する。
なお、提案番号bは、提案する側ノード、提案される側ノード各々のデータ記憶部123(図2参照)に記憶されている。
次に、特権ノードまたは特権ノード候補がノード離脱情報を受信してからノード管理テーブル121更新、またはクラスタからの離脱までの流れを、図8を参照して説明する。
まず、ステップS31において、特権ノード選出部114(図2参照)は、死活監視部113(図2参照)からノード離脱情報を受信する。
ステップS32において、特権ノード選出部114は、自身が特権ノードか否かを判定する。自身が特権ノードの場合には(ステップS32→Yes)、ステップS35に進む。
ステップS36において、特権ノード選出部114は、提案番号付きのPrepareリクエストを行う。
上記ステップS36までが第一フェーズ(Prepare phase)(図5参照)に対応している。
所定時間経過した場合(タイムアウトの場合)には(ステップS37の(2))、ステップS45に進み、過半数ノードのPromise応答を受信した場合には(ステップS37の(1))、ステップS38に進む。
ステップS38において、特権ノード選出部114は、Rejectを受信したか否かを判定する。Rejectを受信した場合は(ステップS38→Yes)、ステップS45に進み、Rejectを受信していない場合は(ステップS38→No)、ステップS39に進む。
ステップS39において、特権ノード選出部114は、AcceptリクエストをAcceptorに送信する。
上記ステップS37ないしステップS39までが第二フェーズ(Vote phase)(図5参照)に対応し、ステップS40以降の処理が第三フェーズ(Commit phase)(図5参照)に対応している。
所定時間経過した場合には(ステップS40の(2))、ステップS46に進み、過半数ノードのACK応答を受信した場合には(ステップS40の(1))、ステップS41に進む。
ステップS41において、特権ノード選出部114は、Rejectを受信したか否かを判定する。Rejectを受信した場合は(ステップS41→Yes)、ステップS46に進み、Rejectを受信していない場合は(ステップS41→No)、ステップS42に進む。
ステップS42において、特権ノード選出部114は、ノード情報テーブル情報の更新を行う。
ステップS43において、特権ノード選出部114は、他ノードへの更新情報の配信を行う。そして、ステップS44で特権ノード選出部114は、配信完了通知を受信して本フローを終了する。
ステップS45において、特権ノード選出部114は、提案回数が2回以上(提案回数≧2回)か否かを判定する。提案回数が2回以上の場合は(ステップS45→Yes)、ステップS47に進み、提案回数が2回未満の場合は(ステップS45→No)、ステップS49に進む。
また、上記ステップS40で所定時間経過した場合(ステップS40の(2))、または上記ステップS41でReject受信した場合は(ステップS41→Yes)、ステップS46に進む。
そして、ステップS48において、クラスタ離脱指示部115は、自身もクラスタを離脱して本フローを終了する。また、ステップS48において、クラスタ離脱指示部115は、Split-Brain Syndromeの発生の警報情報を出力し、管理者に気付かせるようにしてもよい。
また、単一障害点となる外部のノード管理システムを利用せずにSplit-brain Syndromeを回避することができる。
10,10A,10B クラスタ
11 処理部
12 記憶部
13 通信部
20 ネットワーク
30 クライアント
100 分散システム
111 ノード管理部
112 メッセージ処理部
113 死活監視部
114 特権ノード選出部
115 クラスタ離脱指示部
121 ノード管理テーブル(ノード管理情報)
122 死活監視テーブル(死活監視情報)
123 データ記憶部
T リース期間
b 提案番号
V 提案内容
Claims (6)
- 複数のノードにより構成されるクラスタを備え、前記クラスタを構成する複数のノードの中からノードを管理する特権を持つ特権ノードを選出するクラスタシステムであって、
前記ノードは、
ノード識別子が記憶されるノード管理情報と死活を監視する対象のノードをリストアップした死活監視情報とを記憶する記憶部と、
前記クラスタへのノードの追加や離脱が発生した際に、前記クラスタを構成するノード識別子を更新し、前記ノード管理情報に記憶するノード管理部と、
前記死活監視情報に基づき、指定されたノードと死活監視信号をやり取りして、前記クラスタを構成するノードの障害を検出する死活監視部と、
アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れることを保証する多数決プロトコルであるPaxosアルゴリズムを適用して、
Master Leaseで用いるリース期間が途切れないようにリース期間更新間隔を設定して、自身の提案しか通らないように特権ノードである権利期間を確保し、かつ、
Proposerが前記Paxosアルゴリズムの一連の流れが完結する前に連続して提案できる回数を2回以上とすることにより、自身が前記ノード管理情報を更新できる前記特権ノードであることを提案し合意を得るとともに、
一度提案が受理されなかった場合に次の提案をするまでの時間である提案間隔を前記リース期間とする、特権ノード選出部と、
前記提案が2回以上Rejectされた場合、または自身の所属するクラスタの過半数から応答を集められなかった場合、Split-Brain Syndromeが発生したと判定するクラスタ離脱指示部と、
を備えることを特徴とするクラスタシステム。 - 複数のノードにより構成されるクラスタを備え、前記クラスタを構成する複数のノードの中からノードを管理する特権を持つ特権ノードを選出するクラスタシステムであって、
前記ノードは、
ノード識別子が記憶されるノード管理情報と死活を監視する対象のノードをリストアップした死活監視情報とを記憶する記憶部と、
前記クラスタへのノードの追加や離脱が発生した際に、前記クラスタを構成するノード識別子を更新し、前記ノード管理情報に記憶するノード管理部と、
前記死活監視情報に基づき、指定されたノードと死活監視信号をやり取りして、前記クラスタを構成するノードの障害を検出する死活監視部と、
アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れることを保証する多数決プロトコルであるPaxosアルゴリズムを適用して、
Master Leaseで用いるリース期間が途切れないようにリース期間更新間隔を設定して、自身の提案しか通らないように特権ノードである権利期間を確保し、かつ、
Proposerが前記Paxosアルゴリズムの一連の流れが完結する前に連続して提案できる回数を2回以上とすることにより、自身が前記ノード管理情報を更新できる前記特権ノードであることを提案し合意を得るとともに、
前記死活監視部からノード離脱情報を受信し、
自身が特権ノードか否かを判定し、自身が特権ノードでない場合に、前記特権ノードのリース期間中が経過したときには、前記クラスタにおいて定められた特権ノード選出の所定の条件に基づき、自身が特権ノード候補であるとする、特権ノード選出部と、
前記提案が2回以上Rejectされた場合、または自身の所属するクラスタの過半数から応答を集められなかった場合、Split-Brain Syndromeが発生したと判定するクラスタ離脱指示部と、
を備えることを特徴とするクラスタシステム。 - 前記クラスタ離脱指示部は、前記提案が2回以上Rejectされた場合、または自身の所属するクラスタの過半数から応答を集められなかった場合、自身の所属するクラスタの各ノードに対し、前記クラスタからの離脱指示を行い、前記クラスタからの離脱指示を受け取ったノードは当該クラスタから離脱することで、Split-Brain Syndromeを解消させることを特徴とする請求項2に記載のクラスタシステム。
- 前記特権ノード選出部は、
前記特権ノードであることを提案し合意を得る処理において、前記提案の回数をカウントしており、
前記提案の提案者を選定するためのPrepareリクエストを、前記特権ノード以外の自身の所属するクラスタのノードを示すAcceptorそれぞれに送信し、過半数の前記AcceptorからPromise応答を受信し、かつ、Rejectを受信していない場合、前記提案の提案内容に合意を得るためのAcceptリクエストを前記Acceptorそれぞれに送信し、
過半数の前記AcceptorからACK応答を受信し、かつ、Rejectを受信していない場合、前記Paxosアルゴリズムの一連の流れが完結したと判定し、前記ノード管理情報の更新を行うとともに、前記Acceptorそれぞれへの更新情報の配信を行う、一方、
前記Prepareリクエストの送信後、所定時間経過またはRejectを受信した場合、若しくは、前記Acceptリクエストの送信後、所定時間経過またはRejectを受信した場合において、前記提案の回数が1回のときは、前記Paxosアルゴリズムの一連の流れが完結していないと判定して所定提案間隔待機し、前記Prepareリクエストから再度処理を実行し、
前記Prepareリクエストの送信後、前記所定時間経過またはRejectを受信した場合、若しくは、前記Acceptリクエストの送信後、前記所定時間経過またはRejectを受信した場合において、前記提案の回数が2回以上のときは、前記Paxosアルゴリズムの一連の流れが完結したと判定し、
前記クラスタ離脱指示部は、
前記特権ノード選出部が、前記所定時間経過またはRejectを受信した場合に、前記提案の回数が2回以上であるとしたときに、前記Split-Brain Syndromeが発生したと判定すること
を特徴とする請求項2または請求項3に記載のクラスタシステム。 - 複数のノードにより構成されるクラスタを備え、前記クラスタを構成する複数のノードの中からノードを管理する特権を持つ特権ノードを選出するクラスタシステムのSplit-Brain Syndrome検出方法であって、
前記ノードは、
ノード識別子が記憶されるノード管理情報と死活を監視する対象のノードをリストアップした死活監視情報とを記憶しており、
前記クラスタへのノードの追加や離脱が発生した際に、前記クラスタを構成するノード識別子を更新し、前記ノード管理情報に記憶するステップと、
前記死活監視情報に基づき、指定されたノードと死活監視信号をやり取りして、前記クラスタを構成するノードの障害を検出するステップと、
アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れることを保証する多数決プロトコルであるPaxosアルゴリズムを適用して、
Master Leaseで用いるリース期間が途切れないようにリース期間更新間隔を設定して、自身の提案しか通らないように特権ノードである権利期間を確保し、かつ、
Proposerが前記Paxosアルゴリズムの一連の流れが完結する前に連続して提案できる回数を2回以上とすることにより、自身が前記ノード管理情報を更新できる前記特権ノードであることを提案し合意を得るとともに、
一度提案が受理されなかった場合に次の提案をするまでの時間である提案間隔を前記リース期間とするステップと、
前記提案が2回以上Rejectされた場合、または自身の所属するクラスタの過半数から応答を集められなかった場合、Split-Brain Syndromeが発生したと判定するステップと、
を実行することを特徴とするクラスタシステムのSplit-Brain Syndrome検出方法。 - 複数のノードにより構成されるクラスタを備え、前記クラスタを構成する複数のノードの中からノードを管理する特権を持つ特権ノードを選出するクラスタシステムのSplit-Brain Syndrome検出方法であって、
前記ノードは、
ノード識別子が記憶されるノード管理情報と死活を監視する対象のノードをリストアップした死活監視情報とを記憶しており、
前記クラスタへのノードの追加や離脱が発生した際に、前記クラスタを構成するノード識別子を更新し、前記ノード管理情報に記憶するステップと、
前記死活監視情報に基づき、指定されたノードと死活監視信号をやり取りして、前記クラスタを構成するノードの障害を検出するステップと、
アルゴリズムが完結するまでの一連の流れでのみ1つの提案で合意が取れることを保証する多数決プロトコルであるPaxosアルゴリズムを適用して、
Master Leaseで用いるリース期間が途切れないようにリース期間更新間隔を設定して、自身の提案しか通らないように特権ノードである権利期間を確保し、かつ、
Proposerが前記Paxosアルゴリズムの一連の流れが完結する前に連続して提案できる回数を2回以上とすることにより、自身が前記ノード管理情報を更新できる前記特権ノードであることを提案し合意を得るとともに、
ノード離脱情報を受信し、
自身が特権ノードか否かを判定し、自身が特権ノードでない場合に、前記特権ノードのリース期間中が経過したときには、前記クラスタにおいて定められた特権ノード選出の所定の条件に基づき、自身が特権ノード候補であるとするステップと、
前記提案が2回以上Rejectされた場合、または自身の所属するクラスタの過半数から応答を集められなかった場合、Split-Brain Syndromeが発生したと判定するステップと、
を実行することを特徴とするクラスタシステムのSplit-Brain Syndrome検出方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013167405A JP6091376B2 (ja) | 2013-08-12 | 2013-08-12 | クラスタシステムおよびSplit−BrainSyndrome検出方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013167405A JP6091376B2 (ja) | 2013-08-12 | 2013-08-12 | クラスタシステムおよびSplit−BrainSyndrome検出方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015036834A JP2015036834A (ja) | 2015-02-23 |
JP6091376B2 true JP6091376B2 (ja) | 2017-03-08 |
Family
ID=52687320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013167405A Active JP6091376B2 (ja) | 2013-08-12 | 2013-08-12 | クラスタシステムおよびSplit−BrainSyndrome検出方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6091376B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106155780B (zh) | 2015-04-02 | 2020-01-31 | 阿里巴巴集团控股有限公司 | 一种基于时间的节点选举方法及装置 |
WO2016181462A1 (ja) * | 2015-05-11 | 2016-11-17 | 株式会社日立製作所 | 情報処理システムおよびクラスタ管理方法 |
US9858011B2 (en) | 2015-12-16 | 2018-01-02 | International Business Machines Corporation | Repopulating failed replicas through modified consensus recovery |
CN109240840B (zh) * | 2017-07-11 | 2022-04-19 | 阿里巴巴集团控股有限公司 | 集群系统的容灾方法、装置和机器可读介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5016696B2 (ja) * | 2010-03-05 | 2012-09-05 | 日本電信電話株式会社 | 高可用性システム、サーバ、高可用性維持方法及びプログラム |
US8595546B2 (en) * | 2011-10-28 | 2013-11-26 | Zettaset, Inc. | Split brain resistant failover in high availability clusters |
-
2013
- 2013-08-12 JP JP2013167405A patent/JP6091376B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2015036834A (ja) | 2015-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11894972B2 (en) | System and method for data replication using a single master failover protocol | |
US11899684B2 (en) | System and method for maintaining a master replica for reads and writes in a data store | |
US9201742B2 (en) | Method and system of self-managing nodes of a distributed database cluster with a consensus algorithm | |
US10944637B2 (en) | System and/or method for maintaining highly-available, consistent, partition-tolerant clusters using client voters | |
Botelho et al. | On the design of practical fault-tolerant SDN controllers | |
US8055735B2 (en) | Method and system for forming a cluster of networked nodes | |
US9984140B1 (en) | Lease based leader election system | |
JP6382454B2 (ja) | 分散ストレージ及びレプリケーションシステム、並びに方法 | |
US8719225B1 (en) | System and method for log conflict detection and resolution in a data store | |
EP1617331B1 (en) | Efficient changing of replica sets in distributed fault-tolerant computing system | |
CN113646749B (zh) | Iot分区管理和负载平衡 | |
JP2005209201A (ja) | 高可用性クラスタにおけるノード管理 | |
JPWO2006095427A1 (ja) | サーバシステム、サーバ装置およびその方法 | |
JP6091376B2 (ja) | クラスタシステムおよびSplit−BrainSyndrome検出方法 | |
CN106302569B (zh) | 处理虚拟机集群的方法和计算机系统 | |
CN107153660A (zh) | 分布式数据库系统的故障检测处理方法及其系统 | |
CN109189854B (zh) | 提供持续业务的方法及节点设备 | |
US10305987B2 (en) | Method to syncrhonize VSAN node status in VSAN cluster | |
JP2009217504A (ja) | 計算機システム、計算機制御方法及び計算機制御プログラム | |
Stanik et al. | Failover pattern with a self-healing mechanism for high availability cloud solutions | |
JP5480046B2 (ja) | 分散トランザクション処理システム、装置、方法およびプログラム | |
JP4167238B2 (ja) | サーバシステム、サーバ装置およびその方法 | |
CN110266795A (zh) | 一种基于Openstack平台控制方法 | |
JP6093320B2 (ja) | 分散処理システム | |
Ma et al. | A pipelined Single-Phase Paxos Extension without lease |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20150317 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20150515 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20151208 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170207 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6091376 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |