zk的脑裂问题你真正理解了没


说到zk的部署,大家一定会想到部署最好为奇数,上遍文章已经介绍过了zk部署奇数个好,还是偶数好呢?,但另外一个问题大家有没有考虑,为什么zk的选举必须过半同意,才算选举成功呢?
zk用的算法是raft算法,里面写到必须可用节点数过半才能选举出一个leader,这样就避免了脑裂问题的产生,比如:有两个机房,机房a部署了三台zk服务,机房b部署了三台zk服务器,如果发生网络故障,各自独立e $ O D s |H U h,这个时候C G M,各个机房得选举leader,如果选举的逻辑变成,可用节点数>=总节点数/2,这个时候两个机房会选择出各自的leader,这样就导致了有两f ; b / | ( .个leaD r wder,这样网络一恢复正常,就不知道听谁的指挥了,就产生了脑裂的问题。所以算法采用的是过半机制,即节点数>S = j总节点数/2,这样机房a和b多不会产生leA Z Z T b , k K Xader,避免了脑裂问题;g X d如果是机房a部署了4台,机房b部署了两台,利用过半原则,只会a产生leader,b不会产生leader,不会导致脑裂的问题,所以过半机制解决了zk脑裂的痛点j Q U @ i 3 X p。
zk的脑裂问题你真正理解了没