Zookeeper 源码(六)Leader-Follower-Observer

Zookeeper 源码(六)Leader-Follower-Observer

上一节介绍了 Leader 选举的全过程,本节讲解一下 Leader-Follower-Observer 服务器的三种角色。经过 Leader 选举后各服务器都能确定自己的角色,下一步就是初始化各自的角色。

先回顾一下【QuorumPeer】的 run 方法选举结束后创建对应的角色:

case OBSERVING:
    setObserver(makeObserver(logFactory));
    observer.observeLeader();
    break;
case FOLLOWING:
    setFollower(makeFollower(logFactory));
    follower.followLeader();
    break;
case LEADING:
    setLeader(makeLeader(logFactory));
    leader.lead();
    setLeader(null);
    break;

一、Leader

(1) Leader 初始化 【Leader】

protected Leader makeLeader(FileTxnSnapLog logFactory) throws IOException {
    return new Leader(this, new LeaderZooKeeperServer(logFactory, this, this.zkDb));
}

// Leader 启动时启动 2888 的端口,用于服务器内部通信(如数据同步等)
Leader(QuorumPeer self,LeaderZooKeeperServer zk) throws IOException {
    this.self = self;
    try {
        if (self.getQuorumListenOnAllIPs()) {
            ss = new ServerSocket(self.getQuorumAddress().getPort());
        } else {
            ss = new ServerSocket();
        }
        ss.setReuseAddress(true);
        if (!self.getQuorumListenOnAllIPs()) {
            ss.bind(self.getQuorumAddress());
        }
    } catch (BindException e) {
        // 省略...
    }
    this.zk = zk;
}

二、Observer

三、ZooKeeperServer

ZookeeperServer 类图

参考:

  1. 《Zookeeper源码分析之六 Leader/Follower初始化》:https://blog.csdn.net/haihongazar/article/details/52709244
  2. 从 Paxos 到 Zookeeper : 分布式一致性原理与实践

每天用心记录一点点。内容也许不重要,但习惯很重要!

猜你喜欢

转载自www.cnblogs.com/binarylei/p/9955957.html