上一篇博客我们已经实现了 mysql 数据库的双主双从的搭建,今天应粉丝的要求,用mycat 实现数据库的读写分离。
角色 | ip 地址 | 简称 |
---|---|---|
Master1 | 192.168.183.134 | 134 主 |
Slave1 | 192.168.183.133 | 133 从 |
Master2 | 192.168.183.128 | 128 主,mycat 服务器 |
Slave2 | 192.168.183.135 | 135 从 |
修改schema.xml配置文件,直接删除 rm -rf schema.xml
然后编辑 vi 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="testdb" />
<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.183.128:3306" user="root"
password="root">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.183.135:3306" user="root" password="root" />
</writeHost>
<writeHost host="hostM2" url="192.168.183.134:3306" user="root"
password="root">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.183.133:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
定位到bin目录,启动mycat ./mycat console
数据库负责均衡策略 balance="1"
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"
writeType=“0”: 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
writeType=“1”,所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐
writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。
数据库主备切换策略 switchType="1"
1 默认值,自动切换。
-1 表示不自动切换
2 基于 MySQL 主从同步的状态决定是否切换。
我们在 master 1 128主服务器上插入一条数据
明天完成,出了点问题,mycat 只能远程本地的mysql,无法远程其它服务器的mysql