8.zookeeper3.5.7服务端源码解析

本文深入解析Zookeeper服务端的启动过程,从QuorumPeerMain的main方法开始,涉及配置解析、DatadirCleanupManager的快照清理、ServerCnxnFactory的初始化、QuorumPeer的创建以及选举机制。主要步骤包括数据加载、通信组件启动、选举流程和线程管理,详述了Zookeeper如何确保集群稳定和数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zookeeper服务端源码解析

在这里插入图片描述

  1. 服务端以QuorumPeerMain中的main方法 入口作为开始

  2. main方法中执行initializeAndRun作为初始化和启动的核心方法
    在这里插入图片描述

    1. 获取封装zk的配置信息config 底层调用了parseProperties 将配置文件中的各项配置封装到QuorumPeerConfig对象中 用于后期初始化调用获取相关的配置
      在这里插入图片描述
      在这里插入图片描述

    2. DatadirCleanupManager 启动定时任务 对过期的快照删除(默认该功能是关闭的) 默认zk会保留3天的快照
      在这里插入图片描述

  3. 初始化通信组件 runFromConfig

    1. 创建ServerCnxnFatory,默认通过NIO的形式 也支持Netty(NettyServerCnxnFactory) 并调用cnxnFactory.configure完成通信组件的配置启动socke绑定默认端口2181
      在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 初始化QuorumPeer对象并将config中的各种配置进行设置进去,如myid tickTime等等 并设置zk的存储和通信组件
    在这里插入图片描述

  2. 初始化和启动zk

    1. 初始化 initialize 初始化auth server 和 learner
      在这里插入图片描述

    2. 启动 start 加载zk数据 启动通信组件 开始选举
      在这里插入图片描述

      1. loadDataBase方法负责加载从磁盘中snap快照恢复到内存中 加载事务日志
        在这里插入图片描述

      2. startServerCnxnFactory启动了三个线程 AcceptThread 负责接受新连接并且分配给SelectorThreads线程 SelectorThreads负责处理AcceptThread的链接和IO操作 ConnectionExpirerThread 负责关闭一些session过期的连接
        在这里插入图片描述

      3. startLeaderElection 开始leader选举

        1. 首先判断节点是不是LOOKING状态 默认就是LOOKING 如果是LOOKING状态通过myid 最大事务ID Zxid 和当前Epoch生成选票对象
          在这里插入图片描述

        2. 创建发送选票和接受选举结果的socket
          在这里插入图片描述

        3. 开始选举 创建QuorumCnxManager 用于跟其他zk节点的选票交互 底层使用了FastLeaderElection 作为选举算法
          在这里插入图片描述

    3. 调用join方法将线程挂起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值