​搭建Mysql-MHA高可用服务

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工作原理

  1. MHA Manager会定时检测集群中的master节点

  2. 当master发生故障后,保存二进制日志事件(binlog events)

  3. MHA Node识别含有最新更新数据的slave

  4. MHA Node从最新的slave中应用差异的中继日志(relay log)到其他的slave,保证新的MySQL主从同步架构中数据的一致性

  5. slave应用从master保存的二进制日志事件(binlog events)

  6. 提升一个最新数据的slave作为新的master

  7. 使其他的slave连接新的master进行复制

案例实现思路

1、(1)安装 MySQL 数据库; (2)搭建时间同步服务器; (3)配置MySQL一主两从; (4)安装MHA软件; (5)配置无密码认证; (6)配置MySQL-MHA高可用; (7)模拟master故障切换

2、案例需求

要求通过 MHA 监控 MySQL 数据库在故障时进行自动切换,不影响业 务。

一、案例环境

操作系统主机名ip地址软件
Centos7.9master192.168.10.128mha4mysql-node-0.57.tar.gz
Centos7.9slave1192.168.10.129mha4mysql-node-0.57.tar.gz
Centos7.9slave2192.168.10.130mha4mysql-node-0.57.tar.gz
Centos7.9manager192.168.10.131mha4mysql-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>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值