在此之前,我们需要安装双主双从的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 种:
- balance="0", 不开启读写分离机制, 所有读操作都发送到当前可用的 writeHost 上。
- balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1, M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
- ( balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
- balance="3",所有读请求随机的分发到 readhost 执行, writerHost 不负担读压力
写策略:
- writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
- writeType="1",所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐
- 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读看不到)之外的所有结果了。