为了账号安全,请及时绑定邮箱和手机立即绑定

pxc接点挂掉同步问题

老师介绍了pxc接点如果有3个,因为需要数据强一致性。假如其中一个接点数据写不进去的话,这个写入操作就失败了。

那么问题来了。假如这3个接点当中有一个挂掉了。怎么办,这个挂的接点就写不进去。是不是会导致所有的写入操作不管在那个接点都不能执行了?

正在回答

4 回答

同学你好,PXC集群只有在超过一半数量的节点宕机,集群才会不可用,这是为了避免异地机房部署PXC集群,因为网络故障,导致一个PXC集群分裂成两个集群。所以说挂掉一两个节点没什么问题,只要不超过一半的节点就行。

1 回复 有任何疑惑可以回复我~
#1

慕娘3202412

也就是说一个节点写不进去的话,会返回给客户端错误,还是是由另外的节点写入?
2018-05-28 回复 有任何疑惑可以回复我~
#2

神思者 回复 慕娘3202412

可以为PXC集群配置Haproxy负载均衡,当某个PXC节点心跳检测没有响应,Haproxy会把SQL语句转发到其余正常的节点,不需要人工干预。另外Haproxy单节点部署不具备高可用,Haproxy宕机就导致业务停机,所以还要为Haproxy设置双机热备方案。具体操作欢迎收看这门实战课(https://coding.imooc.com/class/219.html#Anchor),里面详细讲解了PXC集群的搭建和管理,以及Redis集群、前后端分离项目的集群等等。
2018-05-28 回复 有任何疑惑可以回复我~
#3

慕娘3202412 回复 神思者

嗯,谢谢老师
2018-05-28 回复 有任何疑惑可以回复我~
#4

壮士 提问者

非常感谢!
2018-05-28 回复 有任何疑惑可以回复我~
查看1条回复

给楼上的几位朋友的一点点心得

#   场景:5个宕机的节点宕掉那一瞬间的数据分别为ABCDE 这5个顺序的版本 A是最老的版本 E是最新的版本   第一个节点是根节点

#   实验:启动第一个节点(数据版本为A的节点)

#   It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1

#   大概意思是说:从这个节点启动可能不安全,因为它不是最后一个离开集群环境的,可能不包含最新的更新.若要强制使用这个节点启动集群,请修改grastate.bat文件,将safe_to_boostrap设置为1

#   启动第二个节点(我加入的那个节点还没启动呢,我不着急启动)  无法与集群建立连接

# PS:五个节点的集群环境均为PXC,第二三四五个节点的加入的节点都是第一个几点

#   启动第N个节点(非开始节点) 与第二个同样

# 现状:所有的节点都宕机了,根节点不是最新节点无法启动,其他节点因为根节点未启动而不能启动,该怎么处理呢?

#   猜想:尝试上面所述的删除grastate.dat文件再重第一个节点开始启动

#   rm -rf /var/lib/docker/volumes/mysql1-v/_data/grastate.dat

#   rm -rf /var/lib/docker/volumes/mysql2-v/_data/grastate.dat

#   rm -rf /var/lib/docker/volumes/mysql3-v/_data/grastate.dat

#   rm -rf /var/lib/docker/volumes/mysql4-v/_data/grastate.dat

#   rm -rf /var/lib/docker/volumes/mysql5-v/_data/grastate.dat

#   启动第一个节点 我们发现启动成功了,但是数据只保留了这个节点宕机时的数据

#   启动第二个节点 数据被同步成了第一个节点的数据

#   启动第N个节点 数据被同步成了第一个节点的数据

# 结论:当所有节点都宕机时,如果最后一个宕机的不是根节点,那么直接删除grastate.dat文件并重启容器的话,数据会丢失,如果最后一个宕机的是根节点,那么数据应该没问题

# 目标:无论最后一个离开集群的节点是否是根节点,我们都希望能够保存最新版的数据并且重启集群

# 方案:个人方案原理如下

确定最后一个宕机的节点并让它成为根节点重启,再运行其他普通节点

# 问题:1.我们应该如何得知最后一个宕机的节点?

# 这个方法应该不少 比如使用haproxy负载均衡页面中的失去连接时间来看  失去连接时间最短的即是最后离开节点的

#   2.我们应该如何指定这个节点从普通节点变为根节点?

# docker好像不支持创建容器后再追加或者修改配置 那么我们可以删除所有卷中的grastate.dat文件,重新创建并运行容器即可


0 回复 有任何疑惑可以回复我~

上面的同学说的问题,我也感到很困惑。

按照PXC强一致性的说法,只要存在一个节点无法同步,那么操作就会无法执行,会造成整个集群的瘫痪。

0 回复 有任何疑惑可以回复我~
#1

qq_无忧无虑_0

集群环境只包含正常运行的节点 比如5个节点都在运行 那么集群中就有5个节点 当你们所说的一个节点挂掉的话 集群环境会把这个挂掉的节点从集群环境中踢出去 即当前集群环境中只剩下了4个节点 我看视频看了一部分的时候也跟你们想的一样 但是仔细想想如果从始至终都是5个节点的话 只要一个节点挂掉 那么就表示着整个集群环境都不可用了 那这个方案还有什么高可用可言呢?这是其一 其二 应该是挂掉的那个节点重新启动时 即重新加入到集群环境时 会从其他节点那里同步数据
2019-12-22 回复 有任何疑惑可以回复我~

你说的课程我都已经拥有了。不过就强一致性的问题。我有点萌。不是只要一个节点数据同步不进去的话就操作失败。那么down掉一个节点后,即使在其他节点能响应但也保持不了数据的一致性啊。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
MySQL集群(PXC)入门
  • 参与学习       28485    人
  • 解答问题       57    个

从入门开始学习完全开源的MySQL高可用性解决方案PXC集群

进入课程

pxc接点挂掉同步问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信