分布式集群脑裂问题

Zookeeper集群"脑裂"问题 - 运维总结

在分布式集群的脑裂问题中,zookeeper脑裂是一个经典的例子。

在zookeeper集群中,有一个leader和多个follower(observer不参与选举,可以忽略),leader通过周期性向follower发送心跳的方式维持自己的存在感。当follower没有收到心跳超过一定时间后,就认为leader已经宕机,开始重新选举。但是这个时候,leader有可能没有宕机,而是假死,比如发生网络分区的情况。假设集群中总共有6个节点,发生网络分区后,变成以下情况(原本只有机房1的leader,分区后机房2也要选举leader):

img

如果没有过半机制,就会导致,机房2开始重新选举时,同意的节点数>=6/2=3,结果leader2成功选举。一个集群有两个leader会导致混乱,不同的请求分别到达两个leader进行处理,最终会导致两个机房节点不一致。zookeeper的解决方法就是过半机制,即每次选举leader时,同意选举的节点数需要多于集群一半节点数才能当选,等于一半都不行。使用过半机制后,即使像上面那样分成两个集群,机房2由于同意选举的结点数最多只有3个,等于总节点数一般,但是未超过一半,因此无法选出leader,也无法提供服务。机房1的leader通过心跳机制发现自己管理的节点数未过半,会自动退位,至此整个集群无leader,停止服务。但是避免了2个leader分别执行写操作导致不一致的情况。

在此之上,zookeeper还有奇数个节点的机制,也就是说使集群总节点数是奇数,这样的好处是分区后必然有一个机房的节点数是过半的,能够选出leader,因此集群仍然可以对外服务。zookeeper集群就有了这样的一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值