zookeeper存在脑裂问题
zookeeper可能引发脑裂现象,是指在多机房(网络分区)部署中,若出现网络连接问题,形成多个分区,则可能出现脑裂问题,会导致数据不一致。(严重故障,违反zookeeper实现一致性原则)
多机房部署:即CAP中的P原则,分区容错性;
如上图,zookeeper经典的三机房部署,每个分区都不超过半数,容灾能力最好的部署方案,现有运行状态中leader在机房A,目前机房A与机房B的通信出现阻断(网络故障),机房B中的follower无法感知leader,机房C与机房A正常通信,C中的follower可以感知A中的leader,那么B中的follower状态会由following改变为looking,停止对外服务开始选举新的leader,并向C发送选举消息,但是C可以感知A的leader所以其中的follower状态为following,C不会接受B发来的选举请求,那么B发起的选举无效,因为没能通过半数以上通过;那么出现了B机房不对外提供服务,A和C依然保持对外提供服务,所以此情况不存在脑裂。
如上图,情况出现变化,A与B和C的通信都阻断了,只有B和C可以通信,那么B和C就会进入looking状态开始选举新leader,如选出B中的follower为leader,就会出现zookeeper集群中出现双leader;A还会对外提供服务,但是其只能实现读服务,一旦出现写请求,其需要投票然投票数无法过半,所有无法完成写服务;B和C又形成了一个集群,对外提供读写服务;此状况就是脑裂问题,会造成数据不一致,如果有写请求进入BC集群并修改了内容,无法和A同步,那么原始的一致就被改变了;
极端情况:
脑裂问题出现后,即便网络恢复,集群也无法自我恢复,需要人工重启解决现有状态。