全部產品
Search
文件中心

ApsaraDB RDS:使用組複製

更新時間:Jul 09, 2024

組複製MySQL Group Replication(簡稱 MGR)是MySQL官方在已有的Binlog複製架構之上,基於Paxos協議實現的一種分布式複製形態。RDS MySQL叢集系列執行個體支援組複製。本文介紹如何使複製方式為組複製。

背景資訊

使用了組複製的MySQL叢集能夠基於分布式Paxos協議自我管理,具有很強的資料可靠性和資料一致性。相比傳統主備複製方式,組複製具有以下優勢:

  • 資料的強一致性:組複製叢集能夠自主管理叢集,當主庫故障時,能夠主動進行故障節點剔除和主備切換,並且切換後主備庫的資料仍然保持一致。

  • 資料的強可靠性:組複製中事務在提交時,一定保證資料已經複製到了超過半數的節點,因此在多數派可用的情況下,能夠保證資料不丟失。

  • 全域事務強一致性:組複製具備叢集的節點間的資料全域一致讀和全域一致寫能力,可根據業務需要修改group_replication_consistency參數設定讀寫的一致性等級。

    說明
    • 資料的全域一致讀能力:您可以在備庫上設定Session層級的group_replication_consistency參數為BEFORE,然後執行查詢語句。此時,備庫會等到主庫上所有先於此查詢語句的事務應用完成後,再執行這條查詢語句。

    • 資料的全域一致寫能力:您可以在主庫上設定Session層級的group_replication_consistency參數為AFTER,然後執行寫事務,這個事務會等到所有節點應用成功後,再在主庫上返回提交成功的訊息。

    • 多數派:指叢集中超過半數以上的節點。

應用情境

要求資料強可靠和強一致的業務情境,例如金融、電商、核心交易系統等。

前提條件

執行個體滿足以下條件:

  • 系列:RDS MySQL叢集系列執行個體。

    說明

    高可用系列執行個體升級為叢集系列執行個體的方法,請參見高可用系列升級為叢集系列

  • 版本:核心小版本大於或等於MySQL 8.0 20221231。如需升級核心小版本,請參見升級核心小版本

  • 儲存引擎:InnoDB。

  • 記憶體:大於或等於8 GB。如需升級執行個體規格,請參見變更配置

  • 執行個體節點個數大於等於3,且為單數。

  • 在有資料庫代理的情況下,代理版本:大於或等於Maxscale_MySQL_2.2.12_20230302。如需升級資料庫代理版本,請參見升級獨享代理核心小版本

  • 產品類型:標準版

說明

您可以到RDS控制台執行個體的基本資料頁面查看執行個體的系列、版本、規格等資訊。

使用限制

  • 存在X-Engine引擎表的執行個體不能使用組複製。

    可以通過以下SQL語句檢查是否存在X-Engine引擎表,查詢結果為0表示不存在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__'
      );
  • 存在無主鍵表的執行個體不能使用組複製。

    可以通過以下SQL語句檢查是否存在無主鍵表,查詢結果為0表示不存在無主鍵表。

    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'
      );
  • 除了上述限制外,業務層面的組複製的使用限制,請參見官網文檔Requirements and Limitations

影響

將非同步或半同步複製方式切換為組複製方式時,會出現執行個體切換,請在業務低峰期進行。請確保您的應用程式具有重連機制,重連機制需要在您的應用程式中設定。執行個體切換的影響請參見執行個體切換的影響

技術實現

組複製是基於Paxos協議實現的一種分布式複製形態。詳細實現原理請參見組複製簡介

注意事項

  • 組複製效能弱於非同步複製,記憶體資源消耗多於非同步和半同步複製,效能敏感型或資源敏感型業務請在測試後使用。

  • 為保證組複製叢集的穩定運行,在使用組複製時,系統會將以下參數設為固定值,如下所示。

    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

費用

使用組複製不需要額外支付費用。

操作步驟

新建立使用組複製的執行個體

在建立RDS MySQL叢集系列執行個體時,參數模板選擇MySQL_InnoDB_8.0_叢集系列_組複製參數模板,即可開通複製方式為組複製的執行個體。

已建立的執行個體變更為組複製

如果您已經有RDS MySQL叢集系列執行個體,可以在執行個體基本資料頁面的執行個體拓撲管理地區,單擊修改資料複製方式,在彈出的對話方塊中選中組複製,單擊確認,即可將執行個體複製方式變更為組複製。

說明

組複製也可以切換為非同步或半同步複製。

常見問題

Q:使用組複製後,還能切換回非同步或半同步複製模式嗎?

A:可以。非同步、半同步、組複製三種複製模式可以相互切換,您可以在執行個體基本資料頁面的執行個體拓撲管理地區,單擊修改資料複製方式,在彈出的對話方塊中修改複製方式。

Q:使用組複製後,備節點還支援可讀嗎?

A:支援。由於組複製的各節點之間使用Paxos協議,在備節點負載過高的情況下,會影響主節點寫入效能,建議開通資料庫代理服務進行讀寫分離,資料庫代理支援配置讀權重和複寫延遲閾值,可有效避免備節點負載過高。

Q:組複製支援多主模式嗎?

A:不支援。RDS MySQL當前只提供單主模式的組複製執行個體。多主模式下叢集的穩定性很差,任意節點的抖動或故障,都會影響全叢集的可用性。

Q:為什麼使用組複製要求記憶體大於等於8 GB?

A:在開啟組複製後,Xcom層中維護了一個約1 GB的Xcom Cache,用來儲存Xcom message。組複製的事務認證模組會維護一個認證資訊數組,佔用一定的記憶體。組複製還會開啟額外的後台線程,消耗部分記憶體。如果購買的執行個體規格記憶體偏小,在有大查詢等記憶體使用量率較高的情境下,會導致執行個體OOM。因此,我們推薦開啟組複製的執行個體盡量選取記憶體較大的規格。

Q:使用組複製後,應該購買通用型規格還是獨享型規格?

A:由於組複製會使用額外的記憶體,所以當購買的規格記憶體較小時(8 GB~16 GB),推薦選取通用型規格,可以規避部分管控記憶體消耗,提升執行個體的可用記憶體;

如果所購買記憶體較大(如32 GB),推薦選取獨享型規格執行個體,可以擷取更好的隔離性與高峰效能。

相關API

API

描述

建立一個RDS執行個體

調用CreateDBInstance介面建立複製方式為組複製的叢集系列執行個體時,您需要將DBParamGroupId參數值設定為rpg-sys-01040407010400,其他參數請按需配置。

修改執行個體的高可用模式和資料複製方式

調用ModifyDBInstanceHAConfig介面修改執行個體的複製方式為組複製時,您需要將SyncMode參數設定為Mgr,其他參數請按需配置。