目前用 Group Replication 做热备份用,遇到个问题。
3 台服务器组成的集群:
mysql1
mysql2
mysql3
其中 mysql1 为 master 提供写入服务,其他节点是从,只读。
当 mysql1 重启服务器,集群内部 master 会自动漂移,会从集群中移除 mysql1。
此时 mysql1 重启后没有自动再次加入集群,加入集群前是可以直接提供写入。
那么问题就来了,此时数据全部写入到了 mysql1 两个问题:
问题 1. mysql1 数据和集群不一致了。
问题 2. 因为 mysql1 数据和集群的不一至导致无法再次加入集群。会提示:
2018-02-28T04:10:02.576953Z 0 [Note] Plugin group_replication reported: 'To force this member into the group you
can use the group_replication_allow_local_disjoint_gtids_join option'
当然你可以强制加入集群,但这很容易数据错乱吧。
如果使用 haproxy 做一个 vip 然全部应用使用这个 vip 连 mysql。
但 Grroup Replication 的主切换是在 mysql 内部完成的,haproxy 根本无法知道哪台服务器是主。
稍微看了下那个 ProxySQL 原理好像是代理转发的定时检查哪个是主,然后把 sql 查询转发到主。不知道生产稳定性怎么样
另外我测试了多主模式,数据一致性更难保证。
另外 ProxySQL 这种定时检测切换的好像也有问题:
如定时检测为 30 秒,服务器 1,网络中断 10 秒自动脱离集群。但 ProxySQL 检测间隔问题, 正好没有检测出服务器已经脱离集群,而将 sql 语句发至服务器 1,此时服务器 1 已经恢复,但未加入到集群。于是乎问题来了,1 号服务器数据和集群不一致了。数据乱了