
文章目錄前言一、MGR 集群基礎介紹及核心概念解析1.1 復制組1.2 多數派投票機制Paxos1.3 單主模式【生產推薦】1.4 多主模式【僅測試使用】1.5 XCom通信組件1.6 寫沖突檢測1.7 一致性級別二、MGR 集群的核心作用三、MGR 集群的應用場景四、MGR 集群整體技術特性4.1 優勢4.2 劣勢五、MGR 集群部署方案六、MGR 集群部署流程6.1 系統基礎配置6.2 安裝MySQL8.06.3 配置my.cnf6.4 創建復制賬戶所有節點執行5.5 安裝組復制插件6.6 引導第一個節點主節點6.7 驗證數據同步6.8 故障切換測試與恢復6.8.1 模擬主節點宕機6.8.2 恢復原主節點七、MGR 架構管理7.1 自動啟動組復制7.2 優先級選舉7.3 故障檢測與恢復7.4 連接路由7.5 備份策略7.6安全加固總結前言隨著企業業務系統對數據庫可用性和數據一致性要求的不斷提高傳統的主從復制架構在面對主庫故障時存在切換時間長、可能丟失數據、需要人工介入等痛點難以滿足關鍵業務對高可用的嚴苛要求。 MGR作為 MySQL 官方原生提供的高可用解決方案基于分布式 Paxos 協議實現了數據強一致性和自動故障切換當主庫發生故障時集群可在秒級內自動完成新主選舉無需人工干預從根本上提升了數據庫服務的連續性。本文檔旨在提供一套完整的 MySQL 8.0 MGR 單主高可用集群部署方案。通過本方案的實施可構建一個具備自動故障恢復的高可用數據庫集群為企業核心業務提供穩定、可靠的數據庫服務支撐。一、MGR 集群基礎介紹及核心概念解析MGRMySQL Group ReplicationMySQL 組復制MySQL 官方原生高可用集群方案是基于 Paxos 一致性協議實現多節點數據一致性、故障自動檢測與主節點自動切換解決了傳統主從復制單點故障、數據不一致問題。主要分為單主模式、多主模式生產環境優先使用單主模式。1.1 復制組多個MySQL實例組成一個復制組組內節點互相通信協同共同維護數據一致性。最大支持9個節點生產環境常用3節點部署。1.2 多數派投票機制Paxos所有寫事務需要組內半數以上節點確認通過事務才正式生效。示例3節點集群至少2個節點確認寫操作才算成功避免數據錯亂。1.3 單主模式【生產推薦】集群中僅有1臺主節點承擔讀寫業務其余節點為只讀。主節點故障集群自動投票選舉出新主無需人工干預切換。1.4 多主模式【僅測試使用】集群所有節點都支持讀寫。容易產生寫沖突業務限制多不建議生產環境使用。1.5 XCom通信組件MGR節點之間的內部通信模塊負責消息廣播、節點存活檢測、投票協商。默認通信端口33061和MySQL服務端口3306區分開。1.6 寫沖突檢測當多個節點同時修改同一行數據MGR會檢測到沖突回滾沖突事務保障全集群數據統一。1.7 一致性級別最終一致性能高從節點允許短暫的數據延遲。故障切換安全默認主節點故障切換時保障數據安全兼顧性能生產默認使用。強一致所有節點數據完全實時同步會帶來較大性能損耗對比傳統主從傳統主從故障需要人工切換存在數據不一致風險MGR 實現自動故障轉移集群內部保證數據一致性。二、MGR 集群的核心作用自動故障切換實時監控節點狀態主節點宕機后自動選主、自動切換業務中斷時間大幅縮短。分布式數據強一致依靠投票 沖突檢測機制避免傳統異步 / 半同步主從的數據延遲、丟失問題。讀寫分離支撐讀請求分發至所有從節點分擔主庫查詢壓力提升數據庫整體吞吐量。集群自動擴容新增 MySQL 節點可自動同步全量數據快速加入復制組橫向擴展讀能力。三、MGR 集群的應用場景高可用核心業務電商訂單、支付賬務、企業后臺管理系統不允許數據庫長時間停機。數據一致性敏感業務財務、會員積分、庫存系統要求多副本數據完全統一杜絕臟數據。中小型業務系統不想引入第三方高可用中間件直接使用 MySQL 原生能力搭建集群。需頻繁維護數據庫場景定期版本更新、服務器硬件檢修需要在線切換主庫不中斷業務。四、MGR 集群整體技術特性4.1 優勢MySQL 官方內置功能無需額外第三方插件兼容性穩定故障自動轉移無需人工介入切換主庫降低運維失誤自帶沖突校驗天然保障集群多副本數據統一單主模式貼近傳統主從使用習慣業務改造成本低。4.2 劣勢寫入操作存在投票開銷寫入性能相比單機 MySQL 有損耗集群節點上限 9 臺無法支撐大規模節點擴容節點之間對網絡質量要求高網絡抖動易引發集群異常。五、MGR 集群部署方案部署架構與環境準備本次部署采用 MySQL 8.0 MGR 單主高可用架構共規劃三個節點Node110.8.0.10、Node210.8.0.30、Node310.8.0.50。三臺服務器均安裝 MySQL 8.0統一配置 hosts 解析、關閉防火墻與 SELinux并確保時間同步。MGR 集群通過 Paxos 協議保證數據一致性自動處理節點故障與主庫切換。在單主模式下只有 Primary 節點處理寫請求Secondary 節點提供讀服務配合 MySQL Router 實現讀寫分離與故障透明切換。部署步驟第一步基礎環境與 MySQL 安裝三臺均執行設置主機名與 hosts 解析關閉防火墻和 SELinux配置 chronyd 時間同步。安裝 MySQL 8.0啟動服務并修改 root 密碼。第二步配置文件修改三臺均執行在 /etc/my.cnf 中開啟 GTID、設置 Binlog 格式為 ROW添加 MGR 相關參數包括 group_replication_group_name三臺必須一致、group_replication_local_address各節點不同和 group_replication_group_seeds填寫全部三個節點的 IP:33061。測試環境關閉 SSL。第三步創建復制賬號并配置恢復通道三臺均執行創建 repl10.8.0.% 用戶授予 REPLICATION SLAVE、CONNECTION_ADMIN、BACKUP_ADMIN、GROUP_REPLICATION_STREAM 權限并強制使用 mysql_native_password 插件。關鍵操作在所有節點執行 CHANGE MASTER TO 時必須顯式指定 MASTER_HOST‘10.8.0.10’否則從庫恢復通道會指向自身導致數據無法同步。第四步啟動集群首先在 Node110.8.0.10上開啟引導模式并啟動 MGR隨后依次在 Node2 和 Node3 上直接執行 START GROUP_REPLICATION 加入集群。通過查詢 performance_schema.replication_group_members 確認三個節點狀態均為 ONLINE并在主庫創建測試表驗證數據同步。生產環境建議后續開啟 group_replication_start_on_bootON 實現自動啟動并部署 MySQL Router 實現讀寫分離與故障自動切換。六、MGR 集群部署流程6.1 系統基礎配置主機名IP地址角色mysql110.8.0.10primarymysql210.8.0.30secondarymysql310.8.0.50secondary# 根據各節點設置主機名hostnamectl set-hostname mysql1# 在10上執行hostnamectl set-hostname mysql2# 在30上執行hostnamectl set-hostname mysql3# 在50上執行# 所有節點統一編輯 /etc/hosts添加cat/etc/hostsEOF 10.8.0.10 mysql1 10.8.0.30 mysql2 10.8.0.50 mysql3 EOF# 關閉防火墻和增強功能systemctl stop firewalld setenforce0#時間同步systemctl start chronydsystemctlenablechronyd chronyc sources-v# 確認同步正常若MS列是以^,*,開頭則時間同步6.2 安裝MySQL8.0# 卸載系統自帶數據庫rpm-qa|grepmariadb yum remove mariadb*-y# 添加 MySQL 官方 Yum 倉庫cd/optwgethttps://repo.mysql.com/mysql80-community-release-el7-11.noarch.rpm# 安裝MySQL Serveryuminstall-ymysql-community-server systemctl start mysqld systemctlenablemysqld# 獲得mysql版本mysql--version# 獲取臨時密碼并修改密碼修改的密碼需要數字大小寫字母特殊符號greptemporary password/var/log/mysqld.log mysql-uroot-p臨時密碼ALTERUSERrootlocalhostIDENTIFIED BYYourNewPass2026;6.3 配置my.cnf# 在主服務器配置[mysqld]# 基礎設置server_id不同的機器配置不一樣server-id1port3306usermysqldatadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pidvalidate_password.policyLOWvalidate_password.length6# 字符集character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci# 關閉全局sslssl0skip-sslrequire_secure_transportOFF# GTID 與二進制日志MGR 必需gtid_modeONenforce_gtid_consistencyONbinlog_formatROWlog_binbinloglog_slave_updatesONmaster_info_repositoryTABLErelay_log_info_repositoryTABLEtransaction_write_set_extractionXXHASH64binlog_transaction_dependency_trackingWRITESETbinlog_checksumNONE# 組復制基本參數#其中三臺機器的group_replication_group_name參數必須一致可以通過在任意一臺機器執行uuidgen命令獲取該參數# group_replication_local_address參數每臺機器不一致需要根據該機器的IP設置plugin_load_addgroup_replication.sogroup_replication_group_name525c43ec-2de1-413e-a64d-53767b693f2egroup_replication_start_on_bootOFFgroup_replication_local_address10.8.0.10:33061group_replication_group_seeds10.8.0.10:33061,10.8.0.30:33061,10.8.0.50:33061group_replication_bootstrap_groupOFFgroup_replication_single_primary_modeONgroup_replication_enforce_update_everywhere_checksOFF# MGR 通信禁用 SSL因全局已關閉 SSL必須顯式設置group_replication_ssl_modeDISABLEDgroup_replication_recovery_use_sslOFF# 網絡與成員管理每臺機器的report_host不一樣report_host10.8.0.10# 驗證ssl禁用mysql-uroot-p-eSHOW VARIABLES LIKE %ssl%;|grephave_ssl6.4 創建復制賬戶所有節點執行# 臨時關閉當前會話的二進制日志記錄SETSQL_LOG_BIN0;# 創建 MGR 專用的復制賬號只允許來自 10.8.0.x 網段的連接CREATEUSERrepl10.8.0.%IDENTIFIED BYRepl2026;# 授予復制權限節點間同步數據需要GRANT REPLICATION SLAVE ON *.* TOrepl10.8.0.%;# 授予連接管理權限MGR 控制節點連接狀態需要GRANT CONNECTION_ADMIN ON *.* TOrepl10.8.0.%;# 授予備份管理權限分布式恢復donor 傳輸數據需要GRANT BACKUP_ADMIN ON *.* TOrepl10.8.0.%;# MGR 專用權限MySQL 8.0允許該用戶參與組復制的事務流GRANT GROUP_REPLICATION_STREAM ON *.* TOrepl10.8.0.%;# 刷新權限表使授權立即生效FLUSH PRIVILEGES;# 恢復二進制日志記錄后續操作恢復正常SETSQL_LOG_BIN1;# 配置恢復通道憑據就是告訴 MGR 用這個賬號去連接其他節點做數據恢復CHANGE MASTER TOMASTER_USERrepl,MASTER_PASSWORDRepl2026FOR CHANNELgroup_replication_recovery;# 修改 repl 用戶的密碼加密方式從 MySQL 8.0 默認的強加密算法caching_sha2_password改成 MGR 能識別的舊版加密算法mysql_native_password。ALTERUSERrepl10.8.0.%IDENTIFIED WITH mysql_native_password BYRepl2026;5.5 安裝組復制插件# 由于 my.cnf 中已配置 plugin_load_addgroup_replication.so通常已自動安裝。若提示 Function group_replication already exists 則忽略。INSTALL PLUGIN group_replication SONAMEgroup_replication.so;6.6 引導第一個節點主節點# 在主服務器上進行# 開啟引導模式SET GLOBALgroup_replication_bootstrap_groupON;# 啟動 MGRSTART GROUP_REPLICATION;# 關閉引導模式SET GLOBALgroup_replication_bootstrap_groupOFF;# 檢查集群成員SELECT * FROM performance_schema.replication_group_members;# 如果已啟動但失敗確保停止STOP GROUP_REPLICATION;# 清空所有二進制日志和 GTID 執行記錄RESET MASTER;# 再次加入集群START GROUP_REPLICATION;#先清空所有二進制日志和GTID 執行記錄因為之前做過了修改操作6.7 驗證數據同步# 在 PRIMARY 節點當前為 mysql1上執行CREATE DATABASE arr;USE arr;CREATE TABLE uu(id INT PRIMARY KEY, msg VARCHAR(100));INSERT INTO uu VALUES(1,Hello MGR);# 登錄任意 SECONDARY 節點查詢SELECT * FROM arr.uu;6.8 故障切換測試與恢復6.8.1 模擬主節點宕機# 在 mysql1 上停止組復制或關閉 MySQLSTOP GROUP_REPLICATION;# 在其它節點如 mysql2查看SELECT * FROM performance_schema.replication_group_members;6.8.2 恢復原主節點# 手動啟動組復制START GROUP_REPLICATION;七、MGR 架構管理7.1 自動啟動組復制驗證穩定后將 group_replication_start_on_bootON 寫入配置文件并重啟MySQL。7.2 優先級選舉若希望特定節點更可能成為主庫設置權重需要所有節點一致或按需設置group_replication_member_weight80# 值越大越優先默認 507.3 故障檢測與恢復調整 group_replication_member_expel_timeout默認5秒8.0.21在網絡不穩定時可適當增大避免誤驅逐。7.4 連接路由搭配 MySQL Router 或 ProxySQL 實現讀寫分離和自動故障轉移應用無需感知后端主從切換。7.5 備份策略在 SECONDARY 節點上使用 mysqldump 或 MySQL Enterprise Backup 進行備份減輕主庫壓力。7.6安全加固生產環境建議為 repl 用戶限制來源 IP 段已做并定期更換強密碼。若后續需要開啟 SSL需重新配置證書并調整 group_replication_ssl_mode 為 REQUIRED 或 VERIFY_CA。總結本次方案基于 MySQL 8.0 MGR 技術成功構建了一套三節點單主高可用數據庫集群實現了數據強一致性保障和故障自動恢復能力。在生產環境部署中建議開啟 group_replication_start_on_bootON 實現節點自動加入并定期在 Secondary 節點執行數據備份以減輕主庫壓力。特別提醒恢復通道配置時必須顯示指定 MASTER_HOST避免從庫指向自身導致同步中斷。MGR 是 MySQL 官方原生高可用方案部署輕量、運維可控是替代復雜自研架構的理想選擇能夠為企業核心業務提供穩定、可靠、易擴展的數據庫服務支撐。