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

MySQL MHA 高可用自動故障轉移部署實戰:Red Hat 6.3 一主一從架構

     編輯:MySQL 綜合教學

什麼是 MHA?

MHA (Master High Availability) 是成熟的 MySQL 高可用解決方案,能在主庫故障時於 0-30 秒內自動完成故障轉移,且盡量保證資料一致性。架構包含 Manager(監控節點)與 Node(資料節點)兩部分。

部署架構規劃

角色主機名IPOS
Managerzbdba1192.168.56.160RedHat 6.3
Node1 (Master)zbdba2192.168.56.161RedHat 6.3
Node2 (Slave)zbdba3192.168.56.162RedHat 6.3

部署流程總覽

  1. Manager 節點安裝 MHA Manager 套件與依賴
  2. 所有 Node 節點安裝 MySQL 並配置主從複製
  3. 所有 Node 節點安裝 MHA Node 套件
  4. 配置節點間 SSH 免密互信
  5. 編寫 MHA Manager 配置檔 app1.cnf
  6. 驗證 SSH 與複製狀態
  7. 啟動 MHA Manager 監控
  8. 模擬主庫故障驗證自動切換

關鍵實作細節

1. Manager 節點安裝依賴與套件

# 安裝 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

2. MHA Manager 配置檔 /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

3. Node 節點安裝 MHA Node

rpm -ivh perl-DBD-MySQL-4.022-1.el6.rfx.x86_64.rpm
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

4. 配置 SSH 免密互信(所有節點互相)

# 以 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

5. 驗證複製狀態

masterha_check_repl --conf=/etc/masterha/app1.cnf

輸出應顯示 MySQL Replication Health is OK. 並確認候選主庫 candidate_master=1。

6. 啟動 MHA Manager

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 日誌:

  1. 偵測到 Master 掛掉 (Master is not reachable)
  2. 進入 Phase 1: Configuration Check
  3. Phase 2: Dead Master Shutdown(若有 shutdown_script 則執行)
  4. Phase 3: Master Recovery:從 Slave 取得最新 binlog、應用差異日誌、提升 Slave 為新 Master
  5. Phase 4: Slaves Recovery:其他 Slave 指向新 Master
  6. Phase 5: New Master Cleanup:重置新 Master 的 Slave 資訊

最終日誌顯示: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 漂移與多路徑健檢,可構建企業級生產可用的資料庫叢集。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved