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