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

MySQL 高可用 MHA 安裝部署與故障轉移實戰詳解:SSH互信、Manager/Node、自動/手動切換、報錯總結

     編輯:MySQL 綜合教學

一、MHA 簡介

MHA (Master High Availability Manager and Tools for MySQL) 由日本 MySQL 專家用 Perl 編寫,專為傳統一主多從異步/半同步複制環境設計,提供:

  • 10-30 秒完成 Master 故障轉移(9-12s 檢測、7-10s 隔離、極短時間應用差異日志)。
  • 無侵入部署,不改變現有復制拓撲(至少 3 台:1主2從,切換後仍保持主從)。
  • 支援手動在線切換(硬件維護),停機時間 0.5-2s。
  • 自動修復多從庫 Relay Log 差異,保證數據一致性後提升新主。

二、架構角色

IPMHA 角色MySQL 角色
192.168.52.129NodeMaster
192.168.52.130NodeSlave
192.168.52.131Manager + NodeSlave

三、SSH 免密互信(核心前置)

  1. 三台均執行 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa。
  2. 各自 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys。
  3. Manager (131) 收集 129、130 的公鑰追加到本地 authorized_keys,再 scp 分發給 129、130。
  4. 驗證:任意兩台 ssh hostname 免密登錄成功。
  5. /etc/hosts 映射主機名:192.168.52.129 data01 等。

四、MySQL 賬戶準備


-- 所有節點執行
GRANT SUPER,RELOAD,REPLICATION CLIENT,SELECT ON *.* TO 'manager'@'192.168.52.%' IDENTIFIED BY 'manager_1234';
GRANT CREATE,INSERT,UPDATE,DELETE,DROP ON *.* TO 'manager'@'192.168.52.%';

GRANT RELOAD, SUPER, REPLICATION SLAVE ON *.* TO 'repl'@'192.168.52.%' IDENTIFIED BY 'repl_1234';

五、安裝 MHA Node(所有節點)


yum -y install perl-DBD-MySQL
tar -zxvf mha4mysql-node-0.56.tar.gz
cd mha4mysql-node-0.56
perl Makefile.PL && make && make install

六、安裝 MHA Manager(管理節點 131)


yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Config-IniFiles
# 缺包可用 rpm 或 cpan 安裝
tar -zxvf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56
perl Makefile.PL && make && make install

七、Manager 配置 /etc/masterha/app1.cnf


[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
ssh_user=root
repl_user=repl
repl_password=repl_1234
ping_interval=1

[server1]
hostname=192.168.52.129
candidate_master=1
master_binlog_dir=/home/data/mysql/binlog/

[server2]
hostname=192.168.52.130
master_binlog_dir=/home/data/mysql/binlog/

[server3]
hostname=192.168.52.131
master_binlog_dir=/home/data/mysql/binlog/

八、驗證環境


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

均顯示 All SSH connection tests passed successfully. 和 MySQL Replication Health is OK. 方可啟動。

九、啟動 Manager


nohup masterha_manager --conf=/etc/masterha/app1.cnf < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &

查狀態:masterha_check_status --conf=/etc/masterha/app1.cnf

十、故障轉移測試

自動切換

在 Master (129) 執行 echo c > /proc/sysrq-trigger 觸發內核崩潰。Manager 檢測到後自動完成:保存 Binlog → 選最新 Slave (130) → 應用差異 Relay Log → 提升為新 Master → 其它 Slave 重新指向。全程無人工干預。

手動切換(維護窗口)


# 1. 停止 Manager
masterha_stop --conf=/etc/masterha/app1.cnf

# 2. 標記舊 Master 為 dead(若真掛掉可省略)
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=dead --dead_master_host=192.168.52.129

# 3. 提升新 Master
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.52.130

過程中會提示確認 FLUSH NO_WRITE_TO_BINLOG TABLES、鎖表、切換 Binlog 位點、解鎖,最後顯示 Switching master to ... completed successfully.

十一、切換後配置更新

手動切換後需生成新配置 app2.cnf(將 server1/server2 IP 互換),後續 masterha_check_repl 使用新配置。

十二、常見報錯與解決(避坑指南)

十三、核心工具箱

  • masterha_check_ssh、masterha_check_repl、masterha_manager、masterha_check_status、masterha_master_monitor、masterha_master_switch、masterha_conf_host
  • Node 端:save_binary_logs、apply_diff_relay_logs、purge_relay_logs
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤現象原因解決
Getting relay log directory failed從庫未配置 relay-logmy.cnf 添加 relay-log=/path/mysql-relay-bin,重啟並 RESET SLAVE/CHANGE MASTER
Multi-master config but two writable masters雙主雙寫或未設置 read_only從庫 SET GLOBAL read_only=1;
Can't exec "mysqlbinlog"PATH 缺少 mysqlbinlogln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/
sh: mysql: command not foundPATH 缺少 mysqlln -s /usr/local/mysql/bin/mysql /usr/bin/
CREATE command denied to user 'manager'manager 缺 CREATE 權限GRANT CREATE,INSERT,UPDATE,DELETE,DROP ON *.* TO 'manager'@'%';