在分布式系统中脑裂又称为双主现象,由于 Zookeeper 的“假死”可能会导致出现两个 NameNode 同时为 Active 状态,此时两个 NameNode 都可以对外提供服务,无法保证数据一致性。ActiveStandbyElector 通过Fencing 机制防止脑裂现象。
当某个 NameNode 竞选成功,成功创建 ActiveStandbyElectorLock 临时节点后会创建另一个名为 ActiveBreadCrumb 的持久节点,该节点保存了 NameNode 的地址信息,正常情况下删除 ActiveStandbyElectorLock 节点时会主动删除 ActiveBreadCrumb,但如果由于异常情况导致 Zookeeper Session关闭,此时临时节点 ActiveStandbyElectorLock 会被删除,但持久节点 ActiveBreadCrumb 并不会删除,当有新的 NameNode 竞选成功后它会发现已经存在一个旧的 NameNode 遗留下来的 ActiveBreadCrumb 节点,此时会通知 ZKFC 对旧的 ANN 进行 fencing,只有在成功完成 fencing 后,选主成功的 NameNode 才能转为 Active 状态,开始对外提供服务
网友评论