irpas技术客

zookeeper_howeres_zookeeper zoomain

未知 7805

启动

./zkServer.sh start

运行之后,里面包含一条命令:nohup “$JAVA” 参数 $ZOOMAIN $ZOOCFG

ZOOMAIN 就是所有程序的入口org.apache.zookeeper.server.quorum.QuorumPeerMain

1 服务启动

2 解析参数

3 过期快照删除

4 通信初始化 runFromConfig

? a 创建工厂,默认使用 NIOServerCnxnFactory

? b cnxnFactory.configure 绑定socket

5 启动zk getQuorumPeer(); quorumPeer.start();

加载

内存的结构为DataTree,每个节点为DataNode(/znode1);硬盘中的结构为snapShot快照和TxLog编辑日志

初始化时,内存没有数据,会从磁盘目录反序列化读取快照和编辑日志,恢复数据。

加载之后,cud操作都会记录到编辑日志里,最后再合帐到snapshot(此时编辑日志会消失)。

quorumPeer.start(); 启动后 loadDataBase(); snapLog.restore() // 恢复快照,加载编辑日志;

选举 第一次选举 非第一次选举

优先级:order by epoch desc, zxid desc, sid desc

epoch 当前集群所处的年代或者周期,每个 leader 都有自己的纪元,所以每次选举,leader 变更之后,都会在前一个年代的基础上加 1。这样是为了旧 leader 恢复之后,也不会 follow 错,因为 follower 只 follow 新纪元的 leader。

选举代码结构

选举准备过程

选举投票过程

zookeeper的四种状态

Looking、Leader、Follower、Observer(与Follower类似,但是无投票权)

Zookeeper需保证高可用和强一致性,为了支持更多的Server,而Server 增多,投票阶段延迟增大,影响性能,故引入 Observer。Observer不参与投票。

Observers接受客户端的连接,并将写请求转发给leader节点。加入更多Observer节点,可以提高伸缩性,同时不影响吞吐率。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #zookeeper #zoomain #启动zkServersh #JAVA #参数 #ZOOCFGZOOMAIN