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

MySQL 高可用架構 MHA 進階:參數深度解析與 Keepalived 整合實戰

     編輯:MySQL 綜合教學

MHA 核心配置參數全景

參數作用域說明
hostname/ip/portLocalMySQL 實例連線資訊,port 預設 3306
ssh_host/ssh_ip/ssh_portLocalSSH 連線資訊,port 預設 22(v0.53+)
candidate_masterLocal1=優先升主,多個按 server 順序;0=不指定,選延遲最小
no_masterLocal1=永不升主
ignore_failLocal1=該 Slave 故障不阻擋切換
user/passwordLocal/App/Global管理帳號(建議 root)
repl_user/repl_passwordLocal/App/Global複寫帳號
disable_log_binLocal/App/GlobalSlave 套用 relay log 時不產生 binlog
ssh_userLocal/App/GlobalOS 層帳號,需 SSH 金鑰免密、讀寫 log 目錄權限
remote_workdirLocal/App/GlobalNode 工作目錄,預設 /var/tmp
master_binlog_dirLocal/App/GlobalMaster binlog 實際路徑,支援多路徑逗號分隔
ping_intervalApp/Global檢查 Master 間隔,預設 3s,連續 3 次失敗判定宕機(最長 12s)
ping_typeApp/GlobalSELECT(預設,持久連線)或 CONNECT(建立/斷開,更嚴格)
secondary_check_scriptApp/Global多路徑網路檢查腳本,防誤切
master_ip_failover_scriptApp/GlobalVIP/目錄服務切換腳本,三階段調用:status/stop/start
shutdown_scriptApp/Global強制下電/殺進程腳本,防腦裂
report_scriptApp/Global切換完成/失敗郵件通知

MHA + Keepalived 高可用部署實戰

架構圖

Master (192.168.3.27) ↔ Backup (192.168.3.28) 雙機熱備,VIP 192.168.3.33 飄移,MHA Manager (192.168.3.x) 監控決策。

Keepalived 配置要點

# Master 節點 /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication { auth_type PASS; auth_pass 1111; }
    track_script { check_run }
    virtual_ipaddress { 192.168.3.33 }
}

# Backup 節點 priority 90,state BACKUP,其餘相同

健康檢查腳本

#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=192.168.3.27  # 本機 IP
MYSQL_USER=root
MYSQL_PASSWORD=mysql
CHECK_TIME=3

function check_mysql_health() {
    $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
    return $?
}

while [ $CHECK_TIME -ne 0 ]; do
    let "CHECK_TIME -= 1"
    check_mysql_health
    if [ $? -eq 0 ]; then exit 0; fi
    if [ $CHECK_TIME -eq 0 ]; then pkill keepalived; exit 1; fi
    sleep 1
done

腳本需 chmod +x,放入 /etc/keepalived/check_mysql.sh。

故障演練與驗證

  1. 停止 Master MySQL → Keepalived 偵測失敗 → 自殺 → VIP 飄移至 Backup。
  2. Backup 讀寫正常(read_only=OFF),Slave 自動指向新 Master(show slave status 驗證)。
  3. 應用端透過 VIP 寫入測試,資料同步至只讀節點。
  4. 清理 app1.failover.complete 重啟 MHA Manager,恢復監控。
  5. 原 Master 修復後以 Slave 身份加入,CHANGE MASTER TO 指向新 Master binlog 位點。
  6. 再次故障切換驗證雙向切換能力。

關鍵運維提醒

  • master_ip_failover_script 必須冪等,返回 0/10 才視為成功。
  • secondary_check_script 需部署於不同網段機器,避免單點網路誤判。
  • shutdown_script 需依硬體廠商(iLO/DRAC/IPMI)撰寫下電指令。
  • 切換後務必手動清理 .failover.complete 才能重啟監控。
  • 原 Master 重新加入只能作 Slave,不可直接升主。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved