双主双从高可用读写分离介绍
前面我们搭建mycat实现了一主一从读写分离,今天我们来搭建一个双主双从高可用的读写分离,mysql双主其实就是互相同步,互为主从,任意一台都能够执行增删改动作。生产环境用得非常少,因为还是担心数据一致的问题,生产环境一般来说一主多从已经够用。

编号 |
角色 |
IP地址 |
1 |
Master1 |
182.30.0.2 |
2 |
Slave1 |
182.30.0.3 |
3 |
Master2 |
182.30.0.4 |
4 |
Slave2 |
182.30.0.5 |
- M1 S1 主从复制 M2 S2 主从复制;
- M1,M2 互为主从复制 实现数据同步;
- 无论哪个挂掉,Mycat可以自动切换,依然系统可用;
mysql双主双从搭建
mysql双主双从搭建
mycat双主双从读写分离配置实现
在一主一从配置的基础上,再增加一个读写分离配置即可,balance改成1,配上m2、s2,注意ip别写错,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 将randomDataNode改成dataNode -->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!--配置成自己的数据库-->
<dataNode name="dn1" dataHost="localhost1" database="eden" />
<!--
balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
switchType="1" 自动切换
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="182.30.0.2:3306" user="root" password="333">
<!-- 配置从库 -->
<readHost host="hostS1" url="182.30.0.3:3306" user="root" password="333" />
</writeHost>
<writeHost host="hostM2" url="182.30.0.4:3306" user="root" password="333">
<!-- 配置从库 -->
<readHost host="hostS2" url="182.30.0.5:3306" user="root" password="333" />
</writeHost>
</dataHost>
</mycat:schema>
|
重启mycat
mycat双主双从高可用读写分离测试
使用navicat连接mycat,TESTDB是逻辑库,指向物理库eden
读写分离测试
1
2
3
4
|
-- 使用逻辑库TESTDB执行插入,可以看到其他4个库(m1,m2,s1,s2)都已经更新了。
insert into student values(3, '王五');
-- 使用逻辑库TESTDB查询,结果ok
select * from student;
|
如果在配置数据库是binlog_format设置成statement,还可以使用@@hostname
很明显地看到查询是从从库中进行的。
高可用测试
m2宕机,$ docker stop 16
继续插入一条数据,insert into student values(4, '麻六');
可以看到m1,s1更新了,m2宕机,s2也就不更新了,再次启动m2,$ docker start 16
可以看到m2数据同步ok,s2也能看到这次更新的数据。

总结
双主双从架构配置主要麻烦在配置mysql双主双从上,mycat配置双主双从还是很简单的。