mycat通过dataHost标签的writeType和switchType来定义故障切换方式。
writeType=0,表示所有写都发送到配置的第一个writeHost上,第一个挂了切换到第二个writeHost上,重启后以切换后的为准,切换记录在conf/dnindex.properties
writeType=1,表示所有写都随机发送到配置的writeHost上,mycat1.5以上已废弃不推荐。
switchType=-1,表示不自动切换
switchType=1,默认值,表示自动切换
switchType=2,基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status。
switchType=3,基于galaru cluster的切换机制(合适集群),mycat1.4以上支持,心跳语句为show status like ‘wsrep%’。
server.xml配置如下
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="5">
<heartbeat>show slave status</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="root" password="root">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="localhost:3307" user="root" password="root" />
</writeHost>
<writeHost host="hostM2" url="localhost:3308" user="root" password="root"></writeHost>
</dataHost>
stop第一台写入数据库hostM1后,根据switchType=1会自动切换到hostM2上,当hostM1重启恢复之后,mycat并没有切换回第一个hostM1写入节点,而是需要重新配置主从状态。或者你把hostM2再关闭下,它就会自动切换回hostM1了。根据实际情况使用切换属性。