mycat配置数据库集群
所有的集群配置,都必须配置多主多从模式,即多个master节点相互之间配置主从,如,master1和slave1为第一组主从,master2和slave2为第二组主从,master1和master2互为对方的主从。
如下配置方式为两个主从模型,两个writeHost互为主从(缺陷:可能有I/O延迟问题)
配置解释:
balance:0 //不开启读写分离,所有读操作都发送到当前可用的writeHost上
balance:1 //全部的readHost与stand by writeHost 参与select 语句的负载均衡(常用)
balance:2 //所有的读操作都随机的在writeHost、readHost上分发
balance:3 //所有的读操作都随机的分发到writeHost对应的readHost执行,writeHost不负担读压力
writeType:0自动主从(在1.4以后支持了主从关系,但是并没有支持主从复制) 也就是mycat会自动分配主从,如果说在同一个dataHost标签中配置了多个writeHost, 则mycat会自动分配主从(常用)
所有写操作发送到配置的第一个writeHost,第一个挂了切换到第二个,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties
writeType:1所有写操作都随机的发送到配置的 writeHost(1.5版本之前生效)
switchType:无论是-1还是1都根据的是mycat所自带的主从关系
switchType:-1不自动切换 writeHost配置的规则为一台主节点一台从节点 如果主节点宕机,从节点还是从节点,并不会自动切换为主节点
switchType:1自动切换 根据的是mysql所配置主从关系(常用)
switchType:2根据mysql配置主从进行切换(监视mysql的主从心跳) Slave_IO_Runing(YES) Slave_SQL_Running(YES)(可以解决I/O延迟问题)
当心跳检测获取的数据发现了I/O延迟,则读做自动定位到writeHost中,如果没有延迟,则读操作自动定位到readHost中,建议为不同的表格定位不同的dataHost节点
3:和2一样,只是2为单节点,3为集群模式
第一种集群配置方案如下:
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" 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.209.130:3306" user="root" password="123456"> <!-- can have multi read hosts --> <readHost host="hostS2" url="192.168.209.130:3306" user="root" password="123456" /> </writeHost>
<writeHost host="hostM2" url="192.168.209.130:3306" user="root"
password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.209.130:3306" user="root" password="123456" />
</writeHost>
</dataHost>
第二种集群配置方案如下:
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <table name="company" dataNode="dn1,dn2,dn3" rule="crc32slot" /> <table name="goods" dataNode="dn4,dn5,dn6" rule="crc32slot1" /> //在mycat中,rule.xml中定义的分片规则只能给一个表格使用,如果有多个表格使用同一个分片规则,需要在rule.xml中再复制一个tableRule节点 </schema> <dataNode name="dn1" dataHost="localhost1" database="db1" /> <dataNode name="dn2" dataHost="localhost1" database="db2" /> <dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataNode name="dn4" dataHost="localhost2" database="db1" />
<dataNode name="dn5" dataHost="localhost2" database="db2" />
<dataNode name="dn6" dataHost="localhost2" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> <heartbeat>show slave status</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.209.130:3306" user="root" password="123456"> </writeHost> <writeHost host="hostS1" url="192.168.209.130:3306" user="root" password="123456" /> </dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM2" url="192.168.209.130:3306" user="root"
password="123456">
</writeHost>
<writeHost host="hostS1" url="192.168.209.130:3306" user="root"
password="123456" />
</dataHost>
上图为一套高可用集群,任意一个节点done机都有备份可以替代
在所有Mycat服务所在主机中增加状态检查服务脚本,此操作为HaProxy提供对Mycat服务状态检查的依据,本案例中使用xinetd实现。通过xinetd,Haproxy可以用httpchk来检测Mycat的存活状态,(xinetd即extened internet daemon,是新一代的网络守护进程服务程序,又
叫超级Internet服务器,经常用来管理多种轻量级internet服务)
注意:第一种集群配置中需要手动配置两台master主主同步,两台master的mysql配置文件需要在[mysqld]下加上
log-slave-updates=true(又做主又做从)
然后开启主主同步,方法与读写分离配置主从方法一样,这样其中一台master done机重启,会自动与另一台master数据同步