首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Percona MySQL MHA 高可用實戰:部署、故障切換與半同步復制整合

     編輯:MySQL 綜合教學

Percona MySQL MHA 高可用實戰:部署、故障切換與半同步復制整合

MHA (Master High Availability) 由日本 DeNA 開發,是 MySQL 高可用領域成熟度極高的解決方案。核心優勢:0-30 秒自動故障切換,最大程度保證數據一致性。架構分為 MHA Manager(管理節點,可獨立部署或共置 Slave)與 MHA Node(各 MySQL 服務器)。

環境規劃

角色IP主機名Server ID備註
Monitor192.168.127.100MHA-管理節點
Master192.168.127.101master101寫入節點
Candidate Master192.168.127.102slave01102優先提升新主
Slave192.168.127.103slave02103僅讀,不提升主

核心部署流程

  1. Percona Server 5.6 安裝與配置:統一目錄 /app/mysql5.6、數據目錄 /data/mysql3306、關鍵參數 binlog_format=ROW、sync_binlog=1、log_slave_updates=1、GTID 模式關閉。
  2. 主從搭建:Master 創建復制用戶 repl,Slave 執行 CHANGE MASTER TO 指定 Binlog 位點啟動復制,驗證 Slave_IO/SQL_Running=Yes。
  3. MHA 專用配置:
    • 所有節點 read_only=1(由 MHA 控制)、relay_log_purge=0(保留 Relay Log 供故障恢復)。
    • 創建 MHA 監控用戶 root@192.168.127.%、候選主額外創建復制用戶。
  4. 安裝 MHA Node/Manager:依賴 Perl 模塊(perl-DBD-MySQL、perl-Parallel-ForkManager 等),源碼編譯安裝 mha4mysql-node、mha4mysql-manager。
  5. SSH 互信:Manager 到所有 Node、Node 間雙向免密登錄。
  6. 配置 /etc/masterha/app1.cnf:定義工作目錄、故障切換腳本 master_ip_failover、心跳間隔、Secondary Check 腳本(雙重檢測避免誤切)、各 Server 段(candidate_master=1、no_master=1)。
  7. 健康檢查:masterha_check_ssh、masterha_check_repl 驗證環境就緒(需修復樣本腳本中 FIXME_xxx 語法錯誤)。
  8. VIP 管理腳本改造:修改 master_ip_failover 實現 start/stop VIP 綁定/解綁(ifconfig eth0:2 192.168.127.202/24),首啟在 Master 綁定 VIP。
  9. 啟動 Manager:nohup masterha_manager --conf=/etc/masterha/app1.cnf > /masterha/app1/manager.log 2>&1 &。

故障切換實戰驗證

  1. 殺掉 Master MySQL 進程,觀察:
    ① Manager 日誌記錄切換流程;
    ② Slave02 SHOW SLAVE STATUS 顯示 Master_Host 已變為 Slave01 (192.168.127.102);
    ③ VIP 自動漂移至 Slave01 (ip addr 見 eth0:2)。
  2. 原 Master 修復掛載為新主的 Slave:從 MHA 日誌提取 CHANGE MASTER TO 命令(含精確 Binlog 文件/位點),在原 Master 執行並 START SLAVE。
  3. 修改配置啟動新 Manager (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。

關鍵經驗總結

  • Secondary Check 必不可少:雙重網絡/服務檢測防止網絡分區誤觸發切換。
  • master_ip_failover 腳本需冪等、幂等,確保 VIP 操作可重入。
  • 故障切換後 務必從 MHA 日誌提取精確 Binlog 位點 重建原 Master 為 Slave,避免數據分歧。
  • 半同步超時時間(rpl_semi_sync_master_timeout)需根據網絡延遲調整,平衡可用性與一致性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved