MySQL 高可用利器 MHA 核心參數深度解析
MHA (Master High Availability) 是由日本 DeNA 開發的成熟 MySQL 高可用方案,專注於故障自動切換與主從提升。深入理解其配置參數對於優化高可用架構、實現秒級故障轉移至關重要。參數按作用域分為三級:Local(單節點 [server_xxx] 區塊)、App([server_default] 區塊)、Global(多組主從統一管理)。
基礎連線參數
- hostname(必填,Local):MySQL 伺服器主機名或 IP
- ip(Local,預設自動解析 hostname):指定連線 IP,適用於多網卡環境
- port(Local/App/Global,預設 3306):MySQL 監聽埠
- ssh_host / ssh_ip / ssh_port(Local/App/Global,預設 22):MHA Manager 透過 SSH 連線節點的設定,支援多 VLAN 環境
- ssh_user(Local/App/Global):SSH 登入帳號,需具備遠端執行權限、讀取 binlog/relay log 權限,建議使用金鑰認證
- ssh_options:自訂 SSH 參數(如指定金鑰檔
-i /root/.ssh/id_dsa2)
主從角色控制參數
- candidate_master=1(Local,預設 0):標記該從庫具備提升為新主庫優先權(需開啟 binlog、無複製延遲)。多台設為 1 時,按
[server_x] 編號優先
- no_master=1(Local,預設 0):永不提升為主庫,適合 RAID0 或遠端災備從庫
- ignore_fail=1(Local,預設 0):即使存在故障從庫也強制進行故障切換
- check_repl_delay=0(App/Global,預設 1):忽略從庫複製延遲(預設超過 100M relay log 不提升),配合
candidate_master 使用
故障偵測與切換策略
- ping_interval(App/Global,預設 3 秒):偵測主庫心跳間隔,連續 3 次失敗判定主庫掛掉
- ping_type(App/Global,預設 SELECT):
SELECT(執行 select 1)、CONNECT(僅建立 TCP 連線)、INSERT(0.56+ 版本支援)
- secondary_check_script(App/Global):多路徑偵測腳本(如
masterha_secondary_check -s remote_dc1 -s remote_dc2),透過不同網路路徑二次確認主庫存活,避免網路分區誤判
- latest_priority=0(App/Global,預設 1):關閉「最接近主庫的從庫優先」策略,改由
[server_x] 順序決定
- multi_tier_slave=1(App/Global,0.52+):支援多層複製(如 A→B→C),故障時 B 升主,C 繼續從 B 複製
線上切換與通知腳本
- master_ip_failover_script:故障切換時執行的 VIP 漂移、路由更新腳本
- master_ip_online_change_script:線上手動切換(
masterha_master_switch --master_ip_online_change)時的 VIP 切換腳本,支援 stop/stopssh(凍結舊主寫入)與 start(授權新主寫入)兩階段
- shutdown_script:主庫確認宕機後的關機/隔離腳本
- report_script:切換完成後發送報告(郵件等),參數包含舊主、新主、新從列表、主旨、內文
安全與進階參數
- user / password / repl_user / repl_password:MySQL 管理與複製帳號密碼,建議透過
init_conf_load_script 動態取得避免明文
- disable_log_bin=1:從庫應用 relay log 時不產生 binlog,減輕負載
- skip_reset_slave=1(0.56+):切換後不執行
RESET SLAVE ALL,保留複製元數據
- master_binlog_dir:主庫 binlog 存放路徑(多路徑用逗號分隔),協助 MHA 在主庫進程消失後定位 binlog
- remote_workdir(預設 /var/tmp):MHA Node 工作目錄,需確保磁碟空間充足
- manager_workdir / manager_log:Manager 狀態檔與日誌路徑
- log_level(App/Global,預設 info):
debug/info/warning/error
- init_conf_load_script:啟動時執行的腳本,輸出
name=value 覆蓋配置(如從金鑰管理系統讀取密碼)
實戰建議
- 生產環境務必啟用
secondary_check_script 多路徑偵測,避免單點網路故障觸發誤切
- 核心業務從庫設定
candidate_master=1 並確保硬體規格一致(RAID1、SSD)
- 災備機房從庫設定
no_master=1、check_repl_delay=0
- VIP 漂移腳本需冪等、快速(< 1 秒),建議使用
ip addr add/del 或云廠商 API
- 定期演練
masterha_master_switch 線上切換,驗證腳本與流程
合理調校這些參數,讓 MHA 在故障發生時能「快、準、穩」完成切換,是 MySQL 高可用架構穩定性的關鍵。