説明

クラスタシステム、クラスタメンバ、故障復旧方法及びプログラム

分散処理制御部(17)は、自クラスタメンバ(1−i)が担当する主処理範囲,副処理範囲を決定する。フィルタ(12)は、クラスタシステムに対してマルチキャストされたパケットの内、主処理範囲,副処理範囲にマッチするパケットをセッション処理部(13)に渡す。セッション処理部(13)は、セッション処理(保持部(14)に格納されているセッション情報の更新処理を含む)を行う。その後、パケットが主処理範囲にマッチするものであればパケット転送部(15)に渡し、副処理範囲にマッチするものであれば破棄する。故障復旧部(20)は、自クラスタメンバ(1−i)が副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、副処理範囲を主処理範囲に変更する。

【発明の詳細な説明】
【技術分野】
本発明は、IPパケットを転送するルータとして機能するクラスタシステムに関し、特に、クラスタメンバ間でセッション情報を交換し合わなくとも、故障復旧処理を行うことができるクラスタシステムに関する。
【背景技術】
IP網に設置されるルータには、IP層の上位層の情報を参照して処理を行う装置がある。たとえば、不正アクセス遮断等に用いられるファイアウォール装置や、IPsecトンネルを終端するVPNゲートウエイ装置などである。
これらの装置では、通過するパケットが属する上位層のセッションを識別し、識別したセッションの状態に応じてパケットを処理する必要がある。これらの装置は、パケットが通過するたびに、セッションの識別と状態の参照・更新を行うため、処理にかかる計算量が非常に大きくなる。このため、装置を複数台用意して負荷を分散させる技術(ルータクラスタ)が開発されてきた。
負荷分散を行うルータクラスタとしては、例えば、図20に示す構成を有するものが考えられる。同図に示すルータクラスタは、セッション処理部を有する複数台のルータ装置101〜10nと、それらの手前に設置されたパケット振り分け装置110とから構成される。パケット振り分け装置110は、外部から入力されたパケットを、所定の負荷分散規則に従って、ルータ100〜10nの内の何れかに振り分けることにより、負荷分散を実現している。
しかし、この図20に示したルータクラスタは、パケット振り分け装置110に負荷が集中するという問題があると共に、パケット振り分け装置110に障害が発生した場合、システム全体が麻痺してしまうという問題がある。
そこで、このような問題を解決するため、図21に示すようなルータクラスタが提案された(例えば、特表2003−517221、特表2003−518338参照)。
図21に示した従来のルータクラスタは、1台のマスタールータ装置200と、複数台のルータ装置(スレーブルータ装置)201〜20nとを備えている。各ルータ装置200〜20nは、セッション処理部と、トラフィック分散フィルタとを備えている。
隣接ノード210からルータクラスタへのIPパケット(単に、パケットと記す場合もある)は、データリンク層プロトコルでのマルチキャストにより、全ルータ装置200〜20nで受信される。各ルータ装置200〜20n内のトラフィック分散フィルタは、データリンク220上でマルチキャストされたIPパケットを、トラフィック分散規則に従って、通過或いは廃棄する。
ここで、各ルータ装置200〜20nが備えているトラフィック分散フィルタのトラフィック分散規則は、次の条件を満たしている。
・同一のパケットが複数のルータ装置内のトラフィック分散フィルタを通過することはない。
・パケットは必ずいずれかのルータ装置内のトラフィック分散フィルタを通過する
各ルータ装置201〜20n内のトラフィック分散フィルタのトラフィック分散規則は、マスタールータ装置200により設定されるものであり、マスタールータ装置200は他のルータ装置201〜20n内のトラフィック分散フィルタにどのようなトラフィック分散規則が設定されているのかを把握しており、各ルータ装置201〜20nの負荷が均等分散されるように、トラフィック分散規則を設定する。また、マスタールータ装置200は、トラフィック分散規則に当てはまらないパケットを処理するようなトラフィック分散フィルタを自装置内に備えている。また、マスタールータ装置200は、処理したパケットのセッション情報から新たなトラフィック分散規則を生成した他のルータ装置201〜20nのトラフィック分散フィルタに設定する。なお、マスタールータ装置200に障害が発生した場合には、他のルータ装置201〜20nの何れか1台がマスタールータ装置として動作する。
また、各ルータ装置200〜20n内のセッション処理部は、その内部に設定されているセッション処理規則とセッション状態を参照して、パケット分散フィルタを通過してきたパケットを処理し、破棄または転送させる。
各ルータ装置201〜20n内のセッション処理部のセッション処理規則は、マスタールータ装置200によって設定されるものである。マスタールータ装置200を含む各ルータ装置200〜20nは、互いに自身のセッション状態を示すセッション情報を交換し合う。このセッション情報の交換は、一定時間毎に行われ、各ルータ装置200〜20nは、他のルータ装置のセッション処理規則と交換した他のルータ装置の最新のセッション状態とを保持する。従って、ルータ装置201〜20nの何れかに故障が発生した場合、マスタールータ装置200において、代替する装置を決定し、故障したルータ装置に設定されていた処理規則及びセッション状態を該当装置に引き継がせるという処理を行うことが可能になる。また、マスタールータ装置200に故障が発生した場合、他のルータ装置がマスタールータ装置200の処理を引き継ぐことが可能になる。このように、図21に示したルータクラスタによれば、ルータクラスタを構成するどのルータ装置200〜20nに障害が発生した場合であっても、自動復旧することが可能になる。
しかしながら、図21に示した従来のルータクラスタには、次のような課題がある。すなわち、各ルータ装置201〜20nのセッション状態は、マスタールータ装置200に一定の間隔で伝達されるため、マスタールータ装置200が把握する他のルータ装置201〜20nのセッション状態と各ルータ装置201〜20nが保持するセッション状態の間に差があることがある。この差により、代替装置の用意により自動故障回復(failover)が行われても、本来処理できないパケットを処理してしまったり、また処理できるはずのパケットが処理できなくなることがある。上記差をなくすため、セッション情報の交換間隔を短くすると、セッション情報の交換にかかる通信量が増えるため、情報交換の負荷が増大する。また、ルータ装置数が増加しても通信の負荷が増大する。これにより、従来のルータクラスタでは、ルータ装置数の増強とfailover時間の短縮を同時に実現することはできず、スケーラビリティの点で大きな問題が存在した。
【発明の開示】
そこで、本発明の目的は、セッション情報をクラスタメンバ間で交換し合うことなく、故障復旧処理を行えるようにすることにある。
本発明にかかる第1のクラスタシステムは、上記目的を達成するため、
複数のクラスタメンバから構成されるクラスタシステムにおいて、
前記各クラスタメンバが、
所定の範囲決定ルールに従って自クラスタメンバが担当する主処理の範囲を示す主処理範囲および副処理の範囲を示す副処理範囲を決定し、前記クラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理とパケット転送処理とを行い、前記決定した副処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐ構成を有することを特徴とする。
より具体的には、本発明にかかる第2のクラスタシステムは、
複数のクラスタメンバから構成されるクラスタシステムにおいて、
前記各クラスタメンバが、
所定の範囲決定ルールと前記クラスタシステムを構成するクラスタメンバ数とに基づいて、自クラスタメンバが担当する主処理の範囲を示す主処理範囲および副処理の範囲を示す副処理範囲を決定する分散処理制御部と、
前記クラスタシステムに入力されたパケットの内、前記分散処理制御部で決定された主処理範囲または副処理範囲にマッチするパケットを通過させるトラフィック分散フィルタと、
パケットが属するセッションの状態を示すセッション情報が格納されるセッション情報保持部と、
前記トラフィック分散フィルタを通過したパケットの内の、前記主処理範囲にマッチしたパケットについては、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行し、前記副処理範囲にマッチしたパケットについては、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行するセッション処理部と、
該セッション処理部から出力されたパケットの転送処理を行うパケット転送部と、
自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記副処理範囲を主処理範囲に変更する故障復旧部とを備えたことを特徴とする。
本発明にかかる第3のクラスタシステムは、各クラスタメンバ間でセッション情報を交換し合わなくとも、故障クラスタメンバの発生時や、新規クラスタメンバの追加時に、各クラスタメンバが担当する主処理範囲や副処理範囲を変更できるようにするため、第2のクラスタシステムにおいて、
前記分散処理制御部が、他のクラスタメンバにおいて故障が発生したとき、及びクラスタシステムに新たなクラスタメンバが追加されたとき、前記範囲決定ルールとクラスタメンバ数とに基づいて新たな主処理範囲および副処理範囲を決定し、それまでの主処理範囲および副処理範囲を旧主処理範囲および旧副処理範囲とする構成を有し、
前記トラフィック分散フィルタが、前記クラスタシステムに入力されたパケットの内、前記新たな主処理範囲、前記新たな副処理範囲、前記旧主処理範囲または前記旧副処理範囲にマッチするパケットを通過させる構成を有し、
前記セッション処理部が、前記トラフィック分散フィルタを通過したパケットの内、前記新たな主処理範囲にマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットであること、或いは前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行し、前記旧主処理範囲のみにマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットである場合には破棄し、そうでない場合には前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行し、前記新たな副処理範囲のみにマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットであること、或いは前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行し、前記旧副処理範囲のみにマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットである場合には廃棄し、そうでない場合には、前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行し、前記旧副処理範囲と前記副処理範囲との両方にマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットである場合には、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行し、そうでない場合は、前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行する構成を有することを特徴とする。
また、本発明にかかる第4のクラスタシステムは、第3のクラスタシステムにおいて、
前記各クラスタメンバが、
前記クラスタシステム中のクラスタメンバの識別子が格納されたクラスタメンバリストと、
クラスタメンバ毎の死活監視タイマと、
所定時間毎に自クラスタメンバの識別子を含む広告メッセージを他のクラスタメンバに対して送信すると共に、他のクラスタメンバからの広告メッセージを受信したとき、該広告メッセージの送信元のクラスタメンバに対応する死活監視タイマをリセットする広告メッセージ処理部とを備え、
前記分散処理制御部が、
タイムアウトした死活監視タイマが発生したとき、該タイムアウトした死活監視タイマに対応するクラスタメンバに障害が発生したと認識する構成を有することを特徴とするクラスタシステム。
本発明にかかる第5のクラスタシステムは、第4のクラスタシステムにおいて、
前記分散処理制御部が、
前記広告メッセージ処理部で受信した広告メッセージ中の識別子が前記クラスタメンバリストに含まれていなかった場合、前記識別子のクラスタメンバが追加されたと認識する構成を有することを特徴とする。
本発明にかかる第1のクラスタメンバは、セッション情報をクラスタメンバ間で交換し合うことなく、故障復旧処理を行えるようにするため、
所定の範囲決定ルールに従って自クラスタメンバが担当する主処理の範囲を示す主処理範囲および副処理の範囲を示す副処理範囲を決定し、自クラスタメンバを構成要素とするクラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理とパケット転送処理とを行い、前記決定した副処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐ構成を有することを特徴とする。
本発明にかかる第1の故障復旧方法は、セッション情報をクラスタメンバ間で交換し合うことなく、故障復旧処理を行えるようにするため、
複数のクラスタメンバから構成されるクラスタシステムの故障復旧方法において、
前記各クラスタメンバが、
所定の範囲決定ルールに従って自クラスタメンバが担当する主処理の範囲を示す主処理範囲および副処理の範囲を示す副処理範囲を決定し、前記クラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理とパケット転送処理とを行い、前記決定した副処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐことを特徴とする。
本発明にかかる第1のプログラムは、セッション情報をクラスタメンバ間で交換し合うことなく、故障復旧処理を行えるようにするため、
コンピュータをクラスタメンバとして機能させるためのプログラムであって、
前記コンピュータを、
所定の範囲決定ルールに従って自クラスタメンバが担当する主処理の範囲を示す主処理範囲および副処理の範囲を示す副処理範囲を決定し、自クラスタメンバを構成要素とするクラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理とパケット転送処理とを行い、前記決定した副処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐ手段として機能させる。
【図面の簡単な説明】
図1は、本発明にかかる実施例の全体構成を示すブロック図である。
図2は、クラスタメンバ1−iの構成例を示すブロック図である。
図3は、範囲保持部121の内容例を示す図である。
図4は、範囲保持部121の内容例を示す図である。
図5は、クラスタメンバリスト172の内容例を示す図である。
図6は、マルチキャストアドレスによるパケットを受信したときの処理例を示すフローチャートである。
図7は、セッション処理部13が行うセッション処理の一例を示すフローチャートである。
図8は、セッション処理部13が行うセッション処理の一例を示すフローチャートである。
図9は、パケット転送部15が行うパケット転送処理の一例を示すフローチャートである。
図10は、広告メッセージ処理部18が行う広告メッセージ送信処理の一例を示すフローチャートである。
図11は、広告メッセージ処理部18が行う広告メッセージ受信処理の一例を示すフローチャートである。
図12は、故障復旧部20が行う死活監視タイマ監視処理の一例を示すフローチャートである。
図13は、範囲保持部121の内容例を示す図である。
図14は、範囲保持部121の内容例を示す図である。
図15は、分散処理制御部17が新規メンバ追加指示を受信した時の処理例を示すフローチャートである。
図16は、分散処理制御部17がタイムアウト通知を受けた時の処理例を示すフローチャートである。
図17は、故障クラスタメンバが発生した時の動作を説明するための図である。
図18は、新規クラスタメンバが追加された時の動作を説明するための図である。
図19は、本発明の他の実施例を説明するための図である。
図20は、従来の技術を説明するためのブロック図である。
図21は、他の従来の技術を説明するためのブロック図である。
【発明を実施するための最良の形態】
次に本発明の実施例について図面を参照して詳細に説明する。
〔実施例の構成の説明〕
図1は本発明にかかるクラスタシステムの一実施例の構成例を示すブロック図である。同図に示すように、本実施例のクラスタシステム1は、n個(複数個)のクラスタメンバ1−1〜1−nを備えており、各クラスタメンバ1−1〜1−nは、それぞれデータリンク3−1〜3−mを介して隣接IPノード2−1〜2−mと接続されている。
図2は、クラスタメンバ1−i(1≦i≦n)の構成例を示すブロック図である。
各クラスタメンバ1−iは、各データリンク3−1〜3−m毎のインタフェース部(IF部)11−1〜11−mと、トラフィック分散フィルタ12と、セッション処理部13と、セッション情報保持部14と、パケット転送部15と、ルーティングテーブル16と、分散処理制御部17と、広告メッセージ処理部18と、死活監視タイマ部19と、故障復旧部20とから構成されている。
インタフェース部11−j(1≦j≦m)は、パケット転送部15から渡されたパケットや広告メッセージをデータリンク3−jへ送出する機能や、データリンク3−jを介して送られてくる、クラスタシステム1固有のIPアドレス(クラスタ用アドレス)を宛先として含んだパケットや、自クラスタメンバ1−i固有のIPアドレス(メンバ個別アドレス)を宛先として含んだパケット(個々のクラスタメンバが制御用に使用するパケット)や、上記クラスタ用アドレスに対応する所定のデータリンクマルチキャストアドレスを宛先として含んだパケットや、他のクラスタメンバからの広告メッセージを受信する機能を有する。
トラフィック分散フィルタ12は、範囲保持部121を備えている。この範囲保持部121には、自クラスタメンバ1−iが現在主処理を担当しているトラフィックの範囲(主処理範囲)と、過去において主処理を担当していたトラフィックの範囲(旧主処理範囲)と、現在副処理を担当しているトラフィックの範囲(副処理範囲)と、過去において副処理を担当していたトラフィックの範囲(旧副処理範囲)とが格納されている。
そして、トラフィック分散フィルタ12は、インタフェース部11−jがデータリンクマルチキャストアドレスを宛先にしたパケットを受信したとき、上記各処理範囲に基づいて、上記パケットを通過させるか(セッション処理部13に渡すか)、破棄するかを決定する。なお、旧主処理範囲及び旧副処理範囲は、範囲保持部121に格納されていない場合もある。
図3,図4に範囲保持部121の内容例を示す。図3の例は、主処理範囲mfi及び副処理範囲bf1,i〜bfP,iにマッチするパケットを通過させ、それ以外のパケットは破棄することを示している。また、図4の例は、主処理範囲mfi’、旧主処理範囲mfi、副処理範囲bf1,i’〜bfP,i’及び旧副処理範囲bf1,i〜bfP,iにマッチするパケットを通過させ、それ以外のパケットは破棄することを示している。
なお、主処理と副処理との違いは、後の説明で明らかになるが、パケット転送部15において、パケットを送出方路に出力するか、破棄するかの違いがあるだけであり、それ以外は同じ処理が行われる。
セッション処理部13は、トラフィック分散フィルタ12を通過したパケットに対して、セッション処理を行う。このセッション処理においては、パケットが属するセッションを識別する処理や、セッション情報保持部14に保持されているセッション状態を示すセッション情報を更新,削除する処理や、セッション情報保持部14に新たなセッション情報を登録する処理(セッション開設時)や、パケットのヘッダ情報とセッション情報とに基づいて不正なパケットを破棄する処理を含む処理が行われる。
ここで、セッションとは、IPの拡張プロトコルおよび上位層プロトコルにより提供される仮想通信路を指し、例えば、TCPのコネクション,IPsecのSecurity Associationなどが含まれる。また、セッション状態とは、これらのセッション毎に保持される固有の情報を指し、TCPのコネクションの場合は、コネクションの状態,シーケンス番号,応答番号などを含む。また、IPsec SAの場合には、RFC2401で定められるSAのパラメータを含む。
パケット転送部15は、セッション処理部13から渡されたパケットや、インタフェース部11−jが受信した、宛先がデータリンクマルチキャストアドレス以外のパケットの送出方路を、ルーティングテーブル16の内容と上記パケットの宛先とに基づいて決定し、次ホップノードへ転送する機能を有する。
死活監視タイマ部19には、クラスタシステム1を構成する各クラスタメンバ1−1〜1−n毎の死活監視タイマ(図示せず)が設けられている。各死活監視タイマは、リセット後、所定時間Toutが経過すると、タイムアウト状態になる。
広告メッセージ処理部18は、所定時間Ts(Ts<Tout)毎に、クラスタシステム1内の他のクラスタメンバに対して広告メッセージを送信する機能や、他のクラスタメンバ1−k(1≦k≦n)からの広告メッセージを受信した時、死活監視タイマ部19に設けられているクラスタメンバ1−k用の死活監視タイマをリセットする機能や、受信した広告メッセージに基づいて新たなクラスタメンバが追加されたことを検出した時、分散処理制御部17に対して新規メンバ追加指示を出力する機能などを有する。
故障復旧部20は、死活監視タイマ部19内に設けられている、各クラスタメンバ1−1〜1−n毎の死活監視タイマの状態を常時監視し、故障の発生したクラスタメンバを検出する機能や、タイムアウト状態になった死活監視タイマを検出したとき(故障の発生したクラスタメンバを検出したとき)、分散処理制御部17に対して故障したクラスタメンバの識別子を含むタイムアウト通知を行う機能や、故障の発生したクラスタメンバが行っていた主処理を引き継ぐことが必要であるか否かを判定し、引き継ぐことが必要な場合は、トラフィック分散フィルタ12内の範囲保持部121の内容を書き換える機能などを有する。
分散処理制御部17は、識別子保持部171と、クラスタメンバリスト172と、範囲決定ルール保持部173とを備えている。
識別子保持部171には、自クラスタメンバ1−i固有の識別子(例えば、IDi)が格納されている。
クラスタメンバリスト172には、クラスタシステム1を構成している各クラスタメンバ1−1〜1−nの、クラスタメンバリスト172内での位置を示す番号と、識別子と、現時点で主処理を担当している範囲(主処理範囲)と、現時点で副処理を担当している範囲(副処理範囲)とが設定されている。
図5にクラスタメンバリスト172の一例を示す。図5の例は、番号「i」、識別子「IDi」のクラスタメンバ1−iは、主処理範囲mfiにマッチするパケットに対する主処理と、副処理範囲bf1,i〜bfP,iにマッチするパケットに対する優先度「1」〜「P」の副処理とを担当していることを示している。ここで、Pは、1≦P≦(n−1)を満たすものであれば、任意の値(整数)とすることができる。
範囲決定ルール保持部173には、クラスタシステム1を構成している各クラスタメンバ1−1〜1−nに担当させる主処理範囲mf1〜mfnを決定するための主処理範囲決定ルールと、各クラスタメンバ1−1〜1−nに担当させる副処理範囲bf1,1〜bfP,nを決定するための副処理範囲決定ルールとが格納されている。
主処理範囲決定ルールによって決定される、各クラスタメンバ1−1〜1−nが担当する主処理範囲mf1〜mfnは、互いに重複せず、且つ、処理すべき全トラフィックを網羅しなければならない。今、例えば、処理すべき全トラフィックをT、空集合をφとすると、主処理範囲決定ルールは、次式(1),(2)を満たす主処理範囲mf1〜mfnを決定可能なものでなくてはならない。
mf1∪mf2∪ … ∪mfn=T…(1)
mf1∩mf2∩ … ∩mfn=φ…(2)
このような条件を満たす主処理範囲決定ルールとしては、例えば、次のようなものを採用することができる。
番号「1」〜「n」のクラスタメンバ1−1〜1−nの主処理範囲mf1〜mfnを、それぞれ「0」〜「n−1」とする主処理範囲決定ルール。ここで、主処理範囲mf1〜mfn(「0」〜「n−1」)は、パケットのIP送信元アドレスとIP宛先アドレスとに対して可換な演算(例えば、両者の加算或いは乗算)を行い、その演算結果をクラスタ数「n」で除算した時の余りを示す。なお、主処理範囲決定ルールは、これに限られるものではなく、上記した式(1),(2)を満たす主処理範囲を決定できるものであれば、どのようなものであっても良い。
また、副処理範囲決定ルールによって決定される、各クラスタメンバ1−1〜1−nが担当する優先度Pの副処理範囲bfP,1〜bfP,nは、互いに重複せず、且つ、処理すべき全トラフィックTを網羅しなければならない。また、各クラスタメンバにおいて、そのクラスタメンバ1−iが担当している主処理範囲mfiと、そのクラスタメンバ1−iが担当する優先度「1」〜「P」の副処理範囲bf1,i〜bfP,iとは重複してはならない。つまり、副処理範囲決定ルールは、次式(3)〜(5)を満たす副処理範囲bfP,1〜bfP,nを決定可能なものでなくてはならない。
bfP,1 ∪ bfP,2 ∪…∪ bfP,n=T …(3)
bfP,1 ∩ bfP,2 ∩…∩ bfP,n=φ …(4)
mfi ∩ bf1,i ∩ bf2,i ∩…∩ bfP,i …(5)
また、分散処理制御部17は、広告メッセージ処理部18から新規メンバ追加指示が入力された場合や、故障復旧部20からタイムアウト通知が入力された場合、範囲決定ルール保持部173に格納されている主処理範囲決定ルール及び副処理範囲決定ルールに従って各クラスタメンバ1−1〜1−nの主処理範囲及び副処理範囲を決定する機能や、クラスタメンバリスト172の内容を更新する機能や、トラフィック分散フィルタ12内の範囲保持部121の内容を更新する機能などを有する。
なお、クラスタメンバ1−iはコンピュータによって実現可能なものであり、コンピュータによってクラスタメンバ1−iを実現する場合は、次のようにする。クラスタメンバ用のプログラムを記録したディスク、半導体メモリ、その他の記録媒体を用意する。コンピュータは、上記プログラムを読み込み、自身の動作を制御することにより、インタフェース部11−1〜11−m、トラフィック分散フィルタ12、セッション処理部13、パケット転送部15、ルーティングテーブル16、分散処理制御部17、広告メッセージ処理部18、死活監視タイマ部19、故障復旧部20を実現する。
〔実施例の動作の説明〕
次に、上記のように構成される本実施例のクラスタシステムの動作について詳細に説明する。
〔データリンクマルチキャストアドレスを宛先にしたパケットの受信処理〕
先ず、隣接IPノード2−a(1≦a≦m)からクラスタシステム1を次ホップとして送信されたパケットの処理について説明する。隣接IPノード2−aは、クラスタシステム1のクラスタ用アドレスを次ホップとするパケットについては、上記クラスタ用アドレスに対応するデータリンクマルチキャストアドレス宛に送信する。
各クラスタメンバ1−1〜1−nは、上記マルチキャストされたパケットを受信すると、図6のフローチャートに示す処理を行う。
クラスタメンバ1−i内のトラフィック分散フィルタ12は、マルチキャストされたパケットをインタフェース部11−aを介して受信すると、先ず、そのパケットが、主処理範囲にマッチしているか否かを調べる(ステップS51)。そして、主処理範囲にマッチしている場合には、上記パケットにマッチ種別「主処理範囲」を付加してセッション処理部13に渡す(ステップS56)。
これに対して、主処理範囲にマッチしていない場合は、旧主処理範囲のみにマッチしているか、旧主処理範囲と副処理範囲の両方にマッチしているか、副処理範囲のみにマッチしているか、それとも旧副処理範囲にマッチしているかを調べる(ステップS52〜S55)。
旧主処理範囲のみにマッチしている場合は、パケットにマッチ種別「旧主処理範囲」を付加してセッション処理部13に渡す(ステップS52において”YES”、S56)。
旧主処理範囲と副処理範囲の両方にマッチしている場合は、マッチ種別「旧主処理範囲、副処理範囲」を付加してセッション処理部13に渡す(ステップS53において”YES”、S56)。
副処理範囲のみにマッチする場合は、マッチ種別「副処理範囲」を付加してセッション処理部13に渡す(ステップS54において”YES”、S56)。
旧副処理範囲にマッチする場合は、マッチ種別「旧副処理範囲」を付加してセッション処理部13に渡す(ステップS55において”YES”、S56)。
いずれの範囲にもマッチしない場合は、パケットを破棄する(ステップS55において”NO”、S59)。なお、範囲保持部121に旧主処理範囲、旧副処理範囲が格納されていない場合には、旧主処理範囲、旧副処理範囲とはマッチしないことになる。
セッション処理部13は、トラフィック分散フィルタ12からマッチ種別の付加されたパケットが渡されると、セッション処理を行う(ステップS57)。このステップS57で行うセッション処理について、図7,図8を参照して詳細に説明する。
セッション処理部13は、トラフィック分散フィルタ12からマッチ種別「主処理範囲」の付加されたパケットが渡されると(図7のステップS601において”YES”)、そのパケットがセッションの開設を要求するものであるか否かを判断する(ステップS602)。
そして、セッションの開設を要求するパケットであった場合は、セッション情報保持部14に上記パケットが属するセッションのセッション情報を登録すると共に、上記パケットを処理する(ステップS603,S604)。
ステップS604では、不正パケットを破棄する処理などを行う(破棄しなかったパケットは、パケット転送部15に渡す)。
これに対して、セッションの開設を要求するパケットでなかった場合(ステップS602において”NO”)は、上記パケットのヘッダ情報に基づいて、セッション情報保持部14に上記パケットが属するセッションのセッション情報が存在するか否かを調べる(ステップS605)。
そして、存在しない場合(自クラスタメンバが上記パケットが属するセッションの開設処理を行っていない場合)は、パケットを破棄し(ステップS606)、存在する場合(自クラスタメンバが上記パケットが属するセッションの開設処理を行っている場合)は、セッション情報を更新すると共にパケットを処理する(ステップS603,S604)。なお、パケットがセッション終了を要求するパケットである場合には、ステップS603において、セッション情報保持部14に格納されている上記パケットが属するセッションのセッション情報を削除する処理が行われる。
また、トラフィック分散フィルタ12からマッチ種別「旧主処理範囲」の付加されたパケットが渡された場合(ステップS607において”YES”)は、そのパケットがセッションの開設を要求するものであるか否かを判断する(ステップS608)。
そして、セッションの開設を要求するものである場合は、破棄し(ステップS609)、そうでない場合は、上記パケットが属するセッションのセッション情報がセッション情報保持部14に格納されているか否かを調べる(ステップS610)。
該当するセッション情報が存在しなかった場合には、パケットを廃棄し(ステップS609)、存在する場合には、セッション情報保持部14に格納されている該当するセッション情報を更新すると共に、不正パケットを破棄するなどの処理を行う(ステップS611,S612)。
また、トラフィック分散フィルタ12からマッチ種別「副処理範囲」の付加されたパケットが渡された場合(図8のステップS701において”YES”)は、セッション処理部13は、先ず、そのパケットがセッションの開設を要求するものであるか否かを判定する(ステップS702)。
そして、セッションの開設を要求するものである場合は、セッション情報保持部14に上記パケットのセッション情報を登録すると共に、上記パケットを破棄する(ステップS703,S704)。
これに対して、セッションの開設を要求するものでない場合は、上記パケットが属するセッションのセッション情報がセッション情報保持部14に格納されているか否かを調べる(ステップS705)。
そして、該当するセッション情報が存在する場合は、セッション情報を更新すると共に、パケットを破棄し(ステップS703,S704)、存在しない場合は、上記パケットを破棄する(ステップS706)。
また、トラフィック分散フィルタ12からマッチ種別「旧副処理範囲」の付加されたパケットが渡された場合(ステップS707において”YES”)は、そのパケットがセッションの開設を要求するものか否かを調べる(ステップS708)。
そして、セッションの開設を要求するパケットである場合には、廃棄処理を行い(ステップS709)、そうでない場合は、セッション情報保持部14に該当するセッション情報が格納されているか否かを調べる(ステップS710)。
該当するセッション情報が存在しない場合は、パケットを破棄し(ステップS709)、存在する場合は、セッション情報を更新すると共にパケットを破棄する(ステップS711,S712)。
また、トラフィック分散フィルタ12からマッチ種別「旧主処理範囲、副処理範囲」の付加されたパケットが渡された場合(ステップS707において”NO”)は、そのパケットがセッションの開設を要求するものか否かを調べる(ステップS713)。
そして、セッションの開設を要求するパケットである場合は、開設するセッションのセッション情報をセッション情報保持部14に登録した後、そのパケットを破棄する(ステップS714,S715)。
これに対して、セッション開設を要求するパケットでない場合は、セッション情報保持部14に該当するセッション情報が登録されているか否かを調べる(ステップS716)。
そして、登録されていない場合は、パケットを破棄し(ステップS715)、登録されている場合は、セッション情報保持部14に登録されているセッション情報を更新すると共に、上記パケットをパケット転送部15に渡す(ステップS717,S718)。
再び図6に示す処理に戻り、パケット転送部15は、セッション処理部13からパケット(マッチ種別はセッション処理部13で削除されている)が渡されると、パケット転送処理を実行する(ステップS58)。
このステップS58で行うパケット転送処理では、図9のフローチャートに示すように、パケットのIP宛先アドレスに基づいてルーティングテーブル16を検索することにより送出方路を求め、求めた送出方路に対応したインタフェース部を介してパケットを送出する(ステップS81,S82)。なお、パケット転送部15は、インタフェース部11−1〜11−mを介して受信した、データリンクマルチキャストアドレスを宛先としないパケットについても同様の処理を行う。
〔広告メッセージの送信処理〕
次に、広告メッセージの送信処理について説明する。クラスタメンバ1−i内の広告メッセージ処理部18は、図10のフローチャートに示すように、広告メッセージの送信タイミングになる毎に(ステップS91において”YES”)、クラスタメンバリスト172に格納されている全ての識別子(自クラスタメンバ1−iがクラスタシステム1内に存在していると認識しているクラスタメンバの識別子)と、識別子保持部171に格納されている自クラスタメンバ1−iの識別子とを取得し(ステップS92)、それらを含む広告メッセージを、クラスタシステム1内の他のクラスタメンバへ送信する(ステップS93)。
その際、広告メッセージ処理部18は、クラスタ用IPアドレス以外の所定のマルチキャストまたはブロードキャストアドレスを用いて広告メッセージを送信する。
また、ステップS91では、前回広告メッセージを送信してから所定時間Tsが経過したか否かに基づいて送信タイミングになったか否かを判断しており、上記所定時間Tsは、死活監視タイマのタイムアウト時間Toutよりも短い時間である。即ち、Ts<Toutの関係を満たしている。また、新規にクラスタシステム1に追加されたクラスタメンバ内のクラスタメンバリスト172には、自クラスタメンバの識別子しか格納されていない。
〔広告メッセージの受信処理〕
次に広告メッセージの受信処理について説明する。クラスタメンバ1−i内の広告メッセージ処理部18は、クラスタシステム1内の他のクラスタメンバ(例えば、クラスタメンバ1−n)からの広告メッセージを受信すると、図11のフローチャートに示すように、広告メッセージに含まれている送信元クラスタメンバ1−nの識別子が、クラスタメンバリスト172に登録されているか否かを調べる(ステップS101)。
そして、クラスタメンバ1−nの識別子がクラスタメンバリスト172に登録されていると判断した場合(ステップS101において”YES”)は、死活監視タイマ部19内に設けられている、クラスタメンバ1−n用の死活監視タイマ(図示せず)をリセットし、その後、分散処理制御部17に対して広告メッセージに含まれている全識別子を渡す(ステップS102,S103)。
これに対して、登録されていないと判断した場合(ステップS101において”NO”)は、クラスタシステム1に新規クラスタメンバが追加されたと認識し、分散処理制御部17に対して新規メンバ追加指示を出力する(ステップS104)。
この新規メンバ追加指示には、広告メッセージの送信元クラスタメンバ1−nの識別子が含まれる。
その後、広告メッセージ処理部18は、死活監視タイマ部19内に新規クラスタメンバ1−n用の死活監視タイマを生成する(ステップS105)。なお、死活監視タイマ部19内に設けられている各死活監視タイマは、それぞれリセットされてから所定時間Toutが経過するとタイムアウト状態になるものである。
〔故障復旧処理(failover処理)〕
次に故障復旧処理について説明する。クラスタメンバ1−i内の故障復旧部20は、図12のフローチャートに示すように、死活監視タイマ部19内に設けられている各クラスタメンバ用の死活監視タイマの内の1つに注目し、その死活監視タイマがタイムアウト状態になっているか否かを調べる(ステップS111,S112)。
そして、タイムアウト状態になっていない場合(ステップS112において”NO”)は、次の死活監視タイマに注目する(ステップS111)。
これに対して、現在注目している死活監視タイマ(例えば、クラスタメンバ1−n用の死活監視タイマ)がタイムアウト状態になっている場合(ステップS112において”YES”)は、自クラスタメンバ1−iが、クラスタメンバ1−nが主処理を担当しているトラフィックに関し、優先度「1」の副処理を担当しているか否かを判断する(ステップS113)。この判断は、クラスタメンバリスト172を参照して行う。
そして、優先度「1」の副処理を担当している場合(ステップS113において”YES”)は、トラフィック分散フィルタ12内の範囲保持部121の内容を更新し、クラスタメンバ1−nが主処理を担当していたトラフィックの範囲についても、自クラスタメンバ1−iで主処理を担当するようにする(ステップS114)。
例えば、範囲保持部121の内容が図3に示すものである場合は、その内容を図13に示すように変更する。つまり、主処理範囲に、bf1,iを追加し、副処理範囲からbf1,iを削除する。なお、図3,図13において、bf1,iは、クラスタメンバ1−nが主処理を担当していた主処理範囲と同一の範囲を示す。
これに対して、優先度「1」の副処理を担当していない場合(ステップS113において”NO”)は、クラスタメンバ1−nが担当している副処理の中に、自クラスタメンバ1−iが担当している副処理とトラフィック範囲が同じで、且つ優先度が自クラスタメンバ1−iで担当している副処理よりも高いものがあるか否かを判断する(ステップS117)。
そして、そのような副処理が存在する場合(ステップS117において”YES”)は、該当する副処理範囲の優先度を1つ上げる(ステップS118)。
例えば、範囲保持部121の内容が、図3に示すものである場合は、その内容を図14に示すように変更する。つまり、bf2,iの優先度を「2」から「1」に変更する(優先度を1つ上げる)。なお、図3,図14において、bf2,1は、クラスタメンバ1−nが優先度「1」の副処理を担当していたトラフィック範囲と同一の範囲を示す。
これに対して、上記した条件を満たす副処理が存在しない場合(ステップS117において”NO”)は、ステップS115の処理を行う。なお、ステップS115は、ステップS114或いはステップS118の終了後にも実行される。
ステップS115において、故障復旧部20は、分散処理制御部17に対してタイムアウト通知を行う。このタイムアウト通知には、タイムアウト状態になった死活監視タイマに対応するクラスタメンバ1−nの識別子が含まれている。その後、故障復旧部20は、死活監視タイマ部19からクラスタメンバ1−n用の死活監視タイマを削除し(ステップS116)、再び、ステップ3111の処理を行う。
〔新規メンバ追加処理〕
次に、分散処理制御部17が行う新規メンバ追加処理について説明する。クラスタメンバ1−i内の分散処理制御部17は、広告メッセージ処理部18から新規メンバ追加指示が入力されると、図15のフローチャートに示す処理を行う。なお、新規メンバ追加指示には、新規に追加されたクラスタメンバの識別子としてクラスタメンバ1−xの識別子が含まれているとする。
先ず、分散処理制御部17は、範囲決定ルール保持部173に格納されている主処理範囲決定ルール及び副処理範囲決定ルールを使用して、クラスタシステム1内の各クラスタメンバの主処理範囲及び副処理範囲を決定する(ステップS131)。つまり、クラスタメンバリスト172に識別子が格納されている各クラスタメンバ及び追加されたクラスタメンバ1−xの主処理範囲及び副処理範囲を決定する。
次に、分散処理制御部17は、各クラスタメンバの情報(識別子、主処理範囲、副処理範囲)を、識別子をキーにしてソートし、ソート順に番号を付してクラスタメンバリスト172に格納する(ステップS132)。
その後、分散処理制御部17は、自クラスタメンバ1−iが認識しているクラスタシステム構成と、他のクラスタメンバが認識しているクラスタシステム構成が全て同じであるか否かを判断する(ステップS133)。
この判断は、図11のステップS103において、広告メッセージ処理部18から入力される、広告メッセージ中の全識別子に基づいて行う。つまり、自クラスタメンバ1−iがクラスタシステム1内に存在していると認識している各クラスタメンバから広告メッセージが送られてきており、且つ、上記各クラスタメンバから送られてきた広告メッセージ中の全識別子と、自クラスタメンバ1−i内のクラスタメンバリスト172に格納されている識別子とが一致する場合、全クラスタメンバが認識しているクラスタシステム構成が同じであると判断する。
ステップS133において、全クラスタメンバが認識しているクラスタシステム構成が同じであると認識すると、分散処理制御部17は、トラフィック分散フィルタ12内の範囲保持部121の内容を更新する(ステップS134)。つまり、現時点において、主処理範囲,副処理範囲であったものを、それぞれ旧主処理範囲,旧副処理範囲とし、ステップS131で決定した主処理範囲,副処理範囲をそれぞれ主処理範囲,副処理範囲とする。例えば、範囲保持部121の内容が図3に示すものであった場合、ステップS134の処理を行うことにより、その内容は、例えば図4に示すように変更される。
〔タイムアウト通知受信処理〕
次に、分散処理制御部17が行うタイムアウト通知受信処理について説明する。分散処理制御部17は、故障復旧部20からタイムアウト通知が入力されると、図16のフローチャートに示す処理を行う。なお、タイムアウト通知には、タイムアウトが発生したクラスタメンバの識別子としてクラスタメンバ1−nの識別子が含まれているとする。
先ず、分散処理制御部17は、分散処理制御部17からクラスタメンバ1−nのエントリを削除する(ステップS141)。
次に、範囲決定ルール保持部173に格納されている主処理範囲決定ルール及び副処理範囲決定ルールに基づいて、クラスタメンバリスト172に識別子が格納されている各クラスタメンバの主処理範囲及び副処理範囲を決定し、決定した主処理範囲及び副処理範囲に基づいてクラスタメンバリスト172を更新する(ステップS142,143)。
その後、分散処理制御部17は、全てのクラスタメンバが認識しているクラスタシステム構成が同じであるか否かを判断し(ステップS144)、そうである場合は、トラフィック分散フィルタ12内の範囲保持部121の内容を更新する(ステップS145)。なお、ステップS145では、前述したステップS134と同様の処理が行われる。
次に、具体例を挙げて本実施例の動作を説明する。
今、例えば、クラスタシステム1が4台のクラスタメンバ1−1〜1−4から構成され、クラスタシステム1で処理すべき全トラフィックがTであるとする。また、各クラスタメンバ1−1〜1−4には、図17(A),(B)に示す主処理範囲mf1〜mf4及び副処理範囲bf1,1〜bf1,4が設定されているとする。即ち、クラスタメンバ1−1,1−2,1−3,1−4が担当している主処理に関する優先度「1」の副処理を、クラスタメンバ1−4,1−1,1−2,1−3が担当している。また、この時点では、旧主処理範囲および旧副処理範囲は設定されていないとする。
このような状態において、隣接IPノード(例えば、隣接IPノード2−1)からクラスタシステム1へパケットがマルチキャストされ、各クラスタメンバ1−1〜1−4が上記パケットを受信したとする。但し、このパケットは、セッションαに属するものとする。
クラスタメンバ1−1,1−2は、上記パケットが主処理範囲、旧処理範囲、副処理範囲、旧副処理範囲の何れにもマッチしないので、パケットを破棄する(図6のステップ55において全て”NO”、S59)。
クラスタメンバ1−3は、上記パケットが副処理範囲bf1,3のみにマッチするので、上記パケットに対するセッション処理を実行する(ステップS54において”YES”、S56、S57)。
また、クラスタメンバ1−4は、上記パケットが主処理範囲mf4にマッチするので、上記パケットに対するセッション処理を実行する(ステップS51において”YES”、S56,S57)。
このような状態において、クラスタメンバ1−4に故障が発生したとする。クラスタメンバ1−4に故障が発生すると、クラスタメンバ1−4からは広告メッセージが送出されなくなるので、他のクラスタメンバ1−1〜1−3内に設けられているクラスタメンバ1−4用の死活監視タイマは、タイムアウト状態になる。
クラスタメンバ1−4用の死活監視タイマがタイムアウト状態になると、クラスタメンバ1−4が担当していた主処理に関する優先度「1」の副処理を担当しているクラスタメンバ1−3は、自クラスタメンバ1−3内の範囲保持部121を更新し、クラスタメンバ1−4が担当していた主処理を引き継ぐ(図12のステップS112において”YES”、S113において”YES”、S114)。つまり、クラスタメンバ1−3においては、副処理範囲bf1,3が主処理範囲に変更されるため、セッションαに属するパケットの主処理を実行することになる。
その後、クラスタメンバ1−3は、図16のフローチャートに示すタイムアウト通知受信処理を実行する。他のクラスタメンバ1−1,1−2は、図12のステップS113,S117において共に”NO”となるので、図16のフローチャートに示すタイムアウト通知受信処理を実行する。
図16のフローチャートに示す受信処理が行われることにより、正常動作している各クラスタメンバ1−1〜1−3には、図17(C),(D)に示す主処理範囲mf1’〜mf3’及び副処理範囲bf1,1’〜bf1,3’が設定される。なお、主処理範囲mf1〜mf3及び副処理範囲bf1,1〜bf1,3は、クラスタメンバ1−1〜1−3の旧主処理範囲及び旧副処理範囲となる。
その後、再び、隣接IPノード2−aからセッションαに属するパケットが、クラスタシステム1に対してマルチキャストされたとすると、各クラスタメンバ1−1〜1−3において、上記パケットが受信される。
クラスタメンバ1−1内のトラフィック分散フィルタ12は、上記パケットが、主処理範囲、旧主処理範囲、副処理範囲、旧副処理範囲の何れにもマッチしないので、そのパケットを破棄する(図6のステップS55において”NO”、S59)。
また、クラスタメンバ1−2内のトラフィック分散フィルタ12は、上記パケットが副処理範囲bf1,2’のみにマッチするパケットであるので、マッチ種別「副処理範囲」を付加してセッション処理部13に渡す(図6のステップS54において”YES”、S56)。
セッション処理部13は、マッチ種別「副処理範囲」の付加されたパケットが渡されると、それがセッション開設を要求するパケットでないので、上記パケットのセッション情報がセッション情報保持部14に格納されているか否かを調べる(図8のステップS701において”YES”、S702において”NO”、S705)。この例の場合、該当するセッション情報が格納されていないので、パケットを破棄する(S705において”NO”、S706)。
クラスタメンバ1−3内のトラフィック分散フィルタ12は、上記パケットが主処理範囲mf3’にマッチするので、マッチ種別「主処理範囲」を付加してセッション処理部13に渡す(図6のステップS51において”YES”,S56)。
セッション処理部13は、マッチ種別「主処理範囲」の付加されたパケットが渡されると、それがセッション開設を要求するパケットでないので、上記パケットに関するセッション情報がセッション情報保持部14に格納されているか否かを調べる(図7のステップS601において”YES”,S602において”NO”,S605)。この例の場合、クラスタメンバ1−3は、クラスタメンバ1−4に故障が発生する前、セッションαに属するパケットに対する副処理を担当していたので、セッション情報保持部14には該当するセッション情報が存在することになる。
従って、セッション処理部13は、セッション情報保持部14に格納されている該当するセッション情報を更新し(ステップS603)、更に、上記パケットをセッション処理部13に渡すことになる(ステップS604)。
その後、隣接IPノード2−aからセッションβの開設を要求するパケットが、クラスタシステム1に対してマルチキャストされたとする。このパケットは、クラスタシステム1内の各クラスタメンバ1−1〜1−3で受信される。
クラスタメンバ1−1内のトラフィック分散フィルタ12は、上記パケットが主処理範囲mf1’にマッチするので、マッチ種別「主処理範囲」を付加してセッション処理部13に渡す(図6のステップS51において”YES”,S56)。
セッション処理部13は、マッチ種別「主処理範囲」の付加されたパケットが渡されると、それがセッション開設を要求するパケットであるので、セッション情報保持部14にセッションβに関するセッション情報を登録(新規登録)すると共に、パケットをパケット転送部15に渡す(図7のS601において”YES”,S602において”YES”,S603,S604)。
クラスタメンバ1−2内のトラフィック分散フィルタ12は、上記パケットが旧主処理範囲mf2のみにマッチするので、マッチ種別「旧主処理範囲」を付加してセッション処理部13に渡す(図6のS52において”YES”,S56)。
セッション処理部13は、マッチ種別「旧主処理範囲」が付加されたパケットが渡されると、それがセッション開設を要求するものなので、破棄する(図7のステップS607において”YES”,S608において”YES”,S609)。つまり、クラスタメンバ1−1が上記パケットに対する主処理を担当するので、クラスタメンバ1−2は、上記パケットを破棄する。
クラスタメンバ1−3内のトラフィック分散フィルタ12は、上記パケットが副処理範囲bf1,3’のみにマッチするのでマッチ種別「副処理範囲」を付加してセッション処理部13に渡す(図6のステップS54において”YES”,S56)。
セッション処理部13は、マッチ種別「副処理範囲」の付加されたパケットが渡されると、それがセッション開設を要求するものであるので、セッション情報保持部14にセッションβに関するセッション情報を登録すると共に、上記パケットを破棄する(図8のステップS701において”YES”,S702において”YES”,S703,S704)。
以上は、クラスタシステム1内のクラスタメンバ1−4に故障が発生した場合の動作であるが、新たなクラスタメンバが追加された場合の動作は、次のようになる。
今、例えば、クラスタシステム1が3台のクラスタメンバ1−1〜1−3から構成され、クラスタシステム1で処理すべき全トラフィックがTであるとする。また、各クラスタメンバ1−1〜1−3には、図18(A),(B)に示す主処理範囲mf1〜mf3及び副処理範囲bf1,1〜bf1,3が設定されているとする。即ち、クラスタメンバ1−1,1−2,1−3が担当している主処理に関する優先度「1」の副処理を、クラスタメンバ1−3,1−1,1−2が担当している。また、この時点では、旧主処理範囲および旧副処理範囲は設定されていないとする。
このような状態において、隣接IPノード(例えば、隣接IPノード2−1)からクラスタシステム1へパケットがマルチキャストされ、各クラスタメンバ1−1〜1−3が上記パケットを受信したとする。但し、このパケットは、セッションγに属するものとする。
クラスタメンバ1−1は、上記パケットが主処理範囲、旧主処理範囲、副処理範囲、旧副処理範囲の何れにもマッチしないので、上記パケットを破棄する(図6のステップS55において”NO”、S59)。
クラスタメンバ1−2は、上記パケットが副処理範囲bf1,2のみにマッチするので、セッション処理を実行する(ステップS54において”YES”、S56、S57)。
クラスタメンバ1−3は、上記パケットが主処理範囲mf3にマッチするので、セッション処理を実行する(ステップS51において”YES”、S56、S57)。
このような状態において、クラスタメンバ1−4が追加されたとすると、各クラスタメンバ1−1〜1−4内の範囲保持部121の内容が更新され、各クラスタメンバ1−1〜1−4が担当する主処理範囲、旧主処理範囲、副処理範囲及び旧副処理範囲が更新される(図15のステップS131〜S134)。
今、例えば、各クラスタメンバ1−1〜1−4に、図18(C)、(D)に示す主処理範囲mf1’〜mf4’及び副処理範囲bf1,1’〜bf1,4’が設定されたとする。なお、主処理範囲mf1〜mf3及び副処理範囲bf1,1〜bf1,3は、クラスタメンバ1−1〜1−3の旧主処理範囲及び旧副処理範囲となる。
その後、再び、隣接IPノード2−1からセッションγに属するパケットが、クラスタシステム1に対してマルチキャストされたとすると、各クラスタメンバ1−1〜1−4において、上記パケットが受信される。
クラスタメンバ1−1内のトラフィック分散フィルタ12は、上記パケットが主処理範囲、旧主処理範囲、副処理範囲、旧副処理範囲の何れにもマッチしないので、上記パケットを破棄する(図6のステップS55において”NO”、S59)。
クラスタメンバ1−2内のトラフィック分散フィルタ12は、上記パケットが旧副処理範囲bf1,2のみにマッチするので、マッチ種別「旧副処理範囲」を付加してセッション処理部13に渡す(図6のステップS55において”YES”、S56)。
セッション処理部13は、マッチ種別「旧副処理範囲」の付加されたパケットが渡されると、そのパケットがセッション開設を要求するパケットでなく、且つ該当セッション情報がセッション情報保持部14内に存在するので、セッション情報を更新した後、上記パケットを破棄する(図8のステップS707において”YES”、S708において”NO”、S710において”NO”、S709)。
クラスタメンバ1−3内のトラフィック分散フィルタ12は、上記パケットが旧主処理範囲mf3と副処理範囲bf1,3’の両方にマッチするので、マッチ種別「旧主処理範囲、副処理範囲」を付加してセッション処理部13に渡す(図6のステップS53において”YES”、S56)。
セッション処理部13は、マッチ種別「旧主処理範囲、副処理範囲」の付加されたパケットがトラフィック分散フィルタ12から渡されると、そのパケットがセッション開設を要求するものでなく、且つ、セッション情報保持部14に該当するセッション情報が存在するので、セッション情報を更新した後、上記パケットをパケット転送部15に渡す(図8のステップS713において”NO”、S716において”YES”、S717、S718)。
クラスタメンバ1−4内のトラフィック分散フィルタ12は、上記パケットが主処理範囲mf4’にマッチするので、マッチ種別「主処理範囲」を付加してセッション処理部13に渡す(図6のステップS51において”YES”、S56)。
セッション処理部13は、マッチ種別「主処理範囲」の付加されたパケットが渡されると、そのパケットがセッション開設を要求するものでなく、且つ、セッション情報保持部14に該当するセッション情報が存在しないので、上記パケットを破棄する(図7のステップS601において”YES”、S602において”NO”、S605において”NO”、S606)。
その後、隣接IPノード2−1が、セッションδの開設を要求するパケットをクラスタシステム1に対してマルチキャストしたとすると、このパケットは、各クラスタメンバ1−1〜1−4で受信される。
クラスタメンバ1−1内のトラフィック分散フィルタ12は、上記パケットが旧主処理範囲mf1と副処理範囲bf1,1’の両方にマッチするので、マッチ種別「旧主処理範囲、副処理範囲」を付加してセッション処理部13に渡す(図6のステップS53において”YES”、S56)。
セッション処理部13は、マッチ種別「旧主処理範囲、副処理範囲」の付加されたパケットが渡されると、それがセッションの開設を要求するものであるので、セッション情報を更新(セッションδのセッション情報をセッション情報保持部14に登録)した後、上記パケットを破棄する(図8のステップS713において”YES”、S714、S715)。
クラスタメンバ1−2内のトラフィック分散フィルタ12は、上記パケットが主処理範囲mf2’にマッチするので、マッチ種別「主処理範囲」を付加してセッション処理部13に渡す(図6のステップS51において”YES”、S56)。
セッション処理部13は、マッチ種別「主処理範囲」の付加されたパケットが渡されると、それがセッションδの開設を要求するパケットであるので、セッション情報をセッション情報保持部14に登録(セッションδのセッション情報を新規登録)すると共に、上記パケットをパケット転送部15に渡す(図7のステップS601,S602において共に”YES”、S603、S604)。
クラスタメンバ1−3内のトラフィック分散フィルタ12は、上記パケットが旧副処理範囲のみにマッチするので、マッチ種別「旧副処理範囲」を付加してセッション処理部13に渡す(図6のステップS55において”YES”、S56)。
セッション処理部13は、上記パケットがセッションδの開設を要求するものであるので、破棄する(図8のステップS707,S708において”YES”、S709)。
クラスタメンバ1−4内のトラフィック分散フィルタ12は、上記パケットが主処理範囲、旧主処理範囲、副処理範囲、旧副処理範囲の何れにもマッチしないので、上記パケットを破棄する(図6のステップS55において”NO”、S59)。
なお、以上の説明では述べなかったが、各クラスタメンバにおいて、トラフィック分散フィルタ12内の範囲保持部121に格納されている旧主処理範囲,旧副処理範囲の内、関連するセッション(自クラスタメンバにおいて、開設処理を行ったセッション)が全くなくなった旧主処理範囲,旧副処理範囲は削除するようにしても良い。つまり、旧主処理範囲および旧副処理範囲は、その範囲内に関連するセッションが存在する場合のみ有効で、関連するセッションが存在しない場合は無意味なものとなるので、上記したようにする。このようにすることにより、トラフィック分散フィルタ12で比較対象にする処理範囲数が少なくなるので、処理速度を向上させることができる。
〔発明の他の実施例〕
上述した実施例では、主処理を行っているクラスタメンバが故障した場合、副処理を行っていたクラスタメンバは、自身の主処理に加えて、該当する副処理を主処理に切り替えて処理を行う(failover処理)。トラフィックの処理範囲が再分割され、処理中のセッションが消えれば、各メンバの負荷は再び平均化されるが、短期的にはfailover後は処理が特定のクラスタメンバに偏る。
本実施例では、各クラスタメンバが担当するトラフィックの範囲の分割を次のように微細に定めることにより、failover後の処理負荷の偏りを低減する。
すなわち、クラスタメンバ数がnであるとき、トラフィック全体をn(n−1)個に分割する。各クラスタメンバは、主処理として、この内の(n−1)個を担当する。また、各クラスタメンバは、副処理として、他の何れかのクラスタメンバが主処理を担当する分割を(n−1)個担当する。但し、この分割は、全て異なるクラスタメンバが主処理を行っている範囲から取るようにする。
すなわち、ある副処理について、bfi,kを、クラスタメンバ1−iが処理する副処理のk個目であるとすると、
bfi=bfi,1 ∪ bfi,2∪…∪ bfi,(n−1)である。
ここで、
mfj ∩ bfi,k=φ(ただしk≠j)
bf1,i ∪...∪ bf(i−1),i ∪ bf(i+1),i ∪...∪ bfn,i=mfi
となるように、クラスタメンバ1−iの副処理範囲bfiを定める。
割り当ての例を図19に示す。
このとき、或るクラスタメンバ1−iが故障したとすると、他のクラスタメンバの副処理の内、クラスタメンバ1−iの主処理に該当する部分だけが主処理に切り替わるため、特定のメンバの主処理が片寄って増加することはなく、全メンバに均一に負荷が分散される。
また、上述した実施例では説明しなかったが、クラスタメンバの経路制御およびパケット転送の機能をL3スイッチ相当に置き換えても同様の効果を得ることができる。
以上説明した本発明にかかる第1〜第5のクラスタシステム、第1のクラスタメンバ、第1の故障復旧方法および第1のプログラムによれば、セッション情報をクラスタメンバ間で交換し合うことなく、故障復旧処理を行うことが可能になる。その結果、セッション情報をクラスタメンバ間で交換し合っていた従来の技術に比較して、故障復旧処理を迅速に行うことが可能になると共に、スケーラビリティを高くすることができる。その理由は、副処理を担当しているクラスタメンバにおいて、セッション情報の記録更新処理を行っており、主処理を担当しているクラスタメンバにおいて故障が発生した場合には、副処理を担当しているクラスタメンバが、自クラスタメンバ内に記録されているセッション情報を利用して処理を引き継ぐようにしているからである。
また、本発明にかかる第3のクラスタシステムによれば、各クラスタメンバ間でセッション情報を交換し合わなくとも、故障クラスタメンバの発生時や、新規クラスタメンバの追加時に、各クラスタメンバが担当する主処理範囲や副処理範囲を変更することが可能になる。その理由は、各クラスタメンバにおいて、範囲決定ルールに基づいて新たな主処理範囲および副処理範囲を決定し、それまでの主処理範囲および副処理範囲を旧主処理範囲および旧副処理範囲とするようにしているからである。
【図1】

【図2】

【図3】

【図4】

【図5】

【図6】

【図7】

【図8】

【図9】

【図10】

【図11】

【図12】

【図13】

【図14】

【図15】

【図16】

【図17】

【図18】

【図19】

【図20】

【図21】


【特許請求の範囲】
【請求項1】
複数のクラスタメンバから構成されるクラスタシステムにおいて、
前記各クラスタメンバが、
前記クラスタシステムに入力されたパケットの内の、自クラスタメンバが担当する主処理の範囲を示す主処理範囲或いは副処理の範囲を示す副処理範囲にマッチするパケットについて、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐ構成を有することを特徴とするクラスタシステム。
【請求項2】
請求項1のクラスタシステムにおいて、
前記主処理範囲と前記副処理範囲を、所定の範囲決定ルールに従って決定すると共に、
前記クラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、前記セッション処理とパケット転送処理とを行い、前記副処理範囲にマッチするパケットについては、前記セッション処理を行うことを特徴とするクラスタシステム。
【請求項3】
複数のクラスタメンバから構成されるクラスタシステムにおいて、
前記各クラスタメンバが、
前記クラスタシステムに入力されたパケットの内、自クラスタメンバが担当する主処理の範囲を示す主処理範囲または副処理の範囲を示す副処理範囲にマッチするパケットを通過させるトラフィック分散フィルタと、
パケットが属するセッションの状態を示すセッション情報が格納されるセッション情報保持部と、
前記トラフィック分散フィルタを通過したパケットの内の、前記主処理範囲または前記副処理範囲にマッチしたパケットについて、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行するセッション処理部と、
該セッション処理部から出力されたパケットの転送処理を行うパケット転送部と、
自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記副処理範囲を主処理範囲に変更する故障復旧部とを備えたことを特徴とするクラスタシステム。
【請求項4】
請求項3のクラスタシステムにおいて、
所定の範囲決定ルールと前記クラスタシステムを構成するクラスタメンバ数とに基づいて、自クラスタメンバが担当する主処理の範囲を示す主処理範囲および副処理の範囲を示す副処理範囲を決定する分散処理制御部を備え、
前記セッション処理部が、前記クラスタシステムに入力されたパケットの内、前記主処理範囲にマッチしたパケットについては、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行し、前記副処理範囲にマッチしたパケットについては、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行することを特徴とするクラスタシステム。
【請求項5】
請求項4記載のクラスタシステムにおいて、
前記分散処理制御部が、他のクラスタメンバにおいて故障が発生したとき、及びクラスタシステムに新たなクラスタメンバが追加されたとき、前記範囲決定ルールとクラスタメンバ数とに基づいて新たな主処理範囲および副処理範囲を決定し、それまでの主処理範囲および副処理範囲を旧主処理範囲および旧副処理範囲とし、
前記トラフィック分散フィルタが、前記クラスタシステムに入力されたパケットの内、前記新たな主処理範囲、前記新たな副処理範囲、前記旧主処理範囲または前記旧副処理範囲にマッチするパケットを通過させ、
前記セッション処理部が、前記トラフィック分散フィルタを通過したパケットの内、前記新たな主処理範囲にマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットであること、或いは前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行し、前記旧主処理範囲のみにマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットである場合には破棄し、そうでない場合には前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行し、前記新たな副処理範囲のみにマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットであること、或いは前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行し、前記旧副処理範囲のみにマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットである場合には廃棄し、そうでない場合には、前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行する構成を有することを特徴とするクラスタシステム。
【請求項6】
請求項5記載のクラスタシステムにおいて、
前記セッション処理部が、前記トラフィック分散フィルタを通過したパケットの内、前記旧副処理範囲と前記副処理範囲との両方にマッチしたパケットについては、そのパケットがセッションの開設を要求するパケットである場合には、前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット破棄処理を実行し、そうでない場合は、前記セッション情報保持部に前記パケットのセッション情報が格納されていることを条件にして前記セッション情報保持部に格納されている前記パケットのセッション情報の更新処理を含むセッション処理を実行すると共にパケット出力処理を実行する構成を有することを特徴とするクラスタシステム。
【請求項7】
請求項3又は請求項4記載のクラスタシステムにおいて、
前記各クラスタメンバが、
前記クラスタシステム中のクラスタメンバの識別子が格納されたクラスタメンバリストと、
クラスタメンバ毎の死活監視タイマと、
所定時間毎に自クラスタメンバの識別子を含む広告メッセージを他のクラスタメンバに対して送信すると共に、他のクラスタメンバからの広告メッセージを受信したとき、該広告メッセージの送信元のクラスタメンバに対応する死活監視タイマをリセットする広告メッセージ処理部とを備え、
前記分散処理制御部が、
タイムアウトした死活監視タイマが発生したとき、該タイムアウトした死活監視タイマに対応するクラスタメンバに障害が発生したと認識する構成を有することを特徴とするクラスタシステム。
【請求項8】
請求項7記載のクラスタシステムにおいて、
前記分散処理制御部が、
前記広告メッセージ処理部で受信した広告メッセージ中の識別子が前記クラスタメンバリストに含まれていなかった場合、前記識別子のクラスタメンバが追加されたと認識する構成を有することを特徴とするクラスタシステム。
【請求項9】
自クラスタメンバを構成要素とするクラスタシステムに入力されたパケットの内の、自クラスタメンバが担当する主処理の範囲を示す主処理範囲或いは副処理の範囲を示す副処理範囲にマッチするパケットについて、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐ構成を有することを特徴とするクラスタメンバ。
【請求項10】
請求項9のクラスタメンバにおいて、
前記主処理範囲と前記副処理範囲を、所定の範囲決定ルールに従って決定すると共に、
前記クラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、前記セッション処理とパケット転送処理とを行い、前記副処理範囲にマッチするパケットについては、前記セッション処理を行うことを特徴とするクラスタメンバ。
【請求項11】
複数のクラスタメンバから構成されるクラスタシステムの故障復旧方法において、
前記各クラスタメンバが、
前記クラスタシステムに入力されたパケットの内の、自クラスタメンバが担当する主処理の範囲を示す主処理範囲或いは副処理の範囲を示す副処理範囲にマッチするパケットについて、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐことを特徴とする故障復旧方法。
【請求項12】
請求項11記載の故障復旧方法であって、
所定の範囲決定ルールに従って自クラスタメンバが担当する主処理の範囲を示す前記主処理範囲および副処理の範囲を示す前記副処理範囲を決定し、前記クラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理とパケット転送処理とを行い、前記決定した副処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行うことを特徴とする故障復旧方法。
【請求項13】
コンピュータをクラスタメンバとして機能させるためのプログラムであって、
前記コンピュータを、
自クラスタメンバを構成要素とするクラスタシステムに入力されたパケットの内の、自クラスタメンバが担当する主処理の範囲を示す主処理範囲或いは副処理の範囲を示す副処理範囲にマッチするパケットについて、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行い、自クラスタメンバが副処理を担当しているパケットに対する主処理を担当しているクラスタメンバに故障が発生したとき、前記故障の発生したクラスタメンバが主処理を担当していたパケットの主処理を、前記記録してあるセッション情報を利用して引き継ぐ手段として機能させるプログラム。
【請求項14】
請求項13記載のプログラムであって、
前記コンピュータを、
所定の範囲決定ルールに従って自クラスタメンバが担当する主処理の範囲を示す前記主処理範囲および副処理の範囲を示す前記副処理範囲を決定し、前記クラスタシステムに入力されたパケットの内の、前記主処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理とパケット転送処理とを行い、前記決定した副処理範囲にマッチするパケットについては、そのパケットが属するセッションの状態を示すセッション情報の記録更新処理を含むセッション処理を行う手段として機能させることを特徴とするプログラム。

【国際公開番号】WO2005/060187
【国際公開日】平成17年6月30日(2005.6.30)
【発行日】平成19年7月12日(2007.7.12)
【国際特許分類】
【出願番号】特願2005−516288(P2005−516288)
【国際出願番号】PCT/JP2004/018090
【国際出願日】平成16年11月29日(2004.11.29)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】