組復制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,其他參數請按需配置。 |