5、读写分离
实验目的:分离对数据的读操作和写操作,互不干扰。
schema.xml中 <dataHost />标签里的balance字段用于配置读写分离,balance的取值范围是[0,3],默认值是0,表示不开启读写分离机制,读请求只分发到writeHost上。开启读写分离机制可将值修改为1,读请求会随机分发到当前writeHost对应的readHost和 standby writeHost(备用主机)上。
5.1、准备工作:
(1)、将balance的值修改为1,读请求会随机分发到S1(读主机)和M2(备用写主机)上,重启mycat服务:
cd /usr/local/mycat/bin/
./mycat restart
(2)、保证S1和M2都能被远程连接。
(3)、为方便在mycat的日志中查看分发情况,需要更改log4j.xml的配置,将<level />标签中的value字段的值改为debug:
vi /usr/local/mycat/conf/log4j.xml
5.2、数据测试
连接mycat进行多次查询,观察分发情况:
mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB
select * from travelrecord limit 4; # 第一次查询
select * from travelrecord limit 4; # 第二次查询
select * from travelrecord limit 4; # 第三次查询
第一次查询将请求分发到了从主机(S1)上,即结果全部来自于S1上的数据库:
第二次查询将请求分发到了备用主机(M2)上,即结果全部来自于M2上的数据库:
第三查询将请求分发到了从主机(S1)和备用主机(M2)上,即结果分别来自于S1和M2上的表数据:
6、主备切换
实验目的:当主服务器(M1)出现MySQL服务失效时能自动切换到备用服务器(M2)。
schema.xml中 <dataHost />标签里的switchType字段用于配置切换效果,switchType的取值:-1、1、2、3,默认值是-1,表示不自动切换主备数据库。自动切换主备数据库可将值修改为1。
6.1、修改配置文件
编辑schema.xml(新增一个writeHost标签):
<writeHost host="M1" url="localhost:3306" user="root" password="123456">
<readHost host="S1" url="192.168.0.4:3306" user="root" password="123456" />
</writeHost>
<writeHost host="M2" url="192.168.0.7:3306" user="root" password="123456">
</writeHost>
6.2、准备工作
(1)、将switchType的值修改为1并重启mycat服务:
cd /usr/local/mycat/bin/
./mycat restart
(2)、保证M1和M2都能被远程连接。
6.3、数据测试
当M1和M2的MySQL服务均正常时,通过mycat插入数据默认是写到M1的。
关闭M1的MySQL服务来模拟失效情况:
systemctl stop mysqld.service
连接mycat并插入数据:
mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB
insert into travelrecord(id,price,create_date) values(null,2500,'2019-01-16');
实验预期结果:数据成功写入到了M2上的数据库。
注意:开启M1上的MySQL服务,写入数据并不会写入到M1上的数据库,因为此时主节点是M2,M1需要等待M2的MySQL服务失效才能自动升级为主节点。