MySQL 8.0 リファレンスマニュアル


18.1.1.2 グループレプリケーション

グループレプリケーションは、フォルトトレラントシステムの実装に使用できる手法です。 レプリケーショングループは、それぞれ独自のデータのコピー全体 (共有なしレプリケーションスキーム) を持ち、メッセージを渡して相互作用する一連のサーバーです。 通信レイヤーは、アトミックメッセージや合計オーダーメッセージ配信などの一連の保証を提供します。 これらは非常に強力なプロパティで、非常に有用な抽象化に変換され、より高度なデータベースレプリケーションソリューションを構築するために再ソートできます。

MySQL Group Replication は、このようなプロパティおよび抽象化に基づいて構築され、どこにいてもマルチソース更新を実装します。 レプリケーショングループは複数のサーバーによって形成され、グループ内の各サーバーはいつでも個別にトランザクションを実行できます。 ただし、すべての読取り/書込みトランザクションは、グループによって承認された後にのみコミットされます。 つまり、読取り/書込みトランザクションの場合、グループはコミットするかどうかを決定する必要があるため、コミット操作は元のサーバーからの一方向の決定ではありません。 読取り専用トランザクションでは、グループ内で調整を行う必要はなく、即時にコミットされます。

元のサーバーで読取り/書込みトランザクションをコミットする準備が整うと、サーバーは書込み値 (変更された行) および対応する書込みセット (更新された行の一意の識別子) を原子的にブロードキャストします。 トランザクションは原子性ブロードキャストを介して送信されるため、グループ内のすべてのサーバーがトランザクションを受信するか、まったく受信しないかのいずれかです。 受信した場合、すべてが以前に送信された他のトランザクションに関して同じ順序で受信します。 したがって、すべてのサーバーが同じ順序で同じトランザクションセットを受信し、トランザクションに対してグローバルな合計順序が確立されます。

ただし、異なるサーバーで同時に実行されるトランザクション間で競合が発生する可能性があります。 このような競合は、動作保証と呼ばれるプロセスで、異なるトランザクションと同時トランザクションの書込みセットを調べて比較することで検出されます。 動作保証中に、競合検出が行レベルで実行されます: 異なるサーバーで実行される 2 つの同時トランザクションが同じ行を更新すると、競合が発生します。 競合解決手順では、順序付けされたトランザクションが最初にすべてのサーバーでコミットされ、次に順序付けされたトランザクションは中断されるため、元のサーバーでロールバックされ、グループ内の他のサーバーによって削除されます。 たとえば、t1 と t2 が異なるサイトで同時に実行され、両方とも同じ行が変更され、t2 が t1 の前に順序付けされている場合、t2 は競合を優先し、t1 はロールバックされます。 これは、実際には分散された最初のコミット優先ルールです。 2 つのトランザクションが競合の頻度が高くなるようにバインドされている場合は、それらを同じサーバーで起動することをお薦めします。この場合、証明の結果としてロールバックされるのではなく、ローカルロックマネージャで同期化する機会があります。

動作保証されたトランザクションを適用および外部化するために、グループレプリケーションでは、一貫性と有効性が損なわれない場合に、サーバーがトランザクションの合意された順序から逸脱することを許可します。 グループレプリケーションは最終的な一貫性システムです。つまり、受信トラフィックの速度が低下または停止するとすぐに、すべてのグループメンバーのデータコンテンツが同じになります。 トラフィックのフロー中に、トランザクションを若干異なる順序で外部化したり、一部のメンバーで外部化したりできます。 たとえば、マルチプライマリモードでは、証明書の直後にローカルトランザクションが外部化される場合がありますが、以前はグローバル順序になっていたリモートトランザクションはまだ適用されていません。 これは、トランザクション間に競合がないことが証明プロセスによって確立された場合に許可されます。 単一プライマリモードでは、プライマリサーバーで、競合しない同時ローカルトランザクションが、グループレプリケーションによって合意されたグローバル順序とは異なる順序でコミットおよび外部化される可能性があります。 クライアントからの書込みを受け入れないセカンダリでは、トランザクションは常に合意された順序でコミットおよび外部化されます。

次の図に、MySQL Group Replication プロトコルを示します。これを MySQL Replication (または MySQL 準同期レプリケーション) と比較すると、いくつかの違いがわかります。 わかりやすくするために、基礎となるコンセンサスおよび Paxos 関連のメッセージの一部がこの写真にありません。

図 18.3 MySQL グループレプリケーションプロトコル

ソース 1 が受信したトランザクションが実行されます。 次に、ソース 1 は、それ自体、ソース 2 およびソース 3 で構成されるメッセージをレプリケーショングループに送信します。 3 つのメンバーすべてがコンセンサスに到達すると、トランザクションが認証されます。 次に、ソース 1 はトランザクションをバイナリログに書き込み、コミットして、クライアントアプリケーションにレスポンスを送信します。 ソース 2 および 3 は、トランザクションをリレーログに書き込み、それを適用してバイナリログに書き込み、コミットします。


関連キーワード:  グループ, トランザクション, サーバー, リカバリ, 分散, 順序, コミット, 競合, 書込み, 保証