Mysql双主双从高可用集群的搭建且与MyCat进行整合

时间:2023-12-14 00:00:50

1.概述

老话说的好:瞻前顾后、患得患失只会让我们失败,下定决心,干就完了。

言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只有一台,如果主节点宕机了,则数据库的写操作便无法完成,从而无法做到高可用。

因此,今天我们来聊一下Mysql双主双从的集群搭建,双主双从的原理很简单,相当于有两个一主一从,然后两个主节点再互为主从,互相复制数据,然后借助MyCat的机制,先把一台主作为写库,另一台主和两台从作为读库,当作为写库的主宕机后,另一台主则作为写库提供服务,从而实现高可用。如下图所示:

Mysql双主双从高可用集群的搭建且与MyCat进行整合

2. 场景介绍 

服务器A IP:192.168.1.22  (Mysql从1)(MyCat)

服务器B IP:192.168.1.12  (Mysql主1)

服务器C IP:192.168.1.15  (Mysql主2)

服务器D IP:192.168.1.16  (Mysql从2)

所有服务器都已安装了Mysql,且初始化完成,关于Mysql在CentOS7的安装,可参见我的另一篇文章《MyCat的快速搭建》(https://www.cnblogs.com/w84422/p/15394662.html)。

服务器B作为 主1,服务器A 作为 服务器B 的 从。

服务器C作为 主2,服务器D 作为 服务器C 的 从。

服务器B 和 服务器C 互为主从。

MyCat 已安装在服务器A上。MyCat的安装也可参见我的另一篇文章《MyCat的快速搭建》。

3. Mysql 双主双从集群的搭建

3.1 服务器B(主1)与服务器A(从1)的主从搭建

具体的搭建步骤已在上一篇文章详细介绍,这里就不再重复了,可参见我的上一篇文章《Mysql读写分离集群的搭建且与MyCat进行整合》(https://www.cnblogs.com/w84422/p/15401259.html)。

3.2 配置服务器C(主2)做为 服务器B(主1)的从

3.2.1 传输服务器B(主1)的数据到 服务器C(主2)

# scp dbdump.db root@192.168.1.15:/home

注:上一篇文章《Mysql读写分离集群的搭建且与MyCat进行整合》中已介绍了如何备份服务器B的数据,请参见此文章。 

3.2.2 在 服务器C(主2)还原 服务器B(主1)的 mysql 数据

# cd /home

# mysql < dbdump.db -uroot -p

3.2.3 修改 服务器C(主2)配置文件

# vim /etc/my.cnf

Mysql双主双从高可用集群的搭建且与MyCat进行整合

3.2.4 重启服务器C(主2)的 Mysql 服务

# systemctl restart mysqld

3.2.5 在 服务器C(主2)上设置主从同步配置

# mysql -u root -p

mysql> change master to
master_host='192.168.1.12',
master_user='repl',
master_password='Zhuifengren@123456',
master_log_file='zhuifengren_log.000001',
master_log_pos=1432;

mysql> start slave;

3.3 配置服务器B(主1)做为 服务器C(主2)的从

接下来,反过来,让主1也成为主2的从,做到互为主从

3.3.1 在 服务器C(主2)上创建同步账号并授权

# mysql -u root -p

mysql> create user 'repl'@'%' identified by 'Zhuifengren@123456';

mysql> grant replication slave on *.* to 'repl'@'%';

mysql> flush privileges;

3.3.2 在 服务器C(主2)上找到 log-bin 的位置

# mysql -u root -p

mysql> show master status;

Mysql双主双从高可用集群的搭建且与MyCat进行整合

3.3.3 在 服务器B(主1)上设置主从同步配置

# mysql -u root -p

mysql> change master to
master_host='192.168.1.15',
master_user='repl',
master_password='Zhuifengren@123456',
master_log_file='zhuifengren_log.000001',
master_log_pos=7300;

mysql> start slave;

3.4 服务器C(主2)与服务器D(从2)的主从搭建

具体的搭建步骤与 3.1 类似,就不再重复介绍了,可参见我的上一篇文章《Mysql读写分离集群的搭建且与MyCat进行整合》(https://www.cnblogs.com/w84422/p/15401259.html)。

3.5 测试数据同步 

分部在 服务器B(主1) 和 服务器C(主2) 做数据的增、删、改操作,查看是否所有的服务器数据都跟着同步。

4. MyCat配置

4.1 在之前的基础上修改MyCat配置

# cd /home/mycat/conf

# vim schema.xml

Mysql双主双从高可用集群的搭建且与MyCat进行整合

dataHost 标签中 balance 属性的含义如下:(摘抄自 MyCat 官网的权威指南)

balance 属性 负载均衡类型,目前的取值有 4 种:

1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。

2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

3. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。

4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力, 注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

4.2 重启MyCat

# cd /home/mycat/bin

# ./mycat stop

# ./mycat start

4.3 测试高可用

在集群正常的情况下,使用MyCat进行读写操作。

将服务器B(主1)的Mysql服务停止,使用MyCat进行读写操作,看是否正常。

5. 综述

今天聊了一下 Mysql双主双从高可用集群的搭建,以及 MyCat 如何整合 Mysql 双主双从集群,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

6. 个人公众号

追风人聊Java,欢迎大家关注

Mysql双主双从高可用集群的搭建且与MyCat进行整合