zookeeper

启动

./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节点,可以提高伸缩性,同时不影响吞吐率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值