組複製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 | 描述 |
調用CreateDBInstance介面建立複製方式為組複製的叢集系列執行個體時,您需要將DBParamGroupId參數值設定為rpg-sys-01040407010400,其他參數請按需配置。 | |
調用ModifyDBInstanceHAConfig介面修改執行個體的複製方式為組複製時,您需要將SyncMode參數設定為Mgr,其他參數請按需配置。 |