MyCAT的读写分离机制和配置

高可用性以及读写分离
MyCAT的读写分离机制如下:
• 事务内的SQL,全部走写节点,除非某个select语句以注释/*balance*/开头
• 自动提交的select语句会走读节点,并在所有可用读节点中间随机负载均衡
• 当某个主节点宕机,则其全部读节点都不再被使用,因为此时,同步失败,数据已经不是最新的,MYCAT会采用另外一个主节点所对应的全部读节点来实现select负载均衡。
• 当所有主节点都失败,则为了系统高可用性,自动提交的所有select语句仍将提交到全部存活的读节点上执行,此时系统的很多页面还是能出来数据,只是用户修改或提交会失败。

dataHost的balance属性设置为:
• 0,不开启读写分离机制
• 1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
• 2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡。
一个dataHost元素,表明进行了数据同步的一组数据库,DBA需要保证这一组数据库服务器是进行了数据同步复制的。writeHost相当于Master DB Server,而旗下的readHost则是与从数据库同步的Slave DB Server。当dataHost配置了多个writeHost的时候,任何一个writeHost宕机,Mycat 都会自动检测出来,并尝试切换到下一个可用的writeHost。

MyCAT支持高可用性的企业级特性,根据您的应用特性,可以配置如下几种策略:
• 后端数据库配置为一主多从,并开启读写分离机制。
• 后端数据库配置为双主双从(多从),并开启读写分离机制
• 后端数据库配置为多主多从,并开启读写分离机制
后面两种配置,具有更高的系统可用性,当其中一个写节点(主节点)失败后,Mycat会侦测出来(心跳机制)并自动切换到下一个写节点,MyCAT在任何时候,只会往一个写节点写数据。

基本配置:

server.xml 虚拟库的账号和密码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
 <system>
 <property name="defaultSqlParser">druidparser</property>
 </system>
 <user name="my">
 <property name="password">my</property>
 <property name="schemas">testdb</property>
 </user>
</mycat:server>

schema.xml  主要配置主从库的数据库连接地址信息

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<!-- schema 中可以有多个table节点,列几个在Navicat中就能看到几个,库里有这里没有的话客户端中也看不到 -->
 <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
 <table name="my" primaryKey="ID" type="global" dataNode="dn1" />
 </schema>
<!-- 数据节点 -->
 <dataNode name="dn1" dataHost="localhost1" database="test" />
<!-- 节点主机信息 -->
 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
<!-- 指定写入数据的主机 -->
 <writeHost host="hostM1" url="192.168.93.132:3306" user="root" password="root">
 <!-- 指定读取数据的主机,可以有多个 -->
 <readHost host="hostS1" url="192.168.93.130:3306" user="root" password="root" />
 </writeHost>
 </dataHost>
</mycat:schema>

 

此条目发表在数据库分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复