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

MHA 高可用故障轉移部署實戰:Manager/Node 安裝、SSH 互信、配置文件詳解、VIP 漂移腳本與故障演練

     編輯:MySQL 綜合教學

MHA 高可用故障轉移部署實戰:Manager/Node 安裝、SSH 互信、配置文件詳解、VIP 漂移腳本與故障演練

MHA (Master High Availability) 是 Perl 編寫的 MySQL 主從故障自動切換方案,10-30 秒完成故障轉移,修復 Slave 差異 Relay Log,保證數據一致性,無侵入式部署,支持在線切主。本文記錄三節點環境完整部署流程。

架構優勢回顧

  • Master 監控 + 自動故障轉移,秒級檢測、差異 Relay Log 修復、並行恢復 Slave。
  • 支持手動/非交互式故障轉移,配合 Pacemaker 等外部監控。
  • 在線切主(0.5-2 秒阻塞寫),適合硬件維護、版本升級。
  • 半同步配合幾乎零數據丟失;不改變現有主從拓撲;無額外 Server 成本(Manager 可部署在 Slave 上);性能零影響(僅 Ping 監控);支持任意存儲引擎。

環境準備

  • OS: CentOS 6.4 x64
  • MySQL: 5.6.16 二進制包
  • MHA: mha4mysql-manager-0.54, mha4mysql-node-0.54
  • 節點:Manager(192.168.216.50)、Master(192.168.216.51)、Slave(192.168.216.52)

1. SSH 互信配置(三節點互相免密)

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.216.50
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.216.51
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.216.52
# 驗證
ssh 192.168.216.50 date

2. MySQL 安裝與配置(三節點同步執行)

groupadd mysql; useradd -g mysql -s /bin/nologin -M mysql
mkdir -p /data/mysql
tar -zxvf mysql-5.6.16-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.16-linux-glibc2.5-x86_64 /usr/local/mysql
cd /usr/local/mysql/scripts
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

編寫 /usr/local/mysql/my.cnf(含 InnoDB 參數、Binlog、慢查詢、錯誤日志、server-id 不同)。

3. 授權複製用戶(三節點同步執行)

GRANT ALL PRIVILEGES ON *.* TO root@'127.0.0.1' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO root@'192.168.216.50' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE ON *.* TO slave@'192.168.216.50' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE ON *.* TO slave@'192.168.216.51' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE ON *.* TO slave@'192.168.216.52' IDENTIFIED BY 'slave';

4. Perl 依賴包安裝

Manager 節點 安裝完整依賴(含 perl-Log-Dispatch、perl-MIME-Lite、perl-Parallel-ForkManager 等 15+ 包),rpm -ivh 逐個安裝。
Node 節點 僅需 perl-DBD-MySQL、ncftp。若 RPM 衝突,DBD-mysql 源碼編譯:perl Makefile.PL && make && make install。

5. 創建軟鏈接與庫路徑

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql-x86_64.conf
ldconfig

6. 安裝 MHA Node(三節點)與 Manager(管理節點)

# Node
tar -zxvf mha4mysql-node-0.54.tar.gz
cd mha4mysql-node-0.54; perl Makefile.PL; make && make install

# Manager
tar -zxvf mha4mysql-manager-0.54.tar.gz
cd mha4mysql-manager-0.54; perl Makefile.PL; make && make install
mkdir -p /etc/masterha /masterha/app1
cp samples/conf/* /etc/masterha
cp samples/scripts/* /usr/local/bin

7. 編寫 Manager 配置 /etc/masterha/app1.cnf

[server default]
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
user=root; password=root; ssh_user=root
repl_user=slave; repl_password=slave
shutdown_script=""
master_ip_failover_script="/usr/local/bin/masterha_ip_failover"
master_ip_online_change_script="/usr/local/bin/masterha_ip_failover"
report_script=""

[server1]
hostname=192.168.216.50
master_binlog_dir="/data/mysql/"
candidate_master=1

[server2]
hostname=192.168.216.51
master_binlog_dir="/data/mysql/"
candidate_master=1

[server3]
hostname=192.168.216.52
master_binlog_dir="/data/mysql/"
candidate_master=1

8. 驗證與啟動

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

9. VIP 漂移腳本 /usr/local/bin/masterha_ip_failover

Perl 腳本接收 command=start|stop|status、新舊 Master IP,調用 ifconfig eth0:1 192.168.216.100/24 掛載/卸載 VIP。
測試:masterha_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.216.51 ...,手動 start 掛載 VIP,故障時自動漂移。

10. 故障演練

關閉 Master MySQL,觀察 Manager 日志:檢測故障 → 選舉新 Master(優先 candidate_master=1) → 應用差異 Relay Log → 掛載 VIP → 其餘 Slave 指向新 Master。總停機時間 10-30 秒。

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