zookeeper是如何解决脑裂问题的?

提问者:帅平 问题分类:面试刷题
zookeeper是如何解决脑裂问题的?
3 个回答
曾经多难忘
曾经多难忘
假设leader发生了假死, followers选举出了一个新的leader。当旧的leader复活并认为自己仍然是leader, 它向其他followers发出写请求时, 会被拒绝。
因为ZooKeeper维护了一个叫epoch的变量, 每当新leader产生时, epoch都会递增, followers如果确认了新的leader存在, 同时也会知道其epoch的值 。它们会拒绝epoch小于现任leader的epoch的所有旧leader的任何请求。
注意: 仍然会存在有部分followers不知道新leader的存在, 但肯定不是大多数, 否则新leader将无法产生。
发布于:3个月前 (01-24) IP属地:四川省
也不长发及腰
也不长发及腰
zookeeper解决脑裂问题的措施有:
1、Quorums(法定人数):通过设置法定人数,进而确定集群的容忍度,当集群中存活的节点少于法定人数,集群将不可用。
2、Redundant communications(冗余通信):集群中采用多种通信方式,防止一种通信方式失效导致集群中的节点无法通信。
3、Fencing(共享资源):通过共享资源的方式,将所有共享资源添加到集群中,能对共享资源进行写操作的节点就是leader节点。

Zookeeper默认采用Quorums的方式:只有获得超过半数节点的投票,才能选举出leader。这种方式可以确保要么选举出唯一的leader,要么选举失败。
发布于:3个月前 (01-24) IP属地:四川省
我来回答