ページ

2010年6月28日月曜日

JGroupsを利用したクラスタ関連 ~その四 マージの仕組み ~

パーティションの結合(MERGE2)
~ MERGEは、通信障害によって分裂した複数のマルチキャストグループを
1つに結合する仕組みです。
FDやFD_SOCKにより障害検知されたメンバーはグループから除外される事に
なりますが、再度、通信可能な状態となると、本処理により再びグループに
参加することが出来ます。
ここでは、コーディネーターAからみた視点で記述しています。

http://4.bp.blogspot.com/_zS8mtozF-q8/TCir8B8FbtI/AAAAAAAAACA/MxXhuf8J82Q/s1600/jgroups_merge_image1.JPG

コーディネーターであるメンバーAが通信不能となった場合、
マルチキャストグループは2つのパーティション([A],[B,C])
に分割されます。

この場合、メンバーAとメンバーBがコーディネーターとなり、
各パーティションのコーディネーターとなります。

この状態において、再度、通信可能な状態になると、
2つに分裂していたパーティションが1つになる為、
1つのパーティション内に2つのコーディネーターが
存在する事になります。

コーディネーターは、定期的にGET_MBRS_REQを送信して、
現在のコーディネーターを調査し、コーディネーターが
自分だけであるという事を確認しています。

GET_MBRS_RSPメッセージによって、自分以外のコーディネーターが
他に存在していると知ると、2つのコーディネーターを結合する為の
マージ処理が行われます。

この場合、メンバーAとBの2つのコーディネーターが存在する事になり、
マージリーダー(※1)に対してもうひとりのコーディネーターが
結合される事になります。

----------------------------------------------------------------
※1.マージリーダーとは
2つのコーディネーターが存在していた場合、「IPアドレス:ポート」
を昇順にソートした時の先頭になるコーディネーターが、マージリーダーとなり、
マージリーダー以外のコーディネーターは、マージリーダーのメンバーとなります。
----------------------------------------------------------------

マージリーダー(コーディネーターA)は、コーディネーターBに対して
MERGE_REQメッセージを送信します。
MERGE_REQメッセージを受信したコーディネーターBは、
自分のもっているメンバーリストをMERGE_RSPメッセージとしてメンバーAに
返信します。

メンバーリストを受信したメンバーAは、自分のメンバーリストとメンバーCが
持っていたメンバーリストを結合し、最新のメンバーリストを作成後、
すべてのメンバーに対してVIEWを送信します。

0 件のコメント:

コメントを投稿