MyCAT是一款由阿里Cobar演变而来的用于支持数据库读写分离、分片的分布式中间件。MyCAT可不但支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。
本文不涉及复杂的数据库部署,只是简单的mysql主从部署(单主单从),Mycat实现mysql的读写分离与高可用;mysql主从复制已经搭建好,Mycat也已经搭建好,剩下的就是配置Mycat,将Mycat与我们的mysql整合起来,结构图如下:
如图所示,writeHost表示主节点,readHost表示从节点,Mycat内部定期对一个dataHost里所有的writeHost与readHost节点发起心跳检测(writeHost与readHost都可以配置多个,至于数据同步的问题则需要我们从mysql层面实现了,Mycat并不提供数据同步的支持,本文只讲mysql一主一从),正常情况下,Mycat会将第一个writeHost作为写节点,所有的DML SQL会发送给此节点,若Mycat开启了读写分离,则Select SQL会根据读写分离策略发往readHost(+writeHost)执行。当一个dataHost里面配置了多个writeHost时,如果第一个writeHost宕机,则Mycat会在默认的3次心跳检查失败后,自动切换到下一个可用的writeHost,以此类推。
这存在一个问题,就是当宕机的writeHost恢复后,怎么重新加入Mycat,要不要恢复为原来的写节点? 最佳建议方式是:保持现有状态不变,改旗易帜,恢复后的mysql节点作为从节点,跟随新的主节点,重新配置主从同步,原来跟随该节点做同步的从节点也同样换帅,重新配置同步源,这些节点的数据手工完成同步后,再加入Mycat里。
总结:
1、数据的同步在mysql层面实现的,mycat不负责任何的数据库同步;
2、mycat的搭建比较简单,但也有一些注意点:依赖JDK以及其版本,hostname配置等等。期间如果遇到什么问题,尽量百度,就不要google了,Mycat是中国制造,百度搜索的资料更全;
3、数据库的读写分离是mycat最常用的场景之一,配置比较简单,细心一点,实现起来应该不难;
4、读写分离往往还伴随着高可用,同样mycat也支持mysql的高可用,能够自动的进行master的切换;
5、关于mycat自身的高可用与负载均衡,请上飞机:Mycat - 高可用与负载均衡实现,满满的干货!;
网友评论