各複製の操作の追跡

複製ファミリー内の変更は、各複製ごとに追跡されます。 そのため、oplog の項目には、その操作を引き起こした複製の識別情報が含まれます。 したがって、複製ファミリーの履歴は、複数の oplog 項目のスタックとして表示されます。 各スタックは、その複製で発生した操作の oplog ID を、線形的順序で表示したものです。
非複製 データベースの履歴は、操作を線形的順序で示したものです (図 1)。
図 1. データベースの変更履歴
図 2 は、ファミリー内の 2 つの複製の状態を示します。

複製は、その複製の操作に関してのみ、正確なデータを所持します。 他の複製に関する情報は、更新パケットを受信するまで無効です。 例えば、複製 boston_hub は 950 のローカル操作を記録しますが、504 の sanfran_hub 操作の更新パケットしか受信していません。 同様に、複製 sanfran_hub は 702 のローカル操作を記録しますが、791 の boston_hub 操作の更新パケットしか受信していません。

図 3 はこのシナリオを示しています。 ここでは、どの複製も、他の複製で発生した操作については無効です。
図 3. 無効な複製
図 3 に示されている、oplog スタックのセットである複製ファミリーを図にすることで、同期化処理を容易に理解することができます。例えば、複製 boston_hub から複製 sanfran_hub に送信される更新パケットは、複製 boston_hub のスタックに対する増分 (操作 792 から 950) で構成されます。図 4 は 2 つの増分を示しています。 sanfran_hub にとって自己の状態は明らかなため、他の複製で発生した操作のみ、更新が必要です。 (いくつかのエラー リカバリ状態においては、その複製そのものの操作に関するデータのリセットが必要です。)
図 4. 2 つの複製間の更新
注: パケットが sanfran_hub にインポートされるまでに、boston_hub にさらに変更が加えられる可能性があります。 それらの変更は、更新パケットには含まれません。
関連概念
MultiSite 操作のトラブルシューティング

フィードバック