zookeeper恢复模式的三个原则

  1. 当集群正在启动过程中,或 Leader 崩溃后,集群就进入了恢复模式。对于要恢复的数
    据状态需要遵循三个原则。

(1) Leader 的主动出让原则

  1. 若集群中 Leader 收到的 Follower 心跳数量没有过半,此时 Leader 会自认为自己与集群
    的连接已经出现了问题,其会主动修改自己的状态为 LOOKING,去查找新的 Leader。为了防止集群出现脑裂。
    而其它 Server 由于有过半的主机认为已经丢失了 Leader,所以它们会发起新的 Leader
    选举,选出一个新的 Leader。

(2) 已被处理过的消息不能丢原则

  1. 当 Leader 收到超过半数 Follower 的 ACKs 后,就向各个 Follower 广播 COMMIT 消息,批准各个 Server 执行该写操作事务。当各个 Server 在接收到 Leader 的 COMMIT 消息后就会在本地执行该写操作,然后会向客户端响应写操作成功。
  2. 但是如果在非全部 Follower 收到 COMMIT 消息之前 Leader 就挂了,这将导致一种后
    果:部分 Server 已经执行了该事务,而部分 Server 尚未收到 COMMIT 消息,所以其并没有
    执行该事务。当新的 Leader 被选举出,集群经过恢复模式后需要保证所有 Server 上都执行
    了那些已经被部分 Server 执行过的事务。

(3) 被丢弃的消息不能再现原则

  1. 当在 Leader 新事务已经通过,其已经将该事务更新到了本地,但所有 Follower 还都没
    有收到 COMMIT 之前,Leader 宕机了(比前面叙述的宕机更早),此时,所有 Follower 根本就不知道该 Proposal 的存在。当新的 Leader 选举出来,整个集群进入正常服务状态后,之前挂了的 Leader 主机重新启动并注册成为了 Follower。若那个别人根本不知道的 Proposal还保留在那个主机,那么其数据就会比其它主机多出了内容,导致整个系统状态的不一致。所以,该 Proposa 应该被丢弃。类似这样应该被丢弃的事务,是不能再次出现在集群中的,应该被清除。
发布了97 篇原创文章 · 获赞 59 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/b1303110335/article/details/105209599
今日推荐