1、MHA简介
MHA,由日本DeNA公司开发
-
一套优秀的MySQL高可用环境下故障切换和主从复制的软件
-
MySQL故障过程中,MHA能做到0-30s内自动完成故障切换,并在故障切换的过程中,最大程度上保证主从数据的一致性
-
MySQL故障切换中对应应用程序是完全透明的
-
MHA还支持在线快速将master切换到其他主机,通常0.5-2s切换
2、MHA组成
(1)MHA Manager(管理节点)
MHA Manager:负责检查master是否宕机、控制故障转移、检查msql数据复制情况等。它可以自动将最新数据的slave节点提升为新的master,然后将其他的slave重新指向新的master。
MHA Manager:可以单独部署在一台独立的机器上,管理多个master-slave集群;也可以部署在一台slave节点上。
(2)MHA Node(数据节点)
MHA Node:负责复制和保存master上的二进制日志;识别差异的中继日志并应用到slave节点;不需要停止从节点的SQL线程,定时清除**中继日志**。
MHA Node:运行在每台MySQL服务器上
3、MHA特点
-
0-30s内可以快速实现master故障切换
-
自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
-
使用半同步复制,不会存在主从数据不一致的情况
-
MHA Manager会定时检查集群中的master节点。当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。也可以指定任命其中一台slave作为新的master。
4、MHA工作原理
-
MHA Manager会定时检测集群中的master节点
-
当master发生故障后,保存二进制日志事件(binlog events)
-
MHA Node识别含有最新更新数据的slave
-
MHA Node从最新的slave中应用差异的中继日志(relay log)到其他的slave,保证新的MySQL主从同步架构中数据的一致性
-
slave应用从master保存的二进制日志事件(binlog events)
-
提升一个最新数据的slave作为新的master
-
使其他的slave连接新的master进行复制
案例实现思路
1、(1)安装 MySQL 数据库; (2)搭建时间同步服务器; (3)配置MySQL一主两从; (4)安装MHA软件; (5)配置无密码认证; (6)配置MySQL-MHA高可用; (7)模拟master故障切换
2、案例需求
要求通过 MHA 监控 MySQL 数据库在故障时进行自动切换,不影响业 务。
一、案例环境
操作系统 | 主机名 | ip地址 | 软件 |
---|---|---|---|
Centos7.9 | master | 192.168.10.128 | mha4mysql-node-0.57.tar.gz |
Centos7.9 | slave1 | 192.168.10.129 | mha4mysql-node-0.57.tar.gz |
Centos7.9 | slave2 | 192.168.10.130 | mha4mysql-node-0.57.tar.gz |
Centos7.9 | manager | 192.168.10.131 | mha4mysql-node-0.57.tar.gz mha4mysql-manager-0.57.tar.gz |
注意:四台虚拟机都需要联网,使用网络yum, 前三台需要安装mysql数据库;
关闭防火墙(四台同时执行)
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@centos7.9 ~]# systemctl stop firewalld.service
[root@centos7.9 ~]# systemctl disable firewalld.service</span></span>
关闭安全内核机制(四台同时执行)
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@centos7.9 ~]# setenforce 0</span></span>
修改主机名
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@centos7.9 ~]#hostnamectl set-hostname master
[root@centos7.9~]#hostnamectl set-hostname slave1
[root@centos7.9 ~]#hostnamectl set-hostname slave2
[root@centos7.9 ~]#hostnamectl set-hostname manager</span></span>
添加映射文件
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@centos7.9 ~]# cat >> /etc/hosts << EOF
192.168.10.128 master
192.168.10.129 slave1
192.168.10.130 slave2
192.168.10.131 manager
EOF</span></span>
二、案例实施 搭建MySQL+MHA
一、安装 MySQL 数据库; (已安装)
二、搭建时间同步服务器(htp或者同步阿里云服务器时间“同步阿里云需要联网”)
若使用htp服务则master搭建ntp服务,让其余2台slave同步时间
或者[root@centos7 ~]# ntpdate ntp.aliyun.com (最小化版本需要安装ntpdate)
三、配置MySQL一主两从;
1)修改master的mysql配置文件/etc/my.cnf
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:red">[root@master</span> <span style="color:red">~]#</span> <span style="color:red">vim</span> <span style="color:red">/etc/my.cnf</span>
<span style="color:red">#在第三行下方添加3行</span>
<span style="color:red">server-id=1</span>
<span style="color:red">log-bin=mysql-bin</span>
<span style="color:red">log-slave-updates=true</span>
<span style="color:red">[root@master</span> <span style="color:red">~]#</span> <span style="color:red">systemctl</span> <span style="color:red">restart</span> <span style="color:red">mysqld</span> </span></span>
2)修改slave1和slave2的mysql配置文件 /etc/my.cnf
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:red">[root@slave1</span> <span style="color:red">~]#</span> <span style="color:red">vim</span> <span style="color:red">/etc/my.cnf</span>
<span style="color:red">#在第三行下方添加5行</span>
<span style="color:red">server-id=2</span> <span style="color:red">//server-id</span> <span style="color:red">不能相同,两台</span> <span style="color:red">slave</span> <span style="color:red">服务器的</span> <span style="color:red">id</span> <span style="color:red">分别配置为</span> <span style="color:red">2和3</span>
<span style="color:red">relay-log=relay-log-bin</span>
<span style="color:red">relay-log-index=slave-relay-bin.index</span>
<span style="color:red">log-bin=mysql-bin</span>
<span style="color:red">relay_log_purge=0</span> <span style="color:red">//是否自动删除中继日志,默认值为1,0为手动清除</span>
<span style="color:red">[root@slave1</span> <span style="color:red">~]#</span> <span style="color:red">systemctl</span> <span style="color:red">restart</span> <span style="color:red">mysqld</span>
<span style="color:red">注意:</span> <span style="color:red">server-id</span> <span style="color:red">不能相同,两台</span> <span style="color:red">slave</span> <span style="color:red">服务器的</span> <span style="color:red">id</span> <span style="color:red">分别配置为</span> <span style="color:#116644">2</span> <span style="color:red">和</span> <span style="color:red">3,其他相同。</span></span></span>
MySQL授权
3)在三个数据库节点上授权两个用户,一个是数据库同步用户,一个是mha监控用户
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# mysql -u root -p
mysql> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
mysql> grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';</span></span>
三个数据库通过主机名授权
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> grant all privileges on *.* to 'mha'@'master' identified by 'manager';
mysql> grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';
mysql> grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';</span></span>
查看二进制文件和同步点
4)在master主机上查看二进制文件和同步点
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> show master status;</span></span>
5)两台从节点连接主节点<(分别在slave和slave2执行)
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:red">mysql></span> <span style="color:red">change</span> <span style="color:red">master</span> <span style="color:#770088">to</span> <span style="color:red">master_host=</span><span style="color:#aa1111">'192.168.10.128'</span><span style="color:red">,master_user=</span><span style="color:#aa1111">'myslave'</span><span style="color:red">,master_password=</span><span style="color:#aa1111">'123456'</span><span style="color:red">,</span>
<span style="color:red">master_log_file=</span><span style="color:#aa1111">'mysql-bin.000001'</span><span style="color:red">,master_log_pos=1593;</span>
<span style="color:red">mysql></span> <span style="color:red">start</span> <span style="color:red">slave;</span></span></span>
slave1和slave2 查看数据同步结果
查看 IO 和 SQL 线程都是 yes 代表同步是否正常
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> show slave status\G;</span></span>
slave1和slave2必须设置两个从库为只读模式
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> set global read_only=1; //1是只读, 0是读写</span></span>
插入数据测试数据库同步
1.在master主库插入数据,测试是否同步
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> create database test_db;
Query OK, 1 row affected (0.03 sec)
mysql> use test_db;
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test values('1');
Query OK, 1 row affected (0.02 sec)
</span></span>
2.在两个从库slave1和slave2分别查询数据是否同步结果如下
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> show databases; //查看是否存在test_db库
mysql> use test_db;
mysql> show tables; //查看是否存在test表
mysql> select * from test; //查看数据是否一致,一致则证明同步成功</span></span>
四、安装 MHA 软件
1)四台服务器上都安装 MHA 依赖的环境,首先安装 epel 源
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# yum -y install epel-release //安装epel下载源
[root@master ~]# yum makecache //建立缓存
[root@master ~]# yum install -y perl-DBD-MySQL perl-Log-Dispatch perl-Parallel-ForkManager perl-Config-Tiny perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN //安装7个软件包</span></span>
2)上传软件包,在四台服务器上安装 node 组件,最后在 manager 节点上安装 manager 组件,因为 manager 依赖 node 组件
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# tar zxvf mha4mysql-node-0.57.tar.gz
[root@master ~]# cd mha4mysql-node-0.57/
[root@master mha4mysql-node-0.57]# perl Makefile.PL
[root@master mha4mysql-node-0.57]# make
[root@master mha4mysql-node-0.57]# make install</span></span>
3)在manager上安装manager组件和node组件
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# tar zxvf mha4mysql-manager-0.57.tar.gz
[root@manager ~]# cd mha4mysql-manager-0.57
[root@manager mha4mysql-manager-0.57]# perl Makefile.PL
[root@manager mha4mysql-manager-0.57]# make
[root@manager mha4mysql-manager-0.57]# make install</span></span>
manager安装后在/usr/local/bin下面会生成几个工具
masterha_check_ssh:检查 MHA 的 SSH 配置状况
masterha_check_repl:检查 MySQL 主从复制状况
masterha_check status:检测当前 MHA 运行状态
masterha_master monitor:检测 master 是否宕机
masterha_master switch:控制故障转移(自动或者手动)
masterha_manger:启动 MHA
masterha_stop:停止 MHA
masterha_conf_host:添加或删除配置的 server 信息</font>
node 安装后也会在/usr/local/bin 下面会生成几个脚本(这些工具通常由 MHA Manager的脚本触发,无需人为操作)
save_binary_logs:保存和复制 master的二进制日志。
apply_diff_relay_logs:识别差异的中继日志事件并将其差异的事件应用于其他的 slave.
filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA已不再使用这个工具)。
purge_relay_logs:清除中继日志(不会阻塞 SQL 线程)。
五、四台全部配置无密码认证 (实现远程控制和数据管理)
1)在 manager 上配置到所有节点的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# ssh-keygen -t rsa //一直按回车键,生成密钥对
[root@manager ~]# ssh-copy-id 192.168.10.128
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.10.128's password: 123456
[root@manager ~]# ssh-copy-id 192.168.10.129
[root@manager ~]# ssh-copy-id 192.168.10.130</span></span>
2)在 master 上配置到数据库节点的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id 192.168.10.129
[root@master ~]# ssh-copy-id 192.168.10.130</span></span>
3)在slave1 上配置到数据库节点的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@slave1 ~]# ssh-keygen -t rsa
[root@slave1 ~]# ssh-copy-id 192.168.10.128
[root@slave1 ~]# ssh-copy-id 192.168.10.130</span></span>
4)在 slave2 上配置到数据库节点的无密码认证
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@slave2 ~]# ssh-keygen -t rsa
[root@slave2 ~]# ssh-copy-id 192.168.10.128
[root@slave2 ~]# ssh-copy-id 192.168.10.129</span></span>
六、配置 Mysql-MHA高可用
1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# ll /root/mha4mysql-manager-0.57/samples/scripts/
[root@manager ~]# cp /root/mha4mysql-manager-0.57/samples/scripts/* /usr/local/bin/ // 优化脚本管理</span></span>
脚本作用如下:
-
master_ip_failover:自动切换 VIP 管理的脚本
-
master_ip_online_change:在线切换 vip 的管理的脚本
-
power_manager:故障发生后关闭主机的脚本
-
send_report:因故障切换后发送报警的脚本
MHA引入VIP有两种方式,一种是使用Keepalived,一种是使用MHA自带的脚本
复制“master_ip_failover”脚本到/usr/local/bin 目录,这里使用脚本管理 VIP,也是推荐 的一种方式,生产环境不建议使用 Keepalived。
2)使用下面内容完整替换 master_ip_failover 文件的内容, IP 部分更换为自己的 IP 地址
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# cd /usr/local/bin/
[root@manager bin]# mv master_ip_failover{,.bak} //备份原文文件
将master_ip_failover上传到/usr/local/bin //上传的文件不需要修改
[root@manager bin]# chmod +x master_ip_failover //添加可执行权限</span></span>
3)在manager上创建 MHA 软件目录并拷贝配置文件
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# mkdir /etc/masterha
[root@manager ~]# cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/
[root@manager ~]# mkdir -p /var/log/masterha/app1
[root@manager ~]# cd /etc/masterha/
[root@manager masterha]# mv app1.cnf{,.bak} //备份源文件
将app1.cnf 上传到/etc/masterha目录下
[root@manager masterha]# ls
app1.cnf app1.cnf.bak
[root@manager masterha]# vim app1.cnf //上传的文件不需要修改</span></span>
文件内容:
[server default]
manager_log=/var/log/masterha/app1/manager.log //设置manager管理日志目录 manager_workdir=/var/log/masterha/app1 //定义manager工作目录 master_binlog_dir=/usr/local/mysql/data //保存二进制日志目录 master_ip_failover_script=/usr/local/bin/master_ip_failover //设置自动切换的脚本 master_ip_online_change_script=/usr/local/bin/master_ip_online_change //设置手动切换的脚本 user=mha //登录数据库监控的用户 password=manager //登录数据库监控用户的密码 ping_interval=1 //设置监控主库,ping 包时间间隔,默认为3s,尝试3次没有回应,则自动故障切换 remote_workdir=/tmp //设置远端mysql发生故障切换时binlog的保存位置 repl_password=123456 //mysql主从复制用户的密码 repl_user=myslave //mysql主从复制用户 secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.10.129 -s 192.168.10.130 //检测node节点 shutdown_script="" //强制关闭master,避免它再次提供服务 ssh_user=root //SSH 登录用户名 [server1] //谁在上即为主(优先级) hostname=192.168.10.128 port=3306
[server2] candidate_master=1 //设为候选master //设置为候选 master, 如果设置该参数以后, 发生主从切换以后会将此从库提升为主库, 即使这个主库不是集群中最新的 slave check_repl_delay=0 //默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master。 hostname=192.168.10.129 port=3306
[server3] hostname=192.168.10.130 port=3306
4) 在manager上测试 ssh 无密码认证, 如果正常最后会输出 successfully
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:red">[root@manager</span> <span style="color:red">masterha]#</span> <span style="color:red">masterha_check_ssh</span> <span style="color:red">-conf=/etc/masterha/app1.cnf</span></span></span>
5) 在manager测试 mysq 主从连接情况, 最后出现 MySQL Replication Health is OK 字样说明正
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:red">[root@manager</span> <span style="color:red">masterha]#</span> <span style="color:red">masterha_check_repl</span> <span style="color:red">--conf=/etc/masterha/app1.cnf</span></span></span>
如果执行过程中出现报错信息如上图:
解决方案:
采用设置软连接的方式,分别在master和slave1、slave2三台mysql上都执行
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
[root@master ~]# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql</span></span>
如果在执行过程中,有如下报错信息:
6)首次配置 MHA 的 VIP 地址需要手动进行配置,在master 上执行如下命令 :
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# ifconfig ens33:1 192.168.10.200 // 设置漂移地址
[root@master ~]# ifconfig ens33:1</span></span>
7) 在manager启动 MHA
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager masterha]# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover </dev/null> /var/log/masterha/app1/manager.log 2>&1 &</span></span>
-
nohup:不中断执行某条命令
-
masterha_manager:manager启动命令
-
--conf=/etc/masterha/app1.cnf:配置文件
-
--remove_dead_master_conf:表当发生主从切换后,老的主库的 IP 地址将会从配置文件中移除
-
--ignore_last_failover:忽略上一次的故障转移
-
</dev/null> /var/log/masterha/app1/manager.log 2>&1 :先将文件输出到垃圾桶,再将文件输出到日志文件
-
&:以后台方式运行
若要关闭 manager 服务,可以使用如下命令 :
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager bin]# masterha_stop --conf=/etc/masterha/app1.cnf
或者可以直接采用 kill 进程ID的方式关闭
[root@manager ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:7763) is running(0:PING_OK), master:192.168.10.128
</span></span>
8)查看 MHA 状态,可以看到当前的 master 节点
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager masterha]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:20164) is running(0:PING_OK), master:192.168.10.128</span></span>
9)查看 MHA 日志,也以看到当前的 master 是 192.168.10.128,如下所示
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# cat /var/log/masterha/app1/manager.log</span></span>
七、模拟 master 故障切换
一、自动切换
1)关闭当前的 master 服务(以下三种方法选择一种)
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# pkill -9 mysql
[root@master ~]# systemctl stop mysqld //也可以采用下面两种方法
[root@master ~]# mysqladmin -uroot -p shutdown</span></span>
2) manager 观察 MHA 日志,如果自动切换成功,最后会输出 successfully 字样
注意: VIP地址不会因为manager节点停止而消失
3) 正常自动切换一次后, MHA 进程会退出。 MHA 会自动修改 app1.cnf 文件内容, 将宕机的 mysql 节点删除。 查看slave1是否接管 VIP。
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@slave1 ~]# ifconfig
[root@slave1 ~]# ifconfig ens33:1
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.200 netmask 255.255.255.0 broadcast 192.168.10.255
ether 00:0c:29:1c:29:36 txqueuelen 1000 (Ethernet)</span></span>
在manager上查看/etc/masterha/目录查看app1.cnf文件,server1已自动删除
[root@manager masterha]# vim app1.cnf
如主库恢复正常后,使其重新加入群集,并将 master 作为新的从库
4)查看slave1是否接管 VIP并关闭从库,清除中继日志
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 1593
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql> stop slave; //关闭从库
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> reset slave; //清除中继日志
Query OK, 0 rows affected (0.00 sec)</span></span>
5)启动原来的master 主库 //先查看新的master上面的二进制日志和pos位置 ,启动从库并设置为只读
查看新的master也就是slave1的二进制日志和pos位置(192.168.10.129上查)
<span style="background-color:#f8f8f8"><span style="color:#333333">mysql> show master status;</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@master ~]# systemctl start mysqld
mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.129',
MASTER_PORT=3306,MASTER_USER='myslave', MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=1593;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G; //查看结果如下图
mysql> set global read_only=1;</span></span>
二、手动切换
1)修改manager上的修改配置文件/etc/masterha/app1.cnf
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# vim /etc/masterha/app1.cnf
复制17-21行内容到第16行位置
17 [server1] //将 [server2] 改为 [server1]
18 candidate_master=1
19 check_repl_delay=0
20 hostname=192.168.10.128 //将“192.168.10.129”改为“192.168.10.128”
21 port=3306
删除[server2]下的“candidate_master=1”和“check_repl_delay=0”两行内容 修改后的如下图
23 [server2]
24 hostname=192.168.10.129
25 port=3306
[root@manager masterha]# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover </dev/null> /var/log/masterha/app1/manager.log 2>&1 & //重新启动
</span></span>
2)manager 查看当前主库
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager masterha]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:10623) is running(0:PING_OK), master:192.168.10.129 //当前显示主库依然是129</span></span>
3)manager 停止 MHA,手动设置当前的主库 slave1 为 dead,最后的报错没有影响
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# masterha_stop --conf=/etc/masterha/app1.cnf //停止MHA
[root@manager ~]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=dead --dead_master_host=192.168.10.129 //手动设置当前的主库 slave1 为 dead
Tue Jun 14 21:06:59 2022 - [error][/usr/local/share/perl5/MHA/ManagerUtil.pm, ln177] Got ERROR: at /usr/local/bin/masterha_master_switch line 53. //报错没有影响
[root@manager ~]# masterha_check_status --conf=/etc/masterha/app1.cnf //再次检查主库的状态
app1 is stopped(2:NOT_RUNNING). </span></span>
4)manager 修改配置文件,否则会报错
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# vim /usr/local/bin/master_ip_online_change
152 #FIXME_xxx_drop_app_user($orig_master_handler); //前方添加“#”</span></span>
5)manager 重新执行设置新的 master 为 alive 命令
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@manager ~]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.10.128 --orig_master_is_new_slave #再次把10.128作为主库
It is better to execute FLUSH NO_WRITE_TO_BINLOG TABLES on the master before switching. Is it ok to execute on 192.168.10.129(192.168.10.129:3306)? (YES/no): yes
Starting master switch from 192.168.10.129(192.168.10.129:3306) to 192.168.10.128(192.168.10.128:3306)? (yes/NO): yes
Tue Jun 14 21:14:09 2022 - [info] Switching master to 192.168.10.128(192.168.10.128:3306) completed successfully. #切换成功</span></span>
注意:手动切换master后,记得重新恢复主从复制集群;手动切换主库,VIP不会漂移。
6)手动改变漂移地址
<span style="background-color:#f8f8f8"><span style="color:#333333">在(slave 192.168.10.129)上, 将192.168.10.200 down掉
[root@slave1 ~]# ifconfig ens33:1
[root@slave1 ~]# ifconfig ens33:1 down
在10.128上写出来
[root@master ~]# ifconfig ens33:1 192.168.10.200
[root@master ~]# ifconfig ens33:1
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.200 netmask 255.255.255.0 broadcast 192.168.10.255
ether 00:0c:29:55:e3:51 txqueuelen 1000 (Ethernet)</span></span>