MHA (Master High Availability) 由日本 DeNA 開發,是 MySQL 高可用領域成熟度極高的解決方案。核心優勢:0-30 秒自動故障切換,最大程度保證數據一致性。架構分為 MHA Manager(管理節點,可獨立部署或共置 Slave)與 MHA Node(各 MySQL 服務器)。
| 角色 | IP | 主機名 | Server ID | 備註 |
|---|---|---|---|---|
| Monitor | 192.168.127.100 | MHA | - | 管理節點 |
| Master | 192.168.127.101 | master | 101 | 寫入節點 |
| Candidate Master | 192.168.127.102 | slave01 | 102 | 優先提升新主 |
| Slave | 192.168.127.103 | slave02 | 103 | 僅讀,不提升主 |
/app/mysql5.6、數據目錄 /data/mysql3306、關鍵參數 binlog_format=ROW、sync_binlog=1、log_slave_updates=1、GTID 模式關閉。repl,Slave 執行 CHANGE MASTER TO 指定 Binlog 位點啟動復制,驗證 Slave_IO/SQL_Running=Yes。read_only=1(由 MHA 控制)、relay_log_purge=0(保留 Relay Log 供故障恢復)。root@192.168.127.%、候選主額外創建復制用戶。perl-DBD-MySQL、perl-Parallel-ForkManager 等),源碼編譯安裝 mha4mysql-node、mha4mysql-manager。/etc/masterha/app1.cnf:定義工作目錄、故障切換腳本 master_ip_failover、心跳間隔、Secondary Check 腳本(雙重檢測避免誤切)、各 Server 段(candidate_master=1、no_master=1)。masterha_check_ssh、masterha_check_repl 驗證環境就緒(需修復樣本腳本中 FIXME_xxx 語法錯誤)。master_ip_failover 實現 start/stop VIP 綁定/解綁(ifconfig eth0:2 192.168.127.202/24),首啟在 Master 綁定 VIP。nohup masterha_manager --conf=/etc/masterha/app1.cnf > /masterha/app1/manager.log 2>&1 &。SHOW SLAVE STATUS 顯示 Master_Host 已變為 Slave01 (192.168.127.102);ip addr 見 eth0:2)。CHANGE MASTER TO 命令(含精確 Binlog 文件/位點),在原 Master 執行並 START SLAVE。app2.cnf) 監控新拓撲,反復測試驗證穩定性。為進一步降低數據丟失風險,Master 與 Candidate Master 雙向部署半同步:
-- Master/候選主 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; SET GLOBAL rpl_semi_sync_master_enabled=1; SET GLOBAL rpl_semi_sync_master_timeout=10000; -- 10s 超時退回異步 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; SET GLOBAL rpl_semi_sync_slave_enabled=1; -- 純 Slave INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; SET GLOBAL rpl_semi_sync_slave_enabled=1;
配置文件固化參數,無需重啟生效。驗證 SHOW VARIABLES LIKE 'rpl%' 確認狀態 ON。
master_ip_failover 腳本需冪等、幂等,確保 VIP 操作可重入。rpl_semi_sync_master_timeout)需根據網絡延遲調整,平衡可用性與一致性。