MHA (Master High Availability) 是成熟的 MySQL 高可用解決方案,能在主庫故障時於 0-30 秒內自動完成故障轉移,且盡量保證資料一致性。架構包含 Manager(監控節點)與 Node(資料節點)兩部分。
| 角色 | 主機名 | IP | OS |
|---|---|---|---|
| Manager | zbdba1 | 192.168.56.160 | RedHat 6.3 |
| Node1 (Master) | zbdba2 | 192.168.56.161 | RedHat 6.3 |
| Node2 (Slave) | zbdba3 | 192.168.56.162 | RedHat 6.3 |
app1.cnf# 安裝 Perl 依賴 yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager # 建議配置 RepoForge 源 wget https://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm # 下載並安裝 MHA 套件 wget https://www.mysql.gr.jp/.../mha4mysql-manager-0.56-0.el6.noarch.rpm wget https://www.mysql.gr.jp/.../mha4mysql-node-0.56-0.el6.noarch.rpm rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
/etc/masterha/app1.cnf[server default] manager_workdir=/masterha/app1 manager_log=/masterha/app1/manager.log user=root password=mysql ssh_user=root repl_user=root repl_password=mysql ping_interval=1 shutdown_script="" master_ip_failover_script="" master_ip_online_change_script="" report_script="" [server1] hostname=192.168.56.161 master_binlog_dir="/var/lib/mysql" candidate_master=1 [server2] hostname=192.168.56.162 master_binlog_dir="/var/lib/mysql" candidate_master=1
rpm -ivh perl-DBD-MySQL-4.022-1.el6.rfx.x86_64.rpm rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
# 以 zbdba1 為例,向 zbdba2、zbdba3 複製公鑰 ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.56.161 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.56.162 # 同樣在 zbdba2、zbdba3 執行相互複製 # 最後驗證 masterha_check_ssh --conf=/etc/masterha/app1.cnf
masterha_check_repl --conf=/etc/masterha/app1.cnf
輸出應顯示 MySQL Replication Health is OK. 並確認候選主庫 candidate_master=1。
nohup masterha_manager --conf=/etc/masterha/app1.cnf &
查看狀態:
masterha_check_status --conf=/etc/masterha/app1.cnf # 輸出:app1 (pid:xxxx) is running(0:PING_OK), master:192.168.56.161
在 Node1 (Master) 執行 service mysql stop,觀察 Manager 日誌:
Master is not reachable)shutdown_script 則執行)最終日誌顯示:Master failover to 192.168.56.162 completed successfully.
master_ip_failover_script 搭配 Keepalived/VRRP 實現 VIP 自動漂移,應用層無感切換。secondary_check_script 多路徑健檢(如管理網、業務網雙通道),避免誤判。shutdown_script 確保舊 Master 徹底下線,防止 Split-Brain。manager.log 並對接告警系統(Zabbix、Prometheus Alertmanager)。MHA 是 MySQL 高可用的經典選擇,部署相對簡單、切換快速、資料一致性保障好。搭配 VIP 漂移與多路徑健檢,可構建企業級生產可用的資料庫叢集。