グループレプリケーション分散リカバリプロセスには、プロセス中に問題が発生した場合にフォルトトレランスを確保するためのいくつかの組込みメジャーがあります。
分散リカバリのドナーは、現在のビューの適切なオンライングループメンバーの既存のリストからランダムに選択されます。 ランダムドナーを選択することは、複数のメンバーがグループに入るときに同じサーバーが複数回選択されない可能性があることを意味します。 MySQL 8.0.17 からは、バイナリログからの状態転送の場合、ジョイナは、それ自体と比較して下位または同等のパッチバージョンの MySQL Server を実行しているドナーのみを選択します。 以前のリリースでは、すべてのオンラインメンバーがドナーになることが許可されていました。 リモートクローニング操作の場合、ジョイナは、それ自体と同じパッチバージョンを実行しているドナーのみを選択します。 結合メンバーは、操作の最後に再起動すると、バイナリログからの状態転送用に新しいドナーとの接続を確立します。これは、リモートクローニング操作に使用される元のドナーとは異なるメンバーである可能性があります。
次の状況では、Group Replication は分散リカバリのエラーを検出し、新しいドナーに自動的にスイッチオーバーして、状態転送を再試行します:
接続エラー - 候補者ドナーへの接続に認証の問題があるか、別の問題があります。
レプリケーションエラー - バイナリログからの状態転送に使用されているレプリケーションスレッド (受信側スレッドまたは適用側スレッド) のいずれかが失敗します。 この状態転送方法では既存の MySQL レプリケーションフレームワークが使用されるため、一時的なエラーによってレシーバスレッドまたはアプライヤスレッドでエラーが発生する可能性があります。
リモートクローニング操作エラー - リモートクローニング操作が失敗するか、完了する前に停止します。
ドナーがグループから離れる - ドナーはグループを離れるか、状態転送の進行中にドナーで Group Replication が停止します。
「パフォーマンススキーマ」テーブル replication_applier_status_by_worker
に、最後の再試行の原因となったエラーが表示されます。 このような状況では、エラーに続く新しい接続が新しい候補者ドナーで試行されます。 エラーが発生した場合に別のドナーを選択することは、新しい候補者ドナーに同じエラーがない可能性があることを意味します。 クローンプラグインがインストールされている場合、Group Replication は、適切なオンラインクローンサポートドナーをそれぞれ最初に使用してリモートクローニング操作を試みます。 これらの試行がすべて失敗した場合、グループレプリケーションはバイナリログからの状態転送を、可能であればすべての適切なドナーとともに順に試行します。
リモートクローニング操作の場合、リモートクローニング操作でドナーからのデータの転送が開始される前に、受信者 (参加メンバー) のユーザー作成のテーブルスペースおよびデータが削除されます。 リモートクローニング操作が開始しても完了しない場合、参加メンバーは元のデータファイルの一部またはユーザーデータなしで残される可能性があります。 データが完全にクローニングされる前にクローニング操作が停止した場合、ドナーによって転送されたデータは受信者から削除されます。 この状況は、Group Replication が自動的に行うクローニング操作を再試行することで修復できます。
次の状況では、分散リカバリプロセスを完了できず、参加メンバーはグループを離れます:
パージ済トランザクション - 参加メンバーに必要なトランザクションがオンライングループメンバーのバイナリログファイルに存在せず、リモートクローニング操作でデータを取得できません (クローンプラグインがインストールされていないか、クローニングが可能なすべてのドナーで試行されたが失敗したため)。 したがって、参加メンバーはグループをキャッチアップできません。
競合するトランザクション - 結合メンバーには、グループに存在しないトランザクションがすでに含まれています。 リモートクローニング操作が実行された場合、結合メンバーのデータディレクトリが消去されるため、これらのトランザクションは削除されて失われます。 ドナーバイナリログからの状態転送が実行された場合、これらのトランザクションはグループトランザクションと競合する可能性があります。
接続再試行制限に達しました - 参加メンバーは、接続再試行制限で許可されているすべての接続試行を行いました。 これは、
group_replication_recovery_retry_count
システム変数を使用して構成できます (セクション18.4.3.3「分散リカバリの構成」 を参照)。ドナーはこれ以上いません - 参加メンバーは、オンラインクローンがサポートする各ドナーとのリモートクローニング操作を順に試行し (クローンプラグインがインストールされている場合)、可能であれば適切な各オンラインドナーを使用してバイナリログからの状態転送を正常に試行しませんでした。
参加メンバーはグループから退出 - 参加メンバーはグループを離れるか、状態転送の進行中に参加メンバーで Group Replication が停止します。
参加メンバーが意図せずグループを離れた場合、最後のメンバーを除く前述の状況では、group_replication_exit_state_action
システム変数で指定されたアクションの実行に進みます。