1.概述
老话说的好:瞻前顾后、患得患失只会让我们失败,下定决心,干就完了。
言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只有一台,如果主节点宕机了,则数据库的写操作便无法完成,从而无法做到高可用。
因此,今天我们来聊一下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
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;
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
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,欢迎大家关注