MySQL グループレプリケーション(MGR)は、既存のバイナリロギングメカニズムと Paxos プロトコルに基づいて MySQL によって提供される分散レプリケーションモードです。MGR モードは、ApsaraDB RDS for MySQL の RDS クラスタエディションでサポートされています。RDS クラスタエディションを実行する ApsaraDB RDS for MySQL インスタンスは、RDS クラスタと呼ばれます。このトピックでは、RDS クラスタのレプリケーションモードを MGR に設定する方法について説明します。
背景情報
MGR モードを使用する RDS クラスタは、Paxos プロトコルに基づいて自己管理を実装できます。これにより、高いデータ信頼性と強力なデータ整合性を確保できます。プライマリ/セカンダリレプリケーションモードと比較して、MGR モードには次の利点があります。
強力なデータ整合性:MGR モードを使用する RDS クラスタは、自己管理を実装できます。RDS クラスタのプライマリノードに障害が発生した場合、システムは自動的に障害が発生したノードを削除し、プライマリ/セカンダリスイッチオーバーを実行します。スイッチオーバーが完了した後、プライマリノードとセカンダリノードのデータは一貫性を保ちます。
高いデータ信頼性:MGR モードでは、RDS クラスタのプライマリノードでトランザクションをコミットする場合、システムがトランザクションのデータをセカンダリノードに送信し、セカンダリノードの大部分がデータを受信することを確認します。これにより、データ損失を防ぎます。
強力なグローバルトランザクション整合性:MGR モードは、ノード間の読み取りおよび書き込み操作に対してグローバル整合性を提供します。 group_replication_consistency パラメータを使用して、ビジネス要件に基づいて読み取りおよび書き込み操作の整合性レベルを指定できます。
グローバル読み取り整合性:RDS クラスタのセカンダリノードのセッションに対して、group_replication_consistency パラメータを BEFORE に設定できます。この場合、セカンダリノードでクエリを実行すると、必要なトランザクションがプライマリノードに適用された後にのみクエリが実行されます。必要なトランザクションとは、セカンダリノードで実行されるクエリの前に実行されるクエリに関連するトランザクションを示します。
グローバル書き込み整合性:RDS クラスタのプライマリノードのセッションに対して、group_replication_consistency パラメータを AFTER に設定できます。その後、プライマリノードに書き込みトランザクションをコミットできます。トランザクションが RDS クラスタ内のすべてのノードに適用された後、システムはトランザクションがプライマリノードに正常にコミットされたことを通知します。
Majority:RDS クラスタ内のノードの半分以上を指定します。
シナリオ
MGR は、金融、E コマース、コアートランザクションシステムなど、強力なデータ整合性と高いデータ信頼性を必要とするビジネスシナリオに適しています。
前提条件
RDS インスタンスは次の要件を満たしています。
RDS エディション:RDS インスタンスは RDS クラスタエディションを実行しています。
RDS インスタンスを RDS High-availability Edition から RDS クラスタエディションにアップグレードする方法の詳細については、「RDS エディションを RDS High-availability Edition から RDS クラスタエディションにアップグレードする」をご参照ください。
エンジンバージョン:RDS クラスタのメジャーエンジンバージョンは MySQL 8.0 で、マイナーエンジンバージョンは 20221231 以降です。マイナーエンジンバージョンの更新方法の詳細については、「マイナーエンジンバージョンを更新する」をご参照ください。
ストレージエンジン:ストレージエンジンは InnoDB です。
メモリ容量:RDS クラスタのメモリ容量は 8 GB 以上です。仕様のアップグレード方法の詳細については、「インスタンスの仕様を変更する」をご参照ください。
ノード数:RDS クラスタ内のノード数は、3 以上の奇数です。
ノードの仕様:各ノードの仕様は同じである必要があります。
データベースプロキシバージョン:RDS クラスタでデータベースプロキシ機能が有効になっている場合、データベースプロキシバージョンは Maxscale_MySQL_2.2.12_20230302 以降です。データベースプロキシバージョンのアップグレード方法の詳細については、「データベースプロキシバージョンをアップグレードする」をご参照ください。
製品タイプ:RDS クラスタの製品タイプは標準です。
ApsaraDB RDS コンソールにログインし、RDS クラスタの 基本情報 ページに移動して、RDS エディション、メジャーエンジンバージョン、インスタンスタイプなどの情報を表示できます。
制限事項
MGR モードは、X-Engine テーブルを含む RDS クラスタには使用できません。
次の SQL 文を実行して、RDS クラスタに X-Engine テーブルが存在するかどうかを確認できます。値 0 が返された場合、RDS クラスタには X-Engine テーブルは存在しません。
SELECT COUNT(1) FROM information_schema.TABLES WHERE ENGINE = 'xengine' AND table_schema NOT IN( 'information_schema', 'performance_schema', 'mysql', 'test', 'sys', '__recycle_bin__' );/* RDSクラスタにX-Engineテーブルが存在するかどうかを確認するSQL文 */
MGR モードは、プライマリキーのないテーブルを含む RDS クラスタには使用できません。
次の SQL 文を実行して、RDS クラスタにプライマリキーのないテーブルが存在するかどうかを確認できます。クエリ結果が 0 の場合、RDS クラスタ内のすべてのテーブルにプライマリキーが含まれていることを示します。
SELECT COUNT(1) AS count FROM information_schema.TABLES t1 LEFT OUTER JOIN information_schema.columns t2 ON t1.table_schema = t2.TABLE_SCHEMA AND t1.table_name = t2.TABLE_NAME AND t2.COLUMN_KEY = 'PRI' WHERE t2.table_name IS NULL AND t1.table_type = 'BASE TABLE' AND t1.TABLE_SCHEMA NOT IN( 'information_schema', 'performance_schema', 'mysql', 'sys' );/* RDSクラスタにプライマリキーのないテーブルが存在するかどうかを確認するSQL文 */
MGR モードの制限事項の詳細については、公式 Web サイトの「要件と制限事項」をご参照ください。
影響
データレプリケーションモードを非同期または準同期から MGR に変更すると、インスタンスのスイッチオーバーが発生します。オフピーク時にデータレプリケーションモードを変更することをお勧めします。アプリケーションが RDS クラスタに自動的に再接続するように構成されていることを確認してください。インスタンスのスイッチオーバーの影響の詳細については、「インスタンスのスイッチオーバーの影響」をご参照ください。
実装
MGR は、Paxos プロトコルに基づいて開発された分散レプリケーションモードです。詳細については、「MGR モードの概要」をご参照ください。
使用上の注意
MGR モードは、非同期レプリケーションモードよりもパフォーマンスが低く、非同期および準同期レプリケーションモードよりも多くのメモリリソースを消費します。MGR モードを使用する前に、パフォーマンスに敏感なワークロードまたはリソースに敏感なワークロードでテストを実行することをお勧めします。
MGR モードを使用する RDS クラスタの安定性を確保するために、次のパラメータ設定が使用されます。
disabled_storage_engines=MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY,XENGINE gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON binlog_format=ROW slave_preserve_commit_order=ON rpl_semi_sync_master_enabled=OFF rpl_semi_sync_slave_enabled=OFF master_info_repository=TABLE relay_log_info_repository=TABLE binlog_transaction_dependency_tracking=WRITESET transaction_write_set_extraction=XXHASH64 slave_parallel_type=LOGICAL_CLOCK replication_communication_stack=MYSQL group_replication_single_primary_mode=ON group_replication_paxos_single_leader=ON group_replication_consistency=BEFORE_ON_PRIMARY_FAILOVER /* MGRモードを使用するRDSクラスタの安定性を確保するためのパラメータ設定 */
課金ルール
MGR モードの使用については課金されません。
手順
新しい RDS クラスタで MGR モードを有効にする
RDS クラスタを作成する際は、[パラメータテンプレート] パラメータを [MySQL_InnoDB_8.0_RDS Cluster Edition_MGR パラメータテンプレート] に設定します。RDS クラスタが作成されると、RDS クラスタに対して MGR モードが有効になります。
既存の RDS クラスタのレプリケーションモードを MGR に変更する
既存の RDS クラスタの 基本情報 ページの インスタンストポロジ管理 セクションで、同期モードを変更 をクリックします。表示されるダイアログボックスで、データレプリケーションモード パラメーターに MGR を選択し、確認 をクリックします。
MGR モードを非同期または準同期レプリケーションモードに変更することもできます。
FAQ
RDS クラスタのデータレプリケーションモードを MGR モードから非同期または準同期レプリケーションモードに変更できますか?
はい、RDS クラスタのデータ レプリケーションモードを MGR モードから非同期または準同期レプリケーションモードに変更できます。非同期レプリケーション、準同期レプリケーション、および MGR モードを切り替えることができます。RDS クラスタのレプリケーションモードを変更するには、次の操作を実行します。RDS クラスタの 基本情報 ページに移動し、インスタンストポロジ管理 セクションの 同期モードを変更 をクリックします。表示されるダイアログボックスで、必要なレプリケーションモードを選択します。
MGR モードを使用している場合、RDS クラスタのセカンダリノードは読み取りリクエストを処理できますか?
はい、MGR モードを使用している場合、RDS クラスタのセカンダリノードは読み取りリクエストを処理できます。MGR モードは、Paxos プロトコルを使用して、RDS クラスタ内のノード間でデータをレプリケートします。RDS クラスタのセカンダリノードが過負荷になっている場合、プライマリノードの書き込みパフォーマンスに影響します。読み書き分離を実装するには、データベースプロキシ機能を有効にすることをお勧めします。データベースプロキシ機能を使用すると、RDS クラスタの読み取り重みとレプリケーションレイテンシしきい値を構成できます。これにより、RDS クラスタのセカンダリノードが過負荷になるのを防ぎます。
MGR モードを使用する RDS クラスタはマルチプライマリモードをサポートしていますか?
いいえ、MGR モードを使用する RDS クラスタはマルチプライマリモードをサポートしていません。MGR モードは、1 つのプライマリノードを含む RDS クラスタでのみサポートされています。マルチプライマリモードの RDS クラスタの安定性は低いです。ノードのジッターまたは障害は、RDS クラスタの可用性に影響します。
MGR モードを使用する RDS クラスタのメモリ容量は 8 GB 以上である必要があります。なぜですか?
MGR モードが有効になると、XCom メッセージを格納するために約 1 GB のメモリを占有するキャッシュが XCom レイヤーで維持されます。MGR モードのトランザクション認証モジュールは、特定量のメモリを占有する認証情報配列を維持します。MGR モードを使用すると、追加のバックグラウンドスレッドが有効になります。スレッドは特定量のメモリを消費します。RDS クラスタのメモリ容量が 8 GB 未満の場合、大量のメモリが占有されると、メモリ不足(OOM)エラーが発生します。たとえば、多数のクエリが実行されます。したがって、MGR モードが有効になっている RDS クラスタには、大量のメモリリソースを提供するインスタンスタイプを選択することをお勧めします。
MGR モードが有効になっている場合、RDS クラスタに汎用インスタンスタイプまたは専用インスタンスタイプを選択する必要がありますか?
RDS クラスタで MGR モードが有効になっている場合は、追加のメモリが使用されます。したがって、RDS クラスタのメモリ容量が 8 GB から 16 GB の場合は、汎用インスタンスタイプを選択することをお勧めします。これにより、管理システムによってメモリが消費されるのを防ぎ、RDS クラスタで使用可能なメモリを増やすことができます。
RDS クラスタに 32 GB などの大容量メモリを購入する場合は、より良い分離とピークパフォーマンスを実現するために、専用インスタンスタイプを選択することをお勧めします。
関連操作
操作 | 説明 |
操作 | 説明 |
CreateDBInstance 操作を呼び出して、RDS クラスタエディションを実行し、MGR モードを使用するインスタンスを作成する場合、DB パラメータグループ IDrpg-sys-01040407010400 パラメータを に設定し、ビジネス要件に基づいて他のパラメータを構成する必要があります。 | |
インスタンスのデータレプリケーションモードを変更します。ModifyDBInstanceHAConfig 操作を呼び出して、インスタンスのデータレプリケーションモードを MGR に変更する場合、同期モードMgr(マネージャー) パラメータを に設定し、ビジネス要件に基づいて他のパラメータを構成する必要があります。 |