美文网首页分布式zookeeper
Zookeeper-源码分析-启动+选择群首

Zookeeper-源码分析-启动+选择群首

作者: 洛神灬殇 | 来源:发表于2022-04-10 14:37 被阅读0次

    1.启动Socket服务绑定2181端口

    1.初始化操作 QuorumPeerMain.java 启动main方法

    调用initializeAndRun()方法
    2.数据加载到内存

      针对于集群方面的功能,server开头的配置项进行判断是否属于何角色的对象存入到对应的follower或者obvservers,其他不属于在observers的对象存入到servers列表信息。
    
     Quorumaj.java;存入所有的server节点但是不包含observers节点
    

    最后系统会把observers对象存入servers列表,因为已经在之前放入Quorumaj对象中 作为选举的依据。

    因为zk属于会持久化数据到datadir目录上面 所以会定时存储快照,故此会有一个定时任务进行定时清除快照
    

    3.解析Zoo.cfg配置文件到集群中加载所有参数封装对象

    进行判断main传入的args参数的解析过程

    进行创建QuorumPeerConfig对象就是对应的读取配置文件zoo.cfg配置文件获取对应的属性值(读取方式为properties方式kv读取方式)

    判断上面是否servers列表是否大于0,进行判断是否集群模式还是单机模式
    

    4.进行选举操作

    主要为请求处理器:RequestProcessor
    
    不同的角色有不同的请求处理- 通过调用链模式
    

    syncRequestProcessor、commitRequestProcessor
    4.1 QuorumPeer代表服务的节点抽象

    它继承了ZookeeperThread对象属于一个线程,他会进行启动start方法,

    loadDatabase()加载数据,通过ZKDataBase类去加载日志也就是所有节点数据信息到内存中。

    ServerCnxnFactory.start()启动数据接收客户端请求。系统属性(-D):zookeeper.serverCnxFactory

    每次接收客户端请求的时候去,会校验一次zkserver是否处于请求状态。(所以是较为一致性)

    然后如果没有进行配置,就至今用系统默认的NIOServerFactory去启动NIO模式的去更新同步数据信息。
    startLeaderElection()开始启动领导选举功能策略。

    传输层

    负责接收和发送数据

    createCnManager()方法负责初始化传输层服务功能。

    建立一个监听器Listener,监听的端口为配置文件server.num=ip:服务之间同步端口:服务选举端口

    主要监听为服务选举端口,以及发送到其他服务的选举端口。

    队列+线程+Socket(BIO)

    1.生成选票:sendWorker线程

    会预先判断存在是否有存在着myid对应的sendWorker的集合数据。
    
    会预先生成创建一个是否存在着myid对应的ArrayList<>集合的数据信息。
    
    有一个线程去循环队列去处理发送队列里面的数据myid对应的数据的信息
    

    2.接收选票:recvWorker线程

    一个队列保存接收的数据信息。
    
    一个RecvWorker接收数据信息线程执行器
    

    应用层

    负责选举和策略投票

    有四种领导者选举

    FastLeaderElection()

    🚩暂时未完成说明
    启动整体的线程也就是执行super.run()

    相关文章

      网友评论

        本文标题:Zookeeper-源码分析-启动+选择群首

        本文链接:https://www.haomeiwen.com/subject/iauvsrtx.html