すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:MGRモードを使用する

最終更新日:Aug 29, 2024

MySQLグループレプリケーション (MGR) は、既存のバイナリロギングメカニズムとPaxosプロトコルに基づいてMySQLによって提供される分散レプリケーションモードです。 MGRモードは、ApsaraDB RDS for MySQLのRDS Cluster Editionでサポートされています。 RDS Cluster Editionを実行する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 Cluster Editionが使用されます。

    説明

    RDSインスタンスをRDS High-availability EditionからRDS Cluster Editionにアップグレードする方法の詳細については、「RDS editionをRDS High-availability EditionからRDS Cluster Editionにアップグレードする」をご参照ください。

  • RDSクラスターのメジャーエンジンバージョンはMySQL 8.0で、RDSクラスターのマイナーエンジンバージョンは20221231以降です。 マイナーエンジンバージョンの更新方法の詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

  • ストレージエンジンはInnoDBです。

  • RDSクラスターのメモリ容量は8 GB以上です。 仕様のアップグレード方法の詳細については、「インスタンス仕様の変更」をご参照ください。

  • RDSクラスター内のノードの数は、3以上の奇数です。

  • RDSクラスターでデータベースプロキシ機能が有効になっている場合、データベースプロキシのバージョンはMaxscale_MySQL_2.2.12_20230302以降です。 データベースプロキシバージョンをアップグレードする方法の詳細については、「データベースプロキシバージョンのアップグレード」をご参照ください。

  • RDSクラスターのプロダクトタイプは標準です。

説明

ApsaraDB RDSコンソールにログインし、RDSクラスターの 基本情報 ページに移動して、RDSエディション、メジャーエンジンバージョン、インスタンスタイプなどの情報を表示できます。

制限事項

  • X-Engineテーブルを含むRDSクラスターにはMGRモードを使用できません。

    次のSQL文を実行して、X-EngineテーブルがRDSクラスターに存在するかどうかを確認できます。 値0が返された場合、X-EngineテーブルはRDSクラスターに存在しません。

    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クラスターにはMGRモードを使用できません。

    次の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'
      );
  • 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クラスターを作成するときは、パラメーターテンプレートパラメーターをMySQL_InnoDB_8.0_RDSクラスターEdition_MGRパラメーターテンプレートに設定します。 RDSクラスターが作成されると、RDSクラスターのMGRモードが有効になります。

既存のRDSクラスターのレプリケーションモードをMGRに変更

既存のRDSクラスターの 基本情報 ページの [インスタンストポロジ管理] セクションで、同期モードを変更 をクリックします。 表示されるダイアログボックスで、[Data Replication Mode] パラメーターに [MGR] を選択し、確認 をクリックします。

説明

MGRモードを非同期または半同期レプリケーションモードに変更することもできます。

よくある質問

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モードを有効にすると、約1 GBのメモリを占有するキャッシュがXComレイヤーで維持され、XComメッセージが保存されます。 MGRモードのトランザクション認証モジュールは、特定の量のメモリを占有する認証情報アレイを保持する。 MGRモードを使用すると、追加のバックグラウンドスレッドが有効になります。 スレッドは特定の量のメモリを消費します。 RDSクラスターのメモリ容量が8 GB未満の場合、大量のメモリが占有されるとメモリ不足 (OOM) エラーが発生します。 例えば、多数のクエリが実行される。 したがって、MGRモードが有効になっているRDSクラスターに大量のメモリリソースを提供するインスタンスタイプを選択することを推奨します。

MGRモードが有効になっている場合、RDSクラスターに汎用インスタンスタイプまたは専用インスタンスタイプを選択する必要がありますか。

RDSクラスターでMGRモードが有効になっている場合、追加のメモリが使用されます。 したがって、RDSクラスターのメモリ容量が8 GB〜16 GBの場合、汎用インスタンスタイプを選択することを推奨します。 これにより、管理システムによってメモリが消費されるのを防ぎ、RDSクラスターで使用できるメモリを増やします。

RDSクラスターのメモリ容量が32 GB以上の場合、分離とピークパフォーマンスを向上させるために専用インスタンスタイプを選択することを推奨します。

関連する API

API 操作

説明

CreateDBInstance

インスタンスを作成します。 CreateDBInstanceを呼び出して、RDS Cluster Editionを実行し、MGRモードを使用するインスタンスを作成する場合、DBParamGroupIdパラメーターをrpg-sys-01040407010400に設定し、ビジネス要件に基づいて他のパラメーターを設定する必要があります。

ModifyDBInstanceHAConfig

インスタンスのデータレプリケーションモードを変更します。 ModifyDBInstanceHAConfig操作を呼び出してインスタンスのデータレプリケーションモードをMGRに変更する場合、SyncModeパラメーターをMgrに設定し、ビジネス要件に基づいて他のパラメーターを設定する必要があります。