Mycat配置双主双从以及读写分离高可用

Posted 爱上口袋的天空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat配置双主双从以及读写分离高可用相关的知识,希望对你有一定的参考价值。

1、修改mycat的schema.xml文件

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

	<schema name="M_SPDB_PZEX" checkSQLschema="false" sqlMaxLimit="100" randomDataNode="dn1" dataNode="dn1">
	</schema>
	<dataNode name="dn1" dataHost="host1" database="spdb_pzex" />
	<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.56.20:3306" user="dhapp" password="xxxxxx">
		   <!-- can have multi read hosts -->
			<readHost host="hostS1" url="192.168.56.21:3306" user="dhapp" password="xxxxxx"></readHost>
		</writeHost>
		<!-- can have multi write hosts -->
		<writeHost host="hostM2" url="192.168.56.22:3306" user="dhapp" password="xxxxxx">
		   <!-- can have multi read hosts -->
			<readHost host="hostS2" url="192.168.56.23:3306" user="dhapp" password="xxxxxx"></readHost>
		</writeHost>
	</dataHost>
</mycat:schema>

balance="1":

        全部的readHost与stand by writeHost参与select语句的负载均衡。

writeType="0":

        所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个

writeType="1",

        所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐

writeHost,

        重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。

switchType="1":

  •  1 默认值,自动切换。
  •  -1 表示不自动切换
  •  2 基于 MySQL 主从同步的状态决定是否切换。

注意:上面数据库的用户要提前建好

2、启动 Mycat验证读写分离

1、先启动mycat

2、首先创建一张临时表test

在写主机Master1数据库表mytbl中插入带系统变量数据,造成主从数据不一致
   INSERT INTO mytbl VALUES(1,@@hostname);

查询数据:

 

 由上面的查询结果可以发现出现了3个不同的name,我们看一下分别属于哪个数据库节点:

Master1节点:

        

Master2节点:

         

Slave1节点:

         

Slave2节点:

         

可以发现出除了Master2其他的都可以查询出来,说明现在两个主节点Master2是真正的主机,Master1是备机,Master1、Master2 互做备机,负责写的主机宕机,备机 切换负责写操作,保证数据库读写分离高可用性。


3、测试高可用

1、下面我们先将Master2节点停掉(因为现在是主机)

2、 我们继续向mysql集群中插入数据试试

 可以发现是没有问题的

3、下面我们再将Master2启动起来

发现可以查询到Master2、Slave1、Slave2节点的数据了,刚刚因为Master2停掉,那么Slave2就无法同步数据了,因为Master1只和Slave1同步,所以只能查询到Slave1节点的数据。 

以上是关于Mycat配置双主双从以及读写分离高可用的主要内容,如果未能解决你的问题,请参考以下文章

mycat实现mysql基于GITD实现双主双从读写分离master节点高可用

4读写分离---双主双从(mycat)

Mycat实现MySQL主从复制和读写分离(双主双从)

Mycat中间件实现一主一从和双主双从的读写分离

mycat

mycat