目前用 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 号服务器数据和集群不一致了。数据乱了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.