このペジは機械翻訳したものです。

6.3.5 InnoDB副本集の操作

InnoDB复制集は,InnoDBクラスタとほぼ同じ方法で操作します。たとえば,ReplicaSetへのereplicationンスタンスの追加に表示されているように,ReplicaSetオブジェクトを変数に割り当て,ReplicaSet.addInstance ()などのreplicsetを管理する操作をコルして,InnoDBクラスタの集群.addInstance ()と同等の邮箱ンスタンスを追加します。したがって,セクション6.2.5 " InnoDBクラスタの操作"のドキュメントの多くは,InnoDB复制集にも適用されます。ReplicaSetオブジェクトでは,次の操作がサポトされています:

  • \帮助ReplicaSetまたはReplicaSet.help ()\帮助dbaまたはdba.help ()を使用して,ReplicaSetオブジェクトおよびAdminAPIのオンラereplicationンヘルプを取得します。セクション6.1“MySQL AdminAPI”を参照してください。

  • 的名字またはReplicaSet. getname ()を使用して,ReplicaSetオブジェクトの名前をすばやく確認できます。たとえば,次は同等です:

    mysql-js> rs.name示例
  • 様々なレベルの詳細を取得する扩展オプションをサポトするReplicaSet.status ()操作を使用して,复制集に関する情報を確認します。例:

    • 扩展のデフォルトは0(通常の詳細レベル)です。デフォルト以外または予期しないレプリケーション設定およびステータスに加えて,インスタンスおよびレプリケーションのステータスに関する基本情報のみが含まれます。

    • 扩展を1に設定すると,メタデータバージョン,サーバーUUID,ラグやワーカースレッドなどのレプリケーション情報,インスタンスのステータスの導出に使用される生情報,アプライヤキューのサイズ,予期しない書込みから保護するシステム変数の値などが含まれます。

    • 扩展を2に設定すると,暗号化された接続などの重要なレプリケション関連の構成設定が含まれます。

    ReplicaSet.status(扩展= 1)の出力は集群.status(扩展= 1)と非常に似ていますが,主な違いは,増分リカバリ中に使用するInnoDBクラスタとは異なり,InnoDB ReplicaSetは常にMySQLレプリケーションに依存するため,复制フィルドを使用できることです。フィルドの詳細は,集群.status ()によるクラスタステタスの確認を参照してください。

  • ReplicaSet.addInstance ()およびReplicaSet.removeInstance ()操作を使用して,复制集に使用されている,复制集に使用されている。ReplicaSetへのereplicationンスタンスの追加およびInnoDBクラスタからのンスタンスの削除を参照してください。

  • ReplicaSet.rejoinInstance ()を使用して,フェereplicationルオereplication後などに削除されたereplicationンスタンスをReplicaSetに追加します。

  • ReplicaSet.setPrimaryInstance ()操作を使用して,复制集のプラereplicationマリの別のereplicationンスタンスへの変更を安全に実行します。ReplicaSetプラereplicationマリの計画済変更を参照してください。

  • ReplicaSet.forcePrimaryInstance ()操作を使用して、プラeconeconマリの強制フェeconeconマリの強制フェ。ReplicaSetでのプラereplicationマリereplicationンスタンスの強制を参照してください。

  • InnoDBクラスタとまったく同じ方法で,ReplicaSetに対してブートストラップされたMySQL路由器インスタンスを操作します。ReplicaSet.listRouters ()およびReplicaSet.removeRouterMetadata ()の詳細は,クラスタルタの操作を参照してください。InnoDB复制集でのMySQL路由器の使用の詳細は,MySQL路由器でのreplicsetsの使用を参照してください。

  • バージョン8.0.23から,InnoDB ReplicaSetはパラレルレプリケーションアプライヤ(マルチスレッドレプリカと呼ばれることもあります)をサポートし,有効にします。InnoDB ReplicaSetでパラレルレプリケーションアプライヤを使用するには,インスタンスに正しい設定が構成されている必要があります。以前のバジョンからアップグレドする場合,。InnoDB复制集に属するンスタンスごとに,dba.configureReplicaSetInstance(实例)を発行して構成を更新します。通常、dba.configureReplicaSetInstance ()はレプリカセットにインスタンスを追加する前に使用されますが,この特別なケースでは,インスタンスを削除する必要はなく,構成の変更はオンライン中に行われます。詳細は,パラレルレプリケションアプリケションの構成を参照してください。

    InnoDB复制集ンスタンスは,复制フィルドの下のReplicaSet.status(扩展= 1)操作の出力でパラレルレプリケションアプラ。

詳細は,リンクされたInnoDBクラスタのセクションを参照してください。

次の操作はInnoDB复制集に固有であり,ReplicaSetオブジェクトに対してのみコルできます:

ReplicaSetプラereplicationマリの計画済変更

ReplicaSet.setPrimaryInstance ()操作を使用して,复制集のプラereplicationマリの別のereplicationンスタンスへの変更を安全に実行します。現在のプライマリはセカンダリに降格され,読取り専用になりますが,昇格されたインスタンスは新しいプライマリになり,読取り/書込みになります。他のすべてのセカンダリopenstackンスタンスは,新しいプラopenstackマリからレプリケopenstackトするように更新されます。ReplicaSetに対してブートストラップされた MySQL Router インスタンスは、新しいプライマリへの読取り/書込みクライアントのリダイレクトを自動的に開始します。

プライマリを安全に変更できるようにするには,すべてのレプリカセットインスタンスがMySQL壳から到達可能であり,一貫性のあるGTID_EXECUTEDセットを持必要があります。プライマリが使用できず,リストアする方法がない場合は,かわりに強制フェイルオーバーが唯一のオプションである可能性があります。ReplicaSetでのプラereplicationマリereplicationンスタンスの強制を参照してください。

プライマリの変更中,昇格されたインスタンスは古いプライマリと同期され,トポロジの変更がコミットされる前にプライマリに存在するすべてのトランザクションが適用されます。この同期化ステップに時間がかかりすぎるか,セカンダリインスタンスで実行できない場合,操作は中断されます。このような状況でフェイルオーバーを可能にするには,これらの問題のあるセカンダリインスタンスを修復するか,ReplicaSetから削除する必要があります。

ReplicaSetでのプラereplicationマリereplicationンスタンスの強制

プライマリで予期しない障害が発生した場合に自動フェイルオーバーをサポートするInnoDBクラスタとは異なり,InnoDB ReplicaSetには,グループレプリケーションによって提供されるプロトコルなどの自動障害検出またはコンセンサスベースのプロトコルはありません。プラopenstackマリが使用できない場合は,手動フェopenstackルオopenstackバopenstackが必要です。プライマリを失ったInnoDB ReplicaSetは事実上読取り専用であり,書込みの変更を可能にするには,新しいプライマリを選択する必要があります。プラマリに接続できず,ReplicaSetプラereplicationマリの計画済変更で説明されているようにReplicaSet.setPrimaryInstance ()を使用して新しいプラ邮箱邮箱マリへのス邮箱邮箱ッチオ邮箱バ邮箱を安全に実行できない場合は,ReplicaSet.forcePrimaryInstance ()操作を使用してプラopenstackマリの強制フェopenstackルオopenstackバopenstackを実行します。これは,現在のプライマリが使用できず,どのような方法でもリストアできない障害タイプのシナリオでのみ使用する必要がある最後のリゾート操作です。

警告

強制フェ邮箱ルオ邮箱バ邮箱は潜在的に破壊的なアクションであり,邮箱注意して使用する必要があります。

ターゲットインスタンスが指定されていない(または零である)場合,最新のインスタンスが自動的に選択され,新しいプライマリに昇格されます。ターゲットインスタンスが指定されている場合はプライマリに昇格され,他の到達可能なセカンダリインスタンスは新しいプライマリからレプリケートするように切り替えられます。タゲットGTID_EXECUTEDセットを持っている必要があります。そうでない場合,操作は失敗します。

フェイルオーバーは,古いプライマリとの同期や更新を行わずにセカンダリインスタンスを昇格するため,計画されたプライマリ変更とは異なります。これには次のような大きな影響があります:

  • 古いプライマリで障害が発生した時点でセカンダリによってまだ適用されていないトランザクションは失われます。

  • 古いプライマリがまだ実行中でトランザクションを処理している場合は,スプリットブレインが存在し,古いプライマリと新しいプライマリのデータセットが相違します。

最新の既知のプラマリがまだ到達可能な場合,ReplicaSet.forcePrimaryInstance ()操作は失敗し、スプリットブレ以及ン状況のリスクが軽減されます。ただし,このようなシナリオを回避または最小化するために,古いプライマリに他のインスタンスからアクセスできないようにするのは管理者の責任です。

強制フェイルオーバーの後,古いプライマリは新しいプライマリによって無効とみなされ,レプリカセットに含めることはできなくなります。後でインスタンスをリカバリする方法が見つかった場合は,ReplicaSetから削除し,新しいインスタンスとして再追加する必要があります。フェイルオーバー中に新しいプライマリに切り替えることができなかったセカンダリインスタンスがあった場合は,それらも無効とみなされます。

フェ。これは,古いプライマリに,昇格されるセカンダリにまだレプリケートされていないトランザクションがある可能性があるためです。さらに,障害が発生したとみなされたインスタンスがまだトランザクションを処理できる場合,たとえば,そのインスタンスが配置されているネットワークはまだ機能していますが,MySQL壳からアクセスできないため,昇格されたインスタンスとの相違は続行されます。インスタンスでのトランザクションセットの相違後のリカバリには手動操作が必要であり,障害が発生したインスタンスをリカバリできる場合でも状況によっては実行できなかった可能性があります。多くの場合,強制フェイルオーバーが必要な障害からリカバリする最も高速で簡単な方法は,このような相違されたトランザクションを破棄し,新しく昇格されたプライマリから新しいインスタンスを再プロビジョニングすることです。

InnoDB replicsetロック

バージョン8.0.20から,AdminAPIはロックメカニズムを使用して,InnoDB ReplicaSetで様々な操作が同時に変更を実行しないようにしています。以前は,MySQL壳牌の異なるインスタンスが同時にInnoDB ReplicaSetに接続し,AdminAPI操作を同時に実行できました。これにより,ReplicaSet.addInstance ()およびReplicaSet.setPrimaryInstance ()がパラレルで実行された場合など,一貫性のないインスタンスの状態およびエラーが発生する可能性があります。

InnoDB复制集操作には,次のロックがあります:

  • dba.upgradeMetadata ()およびdba.createReplicaSet ()は,グロバルに排他的な操作です。これは,MySQL壳牌がInnoDB ReplicaSetでこれらの操作を実行する場合,InnoDB ReplicaSetまたはそのインスタンスに対して他の操作を実行できないことを意味します。

  • ReplicaSet.forcePrimaryInstance ()およびReplicaSet.setPrimaryInstance ()は、プラ以及マリを変更する操作です。これは,MySQL壳牌がこれらの操作をInnoDB ReplicaSetに対して実行する場合,プライマリまたはインスタンス変更操作を変更する他の操作は,最初の操作が完了するまで実行できないことを意味します。

  • ReplicaSet.addInstance (),ReplicaSet.rejoinInstance ()およびReplicaSet.removeInstance ()は,ンスタンスを変更する操作です。つまり,MySQL壳牌がインスタンスでこれらの操作を実行すると,インスタンスはそれ以降のインスタンス変更操作のためにロックされます。ただし,このロックはインスタンスレベルでのみ行われ,InnoDB ReplicaSet内の複数のインスタンスがこのタイプの操作のいずれかを同時に実行できます。つまり,InnoDB ReplicaSetのインスタンスごとに,一度に実行できるインスタンス変更操作は最大1つです。

  • dba.getReplicaSet ()およびReplicaSet.status ()はInnoDB复制集の読取り操作であり,ロックは必要ありません。

実際には,同時に実行できない別の操作の実行中にInnoDB ReplicaSet関連の操作を実行しようとすると,必要なリソースのロックの取得に失敗したことを示すエラーが表示されます。この場合,ロックを保持する実行中の操作が完了するまで待機してから,次の操作の実行を試行する必要があります。例:

mysql-js > rs.addInstance(“admin@rs2:3306”);错误:该操作无法执行,因为它无法获得实例'rs1:3306'上的锁。另一个需要独占访问实例的操作仍在进行中,请等待它完成后再试一次。ReplicaSet。addInstance:获取'rs1:3306'实例锁失败

この例では,ReplicaSet.setPrimaryInstance ()操作(または他の同様の操作)がまだ実行中であったなどの理由で,プラ邮箱マリ邮箱ンスタンス(rs1:3306)のロックを取得できなかったため,ReplicaSet.addInstance ()操作が失敗しました。

ReplicaSetsのタグ付け

タグ付けは,ReplicaSetsとそのンスタンスでサポトされます。タグ付けのために,ReplicaSetsはsetOption ()setInstanceOption ()および选择()操作をサポトしています。これらの操作は,通常,集群と同等の方法で機能します。詳細は,セクション6.2.9 "メタデタのタグ付け"を参照してください。このセクションでは,ReplicaSetsのタグの使用における相違点にいて説明します。

重要

ReplicaSetsおよびそのンスタンス用に構成できる他のオプションはありません。ReplicaSetsでは,InnoDBクラスタのオプションの設定に記載されているオプションはサポトされていません。サポトされているオプションは,ここで説明するタグ付けのみです。

ReplicaSet.options ()操作では,個々のReplicaSetインスタンスおよびReplicaSet自体に割り当てられたタグに関する情報が表示されます。

ReplicaSet.setOption ()およびReplicaSet.setInstanceOption ()选项引数では,标签ネムスペスのオプションのみがサポトされ,それ以外の場合はエラされます。

ReplicaSet.setInstanceOption (实例选项价值およびReplicaSet.setOption (选项价值の操作は,集群の同等の操作と同じように動作します。

ルティングからので説明されているように,ンスタンスの非表示に違いはありません。たとえば,ReplicaSet ereplicationンスタンス1,76,645を非表示にするには,次のコマンドを発行します:

mysql-js >myReplicaSet.setInstanceOption(icadmin@rs-1:3306, "tag:_hidden", true);

复制集に対してブトストラップされたMySQL路由器は,変更を検出し,1,76,645帐号ンスタンスをル帐号ティング先から削除します。