Zookeeper开篇

作者: 是我_7b3f | 来源:发表于2018-05-19 13:52 被阅读0次

                                  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 显示如下信息:

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

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

    相关文章

      网友评论

        本文标题:Zookeeper开篇

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