1.概述
1.1读写分离
数据某个分片中,实现的主从高可用备份,通过对主的写操作,对从的读操作将读写分离执行提升集群使用效率
1.2故障转移
一个数据分片的读写工作,由于正在使用的某个节点出现故障,连接转向一个备份的节点实现读写 读写分离和故障转移都是基于主从结构实现
2.Mycat 读写分离示例
2.1准备环境
- 准备2个后端数据库,并且将已有的主从断开
- 10.9.151.60:3306 10.9.48.69:3306
- 到从节点 执行 stop slave
- 准备一个mycat的软件
一个主机运行了一个后端数据库,令一个云主机运行另另一个后端数据库,同时运行了mycat
2.2结构图
2.3配置文件schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<!--mycat only one logic database TESTDB-->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
<!--tb_user-->
<table name="tb_user" primaryKey="id" dataNode="dn1"/>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mstest"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="M1" url="10.9.48.69:3306"
user="root" password="root">
</writeHost>
<writeHost host="M2" url="10.9.151.60:3306"
user="root" password="root">
</writeHost>
</dataHost>
</mycat:schema>
经过测试发现,配置了2个writeHost标签,但是读和写的操作都是在第一个writeHost进行的.
2.4读写分离逻辑属性
一个dataHost标签中,有balance和writeType控制读写逻辑.
writeType:实现写逻辑控制
0:默认值,在index下标为0的writeHost数据库中写数据
1:1.5以上的mycat已经不推荐使用了,随机的在所有的writeHost进行写操作,覆盖balance的读逻辑,在所有**Host进行随机的读
balance: 单独控制一个主从结构的读写分离的读逻辑,想让balance值生效,writeType不能是1
0:默认值,不开启读的分离,只会在index=0的writeHost进行读
1:读的操作,除了index=0的writeHost,其他的所有Host都随机读.当读并发超级高时,所有后端是数据库读都承受很大压力时,第一个writeHost才会参与一部分读的分离.
2:随机在所有**Host进行读
3:随机在所有的ReadHost进行读,没有readHost时,只会在第一个writeHost进行读
常用的组合:writeType=0/balance=1
3.故障转移
目的:通过高可用来提升一个数据分片的可靠性.
3.1switchType属性
dataHost管理的主从数据库结构,可以通过switchType决定故障转移逻辑.
1:默认值,当正在通过写功能的host(index=0的writeHost)故障,开启故障转移,将index=1的writeHost顶替(替换index下标).
-1:不开启故障转移
3.2测试
通过前面读写分离案例,对第一个writeHost实现宕机,观察读写是否正常.
读写分离故障转移都是针对同一个分片进行,没有分布式逻辑.