首页 > 编程知识 正文

mycat如何实现读写分离,mycat读写分离原理

时间:2023-05-04 07:31:47 阅读:242771 作者:3061

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实现宕机,观察读写是否正常.

读写分离故障转移都是针对同一个分片进行,没有分布式逻辑.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。