1. 配置 MHA-Manager 管理器# 解压 MHA 安装包 [rootmha ~]# unzip MHA-7.zip [rootmha ~]# cd MHA-7/ # 安装依赖环境 [rootmha MHA-7]# dnf install perl perl-DBD-MySQL perl-CPAN -y [rootmha MHA-7]# cpan # 在 cpan 交互界面中依次执行以下命令 cpan[1] install Config::Tiny cpan[2] install Log::Dispatch cpan[3] install Mail::Sender # 指定 Mail::Sender 默认值 Specify defaults for Mail::Sender? (y/N) y Default encoding of message bodies (N)one, (Q)uoted-printable, (B)ase64: n cpan[4] install Parallel::ForkManager cpan[5] exit [rootmha MHA-7]# rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha4mysql-node-0.58-0.el7.centos.noarch.rpm --nodeps2. 在 Slave 节点安装 MHA-Node 软件# 循环分发 RPM 包到所有数据库节点 (10, 20, 30) 并安装 [rootmha MHA-7]# for i in 10 20 30 do scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root172.25.254.$i:/mnt ssh -l root 172.25.254.$i rpm -ivh /mnt/mha4mysql-node-0.58-0.el7.centos.noarch.rpm --nodeps done3. 修改 MHA-Manager 中的检测代码[rootmha MHA-7]# vim /usr/share/perl5/vendor_perl/MHA/NodeUtil.pm 199 #sub parse_mysql_major_version($) { 200 # my $str shift; 201 # my $result sprintf( %03d%03d, $str ~ m/(\d)/g ); 202 # return $result; 203 #} sub parse_mysql_major_version($) { my $str shift; my nums $str ~ m/(\d)/g; my $result sprintf( %03d%03d, $nums[0]//0, $nums[1]//0); return $result; }4. 为 MHA 建立远程登录用户# 在 Master 主机中创建用于复制和管理的用户 mysql create user root% identified with mysql_native_password by lee; mysql GRANT ALL ON *.* TO root% ;5. 生成并修改 MHA-Manager 配置文件# 创建配置目录 [rootmha MHA-7]# mkdir /etc/masterha/ -p [rootmha MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz [rootmha MHA-7]# cd mha4mysql-manager-0.58 # 合并默认配置模板生成 app1.cnf [rootmha mha4mysql-manager-0.58]# cat samples/conf/masterha_default.cnf samples/conf/app1.cnf /etc/masterha/app1.cnf # 编辑配置文件定义服务器角色和网络信息 [rootmha mha4mysql-manager-0.58]# vim /etc/masterha/app1.cnf # 关键配置项示例 # [server default] # userroot # passwordlee # ssh_userroot # repl_userlee # repl_passwordlee # master_binlog_dir /data/mysql # [server1] hostname172.25.254.10 candidate_master1 # [server2] hostname172.25.254.20 candidate_master1 # [server3] hostname172.25.254.30 no_master16. 检测环境健康状态# 检测 SSH 互信是否正常 [rootmha mha4mysql-manager-0.58]# masterha_check_ssh --conf/etc/masterha/app1.cnf # 检测 MySQL 复制状态是否正常 [rootmha mha4mysql-manager-0.58]# masterha_check_repl --conf/etc/masterha/app1.cnf7. 在 Slave 中安装 MHA-Node 软件依赖# 在所有数据库主机中安装 Perl 依赖 [rootmysql-node1~3 ~]# dnf install perl perl-DBD-MySQL perl-CPAN -y # 安装 CPAN 模块 (Config::Tiny, Log::Dispatch, Mail::Sender, Parallel::ForkManager) [rootmysql-node1~3 ~]# cpan # ... (交互安装过程同上) ... # 验证模块是否安装成功 [rootmysql-node1~3 ~]# perl -MConfig::Tiny -e print OK\n [rootmysql-node1~3 ~]# perl -MLog::Dispatch -e print OK\n [rootmysql-node1~3 ~]# perl -MMail::Sender -e print OK\n [rootmysql-node1~3 ~]# perl -MParallel::ForkManager -e print OK\n 8. 集群切换操作手动切换# 场景一Master 无故障切换在线切换 # 执行切换命令将 Master 切换到 172.25.254.20 [rootmha ~]# masterha_master_switch \ --conf/etc/masterha/app1.cnf \ --master_statealive \ --new_master_host172.25.254.20 \ --new_master_port3306 \ --orig_master_is_new_slave \ --running_updates_limit10000 # 根据提示输入 yes 确认执行 # 场景二Master 故障后切换 # 模拟 Master 宕机后的手动故障转移 [rootmha ~]# masterha_master_switch \ --master_statedead \ --conf/etc/masterha/app1.cnf \ --dead_master_host172.25.254.10 \ --dead_master_port3306 \ --new_master_host172.25.254.20 \ --new_master_port3306 \ --ignore_last_failover # 根据提示输入 yes 确认执行9. 故障恢复与自动切换# 故障恢复删除切换锁文件并重新配置原 Master 为 Slave [rootmha ~]# rm -fr /etc/masterha/app1.failover.complete [rootmysql-node2 ~]# mysql -uroot -plee -e reset slave; [rootmysql-node1 ~]# /etc/init.d/mysqld start [rootmysql-node1 ~]# mysql -uroot -plee -e CHANGE MASTER TO MASTER_HOST172.25.254.20, MASTER_USERlee, MASTER_PASSWORDlee, MASTER_AUTO_POSITION1; [rootmysql-node1 ~]# mysql -uroot -plee -e start slave; # 开启自动切换功能 [rootmha ~]# /etc/masterha/*.log # 后台启动 MHA Manager 监控进程 [rootmha ~]# masterha_manager --conf/etc/masterha/app1.cnf 切换前切换后10. VIP 功能及启动切换脚本配置# 复制 VIP 切换脚本到配置目录 [rootmha ~]# mkdir /etc/masterha/scripts [rootmha ~]# cp MHA-7/master_ip_* /etc/masterha/scripts # 修改配置文件启用脚本 [rootmha ~]# vim /etc/masterha/app1.cnf # 添加以下行 # master_ip_failover_script /etc/masterha/scripts/master_ip_failover # master_ip_online_change_script /etc/masterha/scripts/master_ip_online_change # 修改脚本中的 VIP 地址 [rootmha ~]# vim /etc/masterha/scripts/master_ip_failover # 设置 my $vip 172.25.254.100/24; [rootmha ~]# vim /etc/masterha/scripts/master_ip_online_change # 设置 my $vip 172.25.254.100/24; # 手动绑定 VIP 测试 [rootmysql-node1 ~]# ip a a 172.25.254.100/24 dev eth0