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


18.4.3 分散リカバリ

メンバーがレプリケーショングループに参加したり、レプリケーショングループに再度参加したりする場合は、参加前または退席中にグループメンバーによって適用されたトランザクションをキャッチアップする必要があります。 このプロセスは分散リカバリと呼ばれます。

参加メンバーは、グループからすでに受信したがまだ適用されていないトランザクションについて、その group_replication_applier チャネルのリレーログを確認することから始まります。 結合メンバーが以前にグループに属していた場合は、そのメンバーが残ってから未適用のトランザクションが見つかる可能性があります。その場合は、これらを最初のステップとして適用します。 グループの新規メンバーには適用するものがありません。

その後、参加メンバーはオンラインの既存のメンバーに接続して状態の転送を実行します。 参加メンバーは、既存のメンバー (ドナーと呼ばれる) によって提供されている、参加前または退席中にグループで発生したすべてのトランザクションを転送します。 次に、参加メンバーは、この状態の転送の進行中にグループで行われたトランザクションを適用します。 このプロセスが完了すると、参加メンバーはグループ内の残りのサーバーで捕捉され、グループへの通常の参加を開始します。

グループレプリケーションでは、分散リカバリ中の状態転送に次の方法の組合せを使用します:

  • クローンプラグイン機能を使用したリモートクローニング操作 (MySQL 8.0.17 から使用可能)。 この状態転送方法を有効にするには、グループメンバーと参加メンバーにクローンプラグインをインストールする必要があります。 Group Replication は、必要なクローンプラグイン設定を自動的に構成し、リモートクローニング操作を管理します。

  • ドナーバイナリログからレプリケートし、参加メンバーにトランザクションを適用します。 この方法では、ドナーと参加メンバーの間に確立された group_replication_recovery という名前の標準非同期レプリケーションチャネルを使用します。

グループレプリケーションでは、参加メンバーに対して START GROUP_REPLICATION を発行した後、これらの方法の最適な組合せが状態転送に自動的に選択されます。 これを行うために、グループレプリケーションでは、ドナーとして適切な既存のメンバー、ドナーからの参加メンバーに必要なトランザクションの数、およびグループメンバーのバイナリログファイルに必要なトランザクションが存在しなくなったかどうかがチェックされます。 参加メンバーと適切なドナーの間のトランザクションギャップが大きい場合、または一部の必要なトランザクションがドナーのバイナリログファイルにない場合、Group Replication はリモートクローニング操作で分散リカバリを開始します。 大きなトランザクションギャップがない場合、またはクローンプラグインがインストールされていない場合、Group Replication はドナーのバイナリログからの状態転送に直接進みます。

  • リモートクローニング操作中に、参加メンバーの既存のデータが削除され、ドナーデータのコピーに置き換えられます。 リモートクローニング操作が完了し、参加メンバーが再起動すると、ドナーのバイナリログから状態転送が実行され、リモートクローニング操作の進行中にグループが適用したトランザクションが取得されます。

  • ドナーのバイナリログからの状態転送中に、結合メンバーはドナーのバイナリログから必要なトランザクションを複製して適用し、受信されたトランザクションを、結合メンバーがグループに参加したことをバイナリログが記録するポイント (ビュー変更イベント) まで適用します。 これが進行中の場合、参加メンバーはグループが適用する新しいトランザクションをバッファします。 バイナリログからの状態転送が完了すると、結合メンバーはバッファートランザクションを適用します。

参加メンバーは、すべてのグループトランザクションで最新の状態である場合、オンラインとして宣言され、通常のメンバーとしてグループに参加でき、分散リカバリが完了します。

ヒント

バイナリログからの状態転送は、分散回復のためのグループレプリケーションベースメカニズムであり、レプリケーショングループ内のドナーおよび参加メンバーがクローニングをサポートするように設定されていない場合は、これが唯一使用可能なオプションです。 バイナリログからの状態転送はクラシック非同期レプリケーションに基づいているため、グループに参加しているサーバーにグループデータがまったくない場合、または非常に古いバックアップイメージから取得されたデータがある場合は、非常に長い時間がかかることがあります。 したがって、この状況では、サーバーをグループに追加する前に、グループ内にすでに存在するサーバーのかなり最近のスナップショットを転送して、グループデータを使用して設定することをお勧めします。 これにより、分散リカバリにかかる時間が最小限に抑えられ、保持および転送が必要なバイナリログファイルが少なくなるため、ドナーサーバーへの影響が軽減されます。


関連キーワード:  グループ, 分散, リカバリ, トランザクション, メンバー, 転送, 状態, ドナー, 適用, バイナリ