Mycat实现Mysql双主和读写分离

目录

1 机器准备

2.  安装服务

2.1 mysql的双主部署

2.2 mycat的安装

3 验证读写分离

3.1 验证写操作

3.2 验证读操作

3.3 故障演练


   

上一篇博客我们讲到mycat实现mysql主从复制和读写分离,但是上一篇讲到有一个小问题,就是当主从切换后,不管是一主几从,切换后,虽然可以插入数据,但是再通过mycat去获取数据时发现当恢复主的时候,负载的时候就会获取到主上面的数据,这时候主上数据和从上的数据不一致了。下面对于这个问题,我们来看看双主的情况。上一篇博客

1 机器准备

机器名ip角色
wyl01192.168.52.128mycat,mysql客户端
wyl02192.168.52.129master
wyl03192.168.52.130master

设计思路:部署2个数据库服务,分别存放在192.168.52.129 和192.168.52.130 ,这里数据库采用的mysql-5.7.20版本,mycat为mycat-1.6版本。

2.  安装服务

2.1 mysql的双主部署

mysql的双主前面有介绍过,包括手动部署ansible部署。这里我们直接执行ansible的playbook剧本即可。

看到上面的4个yes状态即表示双主集群搭建成功。

2.2 mycat的安装

mycat的安装可以看上一篇博客,这里给出两个配置文件的内容

server.xml

<user name="root">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
	</user>
 
	<user name="user">
		<property name="password">user</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">false</property>
	</user>

schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

         <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>

        <dataNode name="dn1" dataHost="localhost1" database="test01" />

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>show slave status</heartbeat>
                <writeHost host="hostM1" url="192.168.52.129:3306" user="root" password="123456">
                        <readHost host="slave1" url="192.168.52.130:3306" user="root" password="123456" />
                </writeHost>
                <writeHost host="hostM2" url="192.168.52.130:3306" user="root" password="123456">
                        <readHost host="slave2" url="192.168.52.129:3306" user="root" password="123456" />
                </writeHost>
        </dataHost>

</mycat:schema>

3 验证读写分离

3.1 验证写操作

这里我们直接看结果,具体的操作上一篇博客有介绍。在wyl01的mycat的入口,插入几条数据,是从wyl02上插入的。

3.2 验证读操作

这里由于wyl02和wyl03是做了双向主从复制(双主),按照上一篇博客,去修改wyl03数据库中的值,再去查看是不可取的。因为wyl03上去修改了,wyl02上也会修改,取得的数据是看不出来来自哪个数据库的,不过我们可以看日志的信息

根据schema.xml中的配置我们也可以知道,获取数据是负载的,两个节点都会去获取。

3.3 故障演练

停掉wyl02上的mysql服务,然后进行插入数据

到这里,和上一篇博客讲到的都是一样的,也是可以插入数据的,那么当我们再把wyl02上数据库服务给恢复,数据是否还是保持一致的。启动wyl02上的mysql服务,进行查看发现数据还是一样的。

我们看到wyl02上也有这一条数据,这样就保证了当主挂了,后续即使有数据写入,我们恢复挂的mysql服务,也不会导致数据的不一致。

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值