数据库
首页 > 数据库> > mysql的高可用切换

mysql的高可用切换

作者:互联网

mysql的高可用切换

mysql的高可用切换

我们前面在做主从的时候是我们手动的分配的server1是主,
server2从库存在意义就是,主库宕机的时候,去接替它的工作,
但是自动转换,主库往从库转换是第三方软件MHA来做的(人为来做的话,效率太低了)
MHA是一个日本人开发的,这个日本人现在Facebook工作,
MHA的前提是做好主从,我们使用server1,server2,server3来做高可用,

关闭三台主机mysqld,都配置主从复制和gtid复制

先将三台机器的主从给停止了
server1,server2,server3同时执行

systemctl stop mysqld

将主从复制和gtid复制的配置写在里面
(其实也可以在主从复制的基础上做半同步复制使高可用更可靠)
在这里插入图片描述

三个是做主从切换的,所以每台主机机可能称为master也可能称为slave,
所以要开启binlog日志(主才开),现在都可能为主,所以就每个都打开binlog日志
Server1:

 vim /etc/my.cnf
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog

在这里插入图片描述

Server2:

在这里插入图片描述

在这里插入图片描述

Server3:
在这里插入图片描述
在这里插入图片描述

启动1的mysql,初始化,授权

现在认为server1是主,server2和server3是server1的从库
Server1:
在这里插入图片描述

mysql_secure_installation

然后设置server1为主库,
参考Mysql(1.1)主从复制_1的配置:

grant replication slave on *.* to huige@'172.25.21.%' identified by 'Westos.123';

在这里插入图片描述

配置2的mysql启动,初始化,配置Gtid指定主库

然后做从
Server2:
在这里插入图片描述
在这里插入图片描述

然后从机上的操作是基于Gtid的主从复制:

change master to master_host ='172.25.21.1', #指定主库的ip地址
master_user='huige', #从库复制的主库的用户
master_password='Westos.123', #主库的密码,注意我们这里的密码改了
master_auto_position=1; #设定为自动

start slave

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3的mysql和2操作相同

Server3:

systemctl start mysqld
cat /var/log/mysqld.log | grep password

在这里插入图片描述

mysql_secure_installation 
mysql -uroot -pWestos.123

在这里插入图片描述

start slave;
show slave status\G

在这里插入图片描述
在这里插入图片描述

开启一台server4,模拟偶数选举票数相同情况

然后我们再准备一台server4
在线上的操作中一般都是3台,
这样的话如果主宕机了,三台主机就可以投票选举出一个主机来做新的master,
如果是偶数的服务器数量就会出现票数相同的情况

Server4:
在这里插入图片描述

安装MHA的管理包和node包

下载MHA的管理节点和perl相关包,还有MHA的节点安装包

yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm perl-* mha4mysql-node-0.58-0.el7.centos.noarch.rpm
在这里插入图片描述

4做免密连接1,2,3

做免密操作,
Server4要免密连接server1,server2,server3

ssh-keygen
ssh-copy-id server1
ssh-copy-id server2
ssh-copy-id server3

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他节点配置MHAnode包

在其他节点上配置MHA的node包
可以看到我们传输文件是免密的
在这里插入图片描述

给server1,server2,server3同时执行如下命令

yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm 

给高可用一个信息,告诉高可用主机,mysql节点是怎么工作的

配置高可用主机4的高可用配置文件

Server4:

mkdir /etc/masterha/
vim /etc/masterha/app1.cnf
[server default]
manager_workdir=/etc/masterha     #MHA的主目录
manager_log=/var/log/masterha.log   #MHA的日志文件
master_binlog_dir=/etc/masterha      #binlog日志目录
#master_ip_failover_script=/usr/local/bin/master_ip_failover   #这里是两个脚本
#master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=Westos.123    #mysql的管理员帐号和密码
user=root
ping_interval=1    
remote_workdir=/tmp
repl_password=Westos.123    #复制用户的帐号和密码(复制master的数据使用端的数据库用户)
repl_user=huige
#report_script=/usr/local/send_report
#secondary_check_script=/usr/local/bin/masterha_secondary_check -s server03 -s server02
#shutdown_script=""
ssh_user=root    #系统ssh用户,使用这个用户去免密的连接server1,server2,server3

[server1]
hostname=172.25.21.1
port=3306

[server2]
hostname=172.25.21.2
port=3306
candidate_master=1   #这个参数为1,说明server2在主机宕机后有资格转换为master
check_repl_delay=0    #检查交互解释器repl的时延
[server3]
hostname=172.25.21.3
port=3306
no_master=1      #no_master表示这个节点不呢个做为master(我们先让server3作为backup,来试一试no_master这个参数)
masterha_check_ssh --conf=/etc/masterha/app1.cnf

检测ssh功能,出错,进行排错

在这里插入图片描述

检测ssh功能是否可用
这里可以看到检测三个节点的ssh的结果是失败的
在这里插入图片描述
在这里插入图片描述

根据报错可以看到是因为

1,2,3两两之间做好免密

scp -r /root/.ssh/ server1:
scp -r /root/.ssh/ server2:
scp -r /root/.ssh/ server3:

在这里插入图片描述
测试是否免密

然后再测试server1和server2,server3之间是否免密
Server1:
在这里插入图片描述

Server2:
在这里插入图片描述

Server3:
在这里插入图片描述

测试ssh可用

Server4:
再次检测高可用的ssh功能是否可用
在这里插入图片描述
在这里插入图片描述

测试复制功能

做完免密后ssh就正常了
然后去检测一下复制功能(根据我们自己写的这个配置文件)
能不能用,,能不能连接上远程数据库
masterha_check_repl --conf=/etc/masterha/app1.cnf
在这里插入图片描述
在这里插入图片描述

可以看到mysql的复制功能健康没有配置正确
我们再仔细看下报错:
Server4默认使用的root用户来连接数据,
但是在配置高可用集群的时候我们使用了root用户还
使用了普通用户huige来登陆数据库

在这里插入图片描述

4默认使用root用户连接主机,在主库给root授权

报错提示让我们检查mysql(master)的设置
我们给主库的root用户添加权限
Server1:

grant all on *.* to root@'%' identified by 'Westos.123';

在这里插入图片描述

测试成功

再次测试高可用的复制功能,可以看到这里的复制功能可以使用了
在这里插入图片描述
在这里插入图片描述

开启4的MHA,查看是否成功

然后测试server4的MHA能不能正常开启

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

在这里插入图片描述

关掉MHA,测试手动切换

我们看到这个高可用是开启的
我们现在先将高可用给关掉
然后我们先进行手动切换
感受一下切换的过程
Server4:

masterha_stop --conf=/etc/masterha/app1.cnf 

在这里插入图片描述

先测试手动切换是否可以成功:

关掉server1的mysql,将server1 master迁移到server2上 #死切

Server1:

systemctl stop mysqld

在这里插入图片描述

关掉server1上的mysql后,这样mysql master就死掉了
我们现在要手动来将master迁到server2上去,
Server4:

masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=172.25.21.1 --dead_master_ip=172.25.21.1 --dead_master_port=3306 --new_master_host=172.25.21.2 --new_master_port=3306

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#注意第一遍我们执行的时候由于应该输入yes的时候,输成了别的,
然后我就使用Ctrl +C中断了命令的执行
我再次执行这个命令时报错如下:

file /etc/masterha/app1.failover.error exists

在这里插入图片描述

然后根据报错,可以知道是该命令执行错了以后会生成一个
/etc/masterha/app1.failover.error文件,有这个文件
则执行 masterha_master_switch命令手动迁移master到server2时会失败
(因为这个命令是否出错,读取的就是这个文件,所以我们将这个文件删掉即可)

 rm -fr  /etc/masterha/app1.failover.error

手动迁移成功后,
去server3上:
因为server3是加入到高可用节点中的,所以是可以检测到server2变成了master
在这里插入图片描述
在这里插入图片描述

可以看到这里新的master已经变成了server2

MHA只管主从切换
我们要手动保证每个节点的主从复制都是没有问题的
这时我们启动server1的mysql
再将server1上的mysql加到主从复制节点中去
Server1:
在这里插入图片描述

这时server1就变成了备机
这时我们就要重新配置Gtid的主从复制:
主变成了server2
给server1在数据库中配置新的Gtid主从复制:

Server1:

change master to master_host ='172.25.21.2',
master_user='huige',
master_password='Westos.123',
master_auto_position=1;

在这里插入图片描述

start slave;

在这里插入图片描述
在这里插入图片描述

在我们切换完后在server4中的cd /etc/masterha/中会生成一个app1.failover.complete文件是进行错误域的转换记录
在这里插入图片描述

下一次我们进行测试时要将这个文件给删掉
在这里插入图片描述

否则下次就不成功了
在master server2的mysql正常运行的话, #活切
我们进行将master切换到server1上
注意我们不能将/etc/masterha下的app1.cnf给删掉

masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.21.1 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

敲三个yes
在这里插入图片描述
在这里插入图片描述

可以看到活切成功

Server2:
在这里插入图片描述

Server3:
在这里插入图片描述

活切测试成功

手动的死切和活切都实现了

半自动切换主从(底层的主从还是要自己手动来做):
我们在切完后,下次测试之前一定要将 app1.failover.complete删掉
nohup masterha_manager --conf=/etc/masterha/app1.cnf &>/dev/null &
#注意这个命令&>/dev/null中间不能有空格
在这里插入图片描述

我们让MHA自己去检测,把MHA自带的守护进程开启在后台
在这里插入图片描述

kill -9 721
在这里插入图片描述

我们将server1上的mysql进程给删掉
然后发现这个mysql自动开启
(MHA的半自动切换模式可以帮我们监控节点上的mysql依赖是否停止,如果停止,帮我们自动开启mysql)
在这里插入图片描述

这时将server1上面的mysql给停掉
在这里插入图片描述

使用MHA半自动切换

Server4:
刚才是手动,现在我们已经将这个进程在后台运行了
在这里插入图片描述

Server3:
我们去server3的数据库中查看:
在这里插入图片描述

可以看到server2已经自动变成新的master了
Server1:
然后再把server1上线:
在这里插入图片描述

给server1在数据库中配置新的Gtid主从复制:
Server1:

change master to master_host ='172.25.21.2',
master_user='huige',
master_password='Westos.123',
master_auto_position=1;

start slave;
show slave status\G

在这里插入图片描述

在这里插入图片描述

MHA全自动(使用脚本)

我们在做mysql高可用的时候,其实用户使用mysql时的接进来的IP只有一个,
谁是主谁拿到这个IP,用户不知道这个高可用集群有多少个,谁是主,谁是从,
由于用户的入口只有一个,所以这里就需要配置一个VIP(用户访问的IP)

我们把两个脚本下载下来:
在这里插入图片描述

配置自动删除和添加vip
在这里插入图片描述

我们去修改一下脚本的内容,把ssh vip修改一下
#将添加一个IP(VIP)的命令赋给一个添加vip变量
#将删出一个IP(VIP)的命令赋给一个删出vip变量

my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cp master_ip_failover master_ip_online_change /usr/local/bin

在这里插入图片描述

chmod +x master_ip_failover 
chmod +x master_ip_online_change

在这里插入图片描述

然后我们去/etc/masterha/下面清空app1.failover.complete
在这里插入图片描述

然后将app1.cnf中的两个脚本的注释符号删掉
在这里插入图片描述

我们将加完权限的脚本一定要放在app1.cnf中规定的路径

Server2现在是master,我们不需要手动给server2配vip(如果要将server2上的服务给server1时,后面如果某个出问题,往另一个切换时只有一个节点有vip)
这时我们来测vip的漂移
在这里插入图片描述

测试一次手动
将后台运行的高可用关掉(防止自动切换)
在这里插入图片描述

测试活切:
现在往server1上切

masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.21.1 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

敲三个yes
在这里插入图片描述

在这里插入图片描述

Server2:
在这里插入图片描述

Server3:
在这里插入图片描述

然后在server1:
Server1上有了vip,而且称为了master
在这里插入图片描述

全自动:
Server4:
可以看到没有错误域文件
在这里插入图片描述

将MHA开在后台,现在是全自动

nohup masterha_manager --conf=/etc/masterha/app1.cnf &>/dev/null &

在这里插入图片描述

这里有两种操作模式,手动和自动,
对数据库操作要非常谨慎
很多人不愿意使用全自动,不想将所有的资源都交给MHA服务来管理,想将资源都留在手边

然后将master主机server1上的mysql给关掉
在这里插入图片描述

Server4:
在这里插入图片描述

Server2已经切换过来

在server3上看一下:
在这里插入图片描述

master切换成server2
在这里插入图片描述

再看server1时发现vip被server2抢了去

标签:可用,--,server1,MHA,masterha,master,切换,mysql
来源: https://blog.csdn.net/qq_43309149/article/details/114776581