【mycat】读写分离

在此之前,我们需要安装双主双从的mysql数据库

https://blog.csdn.net/wangyunzhao007/article/details/107330124

还需要安装mycat

一,修该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="host1" database="zhao" />
	<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.157.130:3306" user="root"
				   password="123456">
			<!-- can have multi read hosts -->
			<readHost host="hostS1" url="192.168.157.129:3306" user="root" password="123456" />
		</writeHost>
                <writeHost host="hostM2" url="192.168.157.133:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.157.132:3306" user="root" password="123456" />
        </writeHost>
	</dataHost>
</mycat:schema>

然后重启mycat,即可生效。 

配置文件属性解释

修改<dataHost>的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",所有读请求随机的分发到 readhost 执行, writerHost 不负担读压力

写策略:

  1. writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
  2. writeType="1",所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐
  3. writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。

数据库主备切换策略 

switchType="1":

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

配置文件标签解释

Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。 

Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。 

DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上 

DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上

 

二、验证读写分离 

在写主机Master1数据库表mytbl(这个表一定要在同步的库中,这样才能让从机去复制数据)中插入带系统变量数据, 造成主从数据不一致

#登录数据库
mysql -uroot -p123456
#使用zhao库,这个一定时要同步的库
use zhao
#插入带系统变量的值
INSERT INTO mytbl VALUES(3,@@hostname);

然后四个库中插入的数据为

在mycat中链接数据库,通过读写分离的模式,而且选择的负载均衡策略为1,除了第一台写主机之外,都用来读,所以我们使用mycat来操作数据库,能查到zk2,zk4,zk5即可。

然后登陆mycat的数据操作窗口

#130服务器安装了mycat
mysql -umycat -p123456 -h 192.168.157.130 -P8066

切换数据库 

use TESTDB

然后执行sql语句

select * from mytbl;

多执行查询几次,我们就能看到除了第一台读主机(我配置的事130,就是zk2读看不到)之外的所有结果了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值