目前用 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 号服务器数据和集群不一致了。数据乱了
1
runntuu 2018-02-28 15:20:17 +08:00 via iPhone
1.Group Replication 主切换是在 MySQL 内部完成的,但不意味着你不能对节点状态做检查,你可以写脚本。
2.不管是 HAProxy 还是 Keepalived,都可以调用脚本,你可以基于上一步的结果来决定将 VIP 漂移至哪个节点。 所以实现都能实现,只是你对负载均衡工具还不够了解,具体怎么实现去 Google 吧。 |