Zookeeper开篇

                              Zookeeper开篇

     Zookeeper作为一个常见的集群一致性的工具,经常用于主备,分布式锁等多个领域,根据LINUX文件系统的思想做出的内存树形结构(LINUX中文件系统的抽象是inode Zookeeper中的叫znode,插一句Hadoop的HDFS中的文件最基本抽象也叫INode)。zookeeper中有三种,群首,跟随者和参与者,后者不参与投票。

Zookeeper的Zab协议包括leader选举和事物广播,会在源码中介绍。

                                   启动的过程


Zk的main方法在QuorumPeerMain中main方法中。

解析参数

调用initializeAndRun根据输入参数解析存储到QuorumPeerConfig这个对象,这个参数就是我们常见的zoo.cfg的路径。QuorumPeerConfig会将zoo.cfg加载到一个Properties中然后去从中得到各个的属性,这些参数后面会用到。这里有一个dynamicConfigFile的属性会被解析为dynamicConfigFileStr。

开启清理任务

解析完毕,开启一个清理任务的线程,系统运行中会定时把内存快照存在硬盘指定位置上,可以启动线程定时清理日志和快照。

生成QuorumPeer

根据前面生成的QuorumPeerConfig启动server 主要是生成QuorumPeer对象,并根据QuorumPeerConfig的属性为QuorumPeer赋值,QuorumPeer是一个ZK Server的抽象。

看一下启动方法start:

@Override

    public synchronized void start() {

        if (!getView().containsKey(myid)) {

            throw new RuntimeException("My id " + myid + " not in the peer list");

        }

        loadDataBase();//读取本地文件 主要是快照文件

        startServerCnxnFactory();// 启动NIO的服务端TCP监听 Accept Select work Expire等

        try {

            adminServer.start();//起一个Jetty服务 端口8080

        } catch (AdminServerException e) {

            LOG.warn("Problem starting AdminServer", e);

            System.out.println(e);

        }

        startLeaderElection();//开启快速选举

        super.start();

    }

Jetty是一个轻量级的Servlet容器,很多框架都在内部使用Jetty提供可视化UI,这是Jetty提供了一个CommonsServlet 显示如下信息:


(其中还有动态配置部分暂时未写)

随后开启选主的过程,下一篇再写

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容