基于MHA的mysql主从复制的高可用

1.MHA

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于 Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在 0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

2.MHA工作模式

当一个master节点挂掉之后投票选出一个新的master(一般选出与原来master数据最接近的节点)。因此,每个节点都要安装master和slave插件。

3.搭建高可用

(1)server1/2/3搭建基于gtid的半同步:
server1(master),server2/3(slave) 配置文件/etc/my.cnf内容如下:

server_id=1		//server1/2/3只改这个数字
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=true

其他的配置内容参照前面的博客,里面有详细说明:https://blog.csdn.net/weixin_42195382/article/details/97627722

(2)因为当master挂掉后,其他节点需要充当master,因此三个节点都安装master和slave插件,并打开

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 1000000000000000;	//超时时间
show variables like '%rpl%';	//查看设置

(3)配置server4(高可用节点)
第一步:安装MHA所需要的软件
基于MHA的mysql主从复制的高可用_第1张图片
第二步:建立配置文件目录,编写配置文件

mkdir /etc/masterha
vim /etc/masterha/master.cnf
## 配置文件内容如下:
[server default]
manager_workdir=/etc/masterha
manager_log=/var/log/masterha.log
master_binlog_dir=/etc/masterha

password=Wsp+123ld
user=root
ping_interval=1
remote_workdir=/tmp
repl_password=Wsp+123ld
repl_user=repl
ssh_user=root

[server1]
hostname=172.25.0.1
port=3306

[server2]
hostname=172.25.0.2
port=3306
candidate_master=1		//原master挂掉之后,server2可以充当新master
check_repl_delay=0

[server3]
hostname=172.25.0.3
port=3306
no_master=1		//不能作为master

第三步:管理节点ssh连接检测masterha_check_ssh --conf=/etc/masterha/master.cnf,需要先做以下设定:

ssh-keygen 			//server4生成ssh免密
ssh-copy-id server4		//测试
ssh-copy-id server5
ssh-copy-id server6

scp -r ~/.ssh server4:		//因为两两之间都需要免密,因此还需要发送给其他节点
scp -r ~/.ssh server5:
scp -r ~/.ssh server6:

第四步:管理节点健康检测masterha_check_repl --conf=/etc/masterha/master.cnf,因为初始化数据库关闭了root远程登陆,所以需要先打开root远程登陆:

grant all on *.* to root@'%' identified by 'YLZ123+a';
flush privileges;

测试:
(1)手动实现master切换
关闭server1上的master;

stop master

手动切换:

masterha_master_switch --master_state=dead --conf=/etc/masterha/master.cnf 
--dead_master_host=172.25.60.1 --dead_master_ip=172.25.60.1 --dead_master_port=3306 \
--new_master_host=172.25.60.2 --new_master_port=3306

(2)手动实现master正常,切换master节点:
删除上一步的故障文件,并将server1加入新master组:

cd /etc/masterha/
rm -fr master.failover.complete

正常时切换:

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

你可能感兴趣的:(linux,mysql高可用)