一、前言
Mycat作为一个代理层中间件,Mycat系统的高可用涉及到Mycat本身的高可用以及后端MySQL的高可用。在大多数情况下,建议采用标准的主从复制高可用性配置并交付给Mycat来完成后端MySQL节点的主从自动切换。
二、MySQL高可用
首先看,未加入Mycat之间。MySQL的一主多从结构。
上图中,虚线箭头表示的是主备关系,也就是A和A' 互为主备,从库B、C、D执行的是主库A。一主多从的设置,一般用于读写分离,主库负责所有的写入,以及一小部分读。其他的读请求则有从库分担。
加入Mycat之间的结构如下图所示:
如上图所示,MySQL节点开启主从复制的配置访问,并将主节点配置为Mycat的dataHost里的writeNode,从节点配置为readNode,Mycat发起心跳检测,正常情况下,Mycat会将第一个writeHost作为写节点,所有的DML SQL会发送给此节点。若Mycat开启了读写分离,则查询节点会根据读写分离的策略发往readHost(+writeHost)执行。当一个dataHost里面配置了两个或多个writeHost的情况下,如果第一个writeHost宕机,则Mycat会在3次心跳检测后,自动切换到下一个可用的writeHost执行DML SQL语句。并在 conf/dnindex.properties 文件里记录当前所用的 writeHost 的 index(第一个为 0,第二个为 1,依次类推) ,注意,此文件不能删除和擅自改变,除非你深刻理解了它的作用以及你的目的。
三、MyCat高可用
接下来我们看看Mycat自身的高可用性,由于Mycat自身是属于无状态的中间件,因为Mycat很容易部署为集群模式,保证高可用。关键建议是采用基于硬件的负载均衡器或者软件方式的HAproxy。下图为HAproxy+Mycat集群+MySQL主从所组成的高可用性方案。