`
hui_jing_880210
  • 浏览: 43707 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Zookeeper启动过程

阅读更多

Zookeeper的启动入口在org.apache.zookeeper.server.quorum.QuorumPeerMain。

在这个类的main方法里进入了zookeeper的启动过程,首先我们会解析配置文件,即zoo.cfg和myid。

这样我们就知道了dataDir和dataLogDir指向哪儿了,然后就可以启动日志清理任务了(如果配置了的话)。

DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config
                .getDataDir(), config.getDataLogDir(), config
                .getSnapRetainCount(), config.getPurgeInterval());
purgeMgr.start();

接下来会初始化ServerCnxnFactory,这个是用来接收来自客户端的连接的,也就是这里启动的是一个tcp server。在Zookeeper里提供两种tcp server的实现,一个是使用java原生NIO的方式,另外一个是使用Netty。默认是java nio的方式,一个典型的Reactor模型。因为java nio编程并不是本文的重点,所以在这里就只是简单的介绍一下。

//首先根据配置创建对应factory的实例:NIOServerCnxnFactory 或者 NettyServerCnxnFactory
ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();
//初始化配置
cnxnFactory.configure(config.getClientPortAddress(),config.getMaxClientCnxns());

创建几个SelectorThread处理具体的数据读取和写出。

先是创建ServerSocketChannel,bind等

this.ss =  ServerSocketChannel.open();
ss.socket().setReuseAddress(true);
ss.socket().bind(addr);
ss.configureBlocking(false);

然后创建一个AcceptThread线程来接收客户端的连接。

这一部分就是处理客户端请求的模块了,如果遇到有客户端请求的问题可以看看这部分。

接下来就进入初始化的主要部分了,首先会创建一个QuorumPeer实例,这个类就是表示zookeeper集群中的一个节点。初始化QuorumPeer的时候有这么几个关键点:

1. 初始化FileTxnSnapLog,这个类主要管理Zookeeper中的操作日志(WAL)和snapshot。

2. 初始化ZKDatabase,这个类就是Zookeeper的目录结构在内存中的表示,所有的操作最后都会映射到这个类上面来。

3. 初始化决议validator(QuorumVerifier->QuorumMaj) (其实这一步,是在配置)。这一步是从zoo.cfg的server.n这一部分初始化出集群的成员出来,有哪些需要参与投票(follower),有哪些只是observer。还有决定half是多少等,这些都是zookeeper的核心。在这一步,对于每个节点会初始化一个QuorumServer对象,并且放到allMembers,votingMembers,observingMembers这几个map里。而且这里也对参与者的个数进行了一些判断。

4. leader选举 这一步非常重要,也是zookeeper里最复杂而最精华的一部分。

分享到:
评论

相关推荐

    zookeeper详解

    4. **启动Zookeeper服务**:在安装完成后,可以通过执行以下命令启动Zookeeper服务: ``` % $ZOOKEEPER_HOME/bin/zkServer.sh start ``` #### Zookeeper核心概念 1. **Zookeeper服务**:Zookeeper提供了一种...

    hbase配置内置的zookeeper

    通常情况下,HBase 可以与独立的 ZooKeeper 服务进行集成,但为了简化部署过程,特别是对于小型测试环境或开发环境,我们可以选择配置 HBase 内置的 ZooKeeper。 #### 二、配置步骤详解 ##### 1. 准备阶段 首先...

    Zookeeper双机房容灾方案.pdf

    当集群中半数以上的Zookeeper实例启动时,leader就会被确定。后续新增的Zookeeper实例会默认变成follower。 Zookeeper数据同步机制是指Zookeeper集群中的数据同步机制。Zookeeper集群中的数据会根据leader中的数据...

    zookeeper数据迁移从单例到集群linux命令过程

    ### Zookeeper 数据迁移从单例到集群 Linux 命令过程详解 #### 一、概述 Zookeeper 是一个分布式协调服务框架,它为分布式应用程序提供了一套完整的协调服务功能,如配置维护、命名服务、集群管理等。在实际生产...

    在MAC OSX中安装启动zookeeper1

    本文介绍了 ZooKeeper 在 MAC OSX 中的安装和启动过程。 ZooKeeper 是一个功能强大且高效的分布式协调服务,能够满足大规模分布式系统的需求。用户可以根据需要安装和配置 ZooKeeper,以满足不同的业务需求。

    apache-zookeeper-3.6.3-bin.zip

    1. `dataDir`: 指定Zookeeper保存数据的目录,例如"data",这个目录会在Zookeeper启动时创建,用于存储快照和事务日志。 2. `clientPort`: 设置Zookeeper服务器监听客户端连接的端口,默认为2181。 四、初始化数据...

    zookeeper可视化工具

    在运维和开发过程中,为了更方便地管理和监控Zookeeper,出现了许多可视化工具。这些工具通过图形用户界面(GUI)提供对Zookeeper状态的直观展示,帮助用户查看节点信息、操作数据、监控集群状态以及进行故障排查。 ...

    Zookeeper伪分布式集群环境搭建过程

    ### Zookeeper伪分布式集群环境搭建过程 #### 一、Zookeeper简介 ZooKeeper是一个分布式的、开源的应用程序协调服务,被广泛应用于多种分布式场景之中,例如配置维护、域名服务、分布式同步、组服务等。它能够提供...

    zookeeper-3.8.0安装包下载

    会话是客户端与 Zookeeper 服务器之间的一次交互过程,如果服务器与客户端的连接断开,临时节点将被自动删除。Watcher 是一种事件监听机制,可以注册在 Znode 上,当 Znode 发生变化时,Watcher 将接收到通知。 在 ...

    zookeeper集群升级方案

    通过对Zookeeper集群从3.3.4版本升级至3.4.8版本的过程进行详细的规划与实施,不仅可以提高系统的性能与稳定性,还能够更好地支持业务发展。在整个升级过程中,需要注意备份、测试验证、逐步割接等关键环节,以确保...

    zookeeper-3.9.1.zip

    "解压即用"提示用户,只需解压缩文件,就可以开始使用Zookeeper的服务,简化了部署过程。 标签中的"zookeeper"和"linux"进一步强调了这个软件包与Zookeeper项目以及Linux平台的关系,表明这是一款在Linux环境下运行...

    zookeeper linux版本

    4. **启动ZooKeeper**:在`bin`目录下,使用`./zkServer.sh start`命令启动ZooKeeper服务器。 5. **检查状态**:通过`./zkServer.sh status`命令确认ZooKeeper是否已成功启动。 6. **停止ZooKeeper**:当不再需要...

    Zookeeper客户端,资源小方便快捷

    总的来说,ZooInspector作为Zookeeper的客户端工具,极大地简化了Zookeeper的管理和调试过程,提升了开发和运维效率。通过深入理解和熟练使用ZooInspector,我们可以更好地驾驭Zookeeper,为分布式系统构建坚实的...

    CentOS7.0安装zookeeper

    通过上述步骤,我们完成了在 CentOS 7.0 上安装和配置 Zookeeper 的过程。Zookeeper 的安装相对简单,但配置文件的设置对于保证其稳定运行非常重要。此外,合理的环境变量设置也是提高使用便捷性的关键。希望这些...

    Linux下Zookeeper集群的安装

    通常,可以在Zookeeper的bin目录下找到启动脚本,例如`zkServer.sh start`。 6. **验证集群状态** 使用`zkServer.sh status`命令检查Zookeeper服务的状态,确认集群正常运行。 通过以上步骤,可以在Linux环境下...

    zookeeper集群配置详解

    在Linux集群环境中搭建Zookeeper集群是一个涉及到多台服务器间协调工作的复杂过程,需要对Zookeeper的工作原理和配置有深入的了解。本篇详细阐述了从下载安装到集群配置的全过程。 首先,Zookeeper集群部署的前提...

    zookeeper-3.4.6.tar

    此外,Zookeeper的监控和日志管理也是运维过程中不可忽视的部分,通过`jmxremote`可以远程监控Zookeeper的状态,而日志文件则可以帮助我们排查问题和优化性能。 总结来说,Zookeeper 3.4.6是分布式环境中的重要基石...

    Zookeeper笔记.docx

    启动 Zookeeper 需要在每个节点上执行以下命令: * zkserver.sh start Zookeeper 状态 可以使用以下命令查看 Zookeeper 的状态: * zkserver.sh status Zookeeper 的架构 Zookeeper 采用主从架构,一主多从,...

    zookeeper客户端.zip

    描述中的信息进一步说明了这个客户端工具的便捷性:它是一个桌面应用,用户可以直接运行,而不需要复杂的安装过程。压缩包内还附带了详细的使用步骤,这有助于新用户快速上手并了解如何操作这个工具。由于依赖JDK...

Global site tag (gtag.js) - Google Analytics