首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

MySQL 高可用利器 MHA 核心參數深度解析

     編輯:PHP 相關知識

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 覆蓋配置(如從金鑰管理系統讀取密碼)

實戰建議

  1. 生產環境務必啟用 secondary_check_script 多路徑偵測,避免單點網路故障觸發誤切
  2. 核心業務從庫設定 candidate_master=1 並確保硬體規格一致(RAID1、SSD)
  3. 災備機房從庫設定 no_master=1、check_repl_delay=0
  4. VIP 漂移腳本需冪等、快速(< 1 秒),建議使用 ip addr add/del 或云廠商 API
  5. 定期演練 masterha_master_switch 線上切換,驗證腳本與流程

合理調校這些參數,讓 MHA 在故障發生時能「快、準、穩」完成切換,是 MySQL 高可用架構穩定性的關鍵。

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