Zookeeper(2) - 配置详解与启动原理

这篇具有很好参考价值的文章主要介绍了Zookeeper(2) - 配置详解与启动原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、配置参数

二、常用命令

三、ZK的启动过程

3.1、单机启动

3.2、集群启动


一、配置参数

  • dataDir:用于配置走开服务器的快照文件目录,默认情况下,如果没有配置dataLogDir,那么事务日志也会存储在这个目录中。考虑到事务日志的写性能直接影响zookeeper整体的服务能力,因此建议同时设置dataDir和dataLogDir。
  • dataLogDir:存储事务日志文件,zookeeper在返回客户端事务请求响应之前,必须将本次请求对应的事务日志写入到磁盘中,因此,事务日志写入的性能直接确定了zookeeper在处理事务请求时的吞吐。尤其是上文中提到的数据快照操作,会极大的影响事务日志的写性能,因此尽量给事务日志的输出配置一个单独的磁盘或是挂载点,将极大的提升zookeeper的整体性能。
  • initLimit:默认为10,用于配置leader服务器等待follower启动并完成数据同步的时间,follower服务器再启动过程中,会与leader建立连接并完成数据同步,从而确定自己对外提供服务的起始状态。leader服务器允许follower在initLimit时间内完成这个工作。通常情况下,不用修改这个参数,但随着zookeeper集群管理的数据量的增大,follower服务器在启动的时候,从leader上进行同步数据的时间也会相应边长,于是无法在较短的时间完成数据同步,因此,在这种情况下,需要调大这个参数。
  • syncLimit:默认值5,用于配置leader服务器和follower之间进行心跳检测的最大延时时间,在zookeeper集群运行过程中,leader服务器会与所有的follower进行心跳检测来确定该服务器是否存活,如果leader服务器在syncLimit时间内无法获取到follower的心跳检测响应,那么leader就会认为该follower已经脱离了和自己的同步。一般使用默认值即可,除非网络环境较差。
  • snapCount:默认100000,用于配置相邻两次数据快照之间的事务操作次数,即zookeeper会在snapCount次事务操作后进行一次数据快照。
  • preAllocSize:默认值是65535,即64MB。用于设置事务日志文件的预分配磁盘空间,如果我们修改了snapCount的值,那么preAllocSize参数也要随着做出变更。
  • minSessionTimeout/maxSessionTimeout:分别默认值是2倍和20倍,这两个参数用于服务端对客户端会话的超时时间进行限制,如果客户端设置的超时时间不在该范围内,那么会被服务器强制设置为最大或最小超时时间。
  • jute.maxbuffer:默认值1048575,单位字节,用于配置单个数据节点znode上可以存储的最大数据量大小,通常需要考虑到zookeeper上不适宜存储太多的数据,往往需要将该参数设置的更小,在变更该参数时,需要在zookeeper集群的所有机器以及所有客户端上设置才能生效。
  • server.id=host:port:port:配置zookeeper集群机器列表,其中id为serverID,与每台服务器myid文件中的数字对应,同时,在该参数中,会配置两个端口。第一个用于指定follower服务器与leader进行运行时通信和数据同步时所使用的端口,第二个则专门用于leader选举过程中的投票通信。
  • autopurge.snapRetainCount:默认值为3,zookeeper增加了对历史事务日志和快照数据自动清理的功能,该参数用于配置zookeeper在自动清理时需要保留的快照数据文件数量和对应的事务日志文件。并不是磁盘上的所有文件都可以被清理,这样将无法恢复数据。因此该参数的最小值是3,如果配置的比3小,则会被自动调整到3。
  • autopurge.purgeInterval:默认值为0,用于配置zookeeper进行历史文件自动清理的频率,该值为0表示不需要开启定时清理功能。
  • fsync.warningthresholdms:默认1000毫秒,用于配置zookeeper进行事务日志fsync操作时消耗时间的报警阈值,一旦进行一个fsync操作消耗的时间大于该参数,就在日志中打印出报警日志。
  • forceSync:默认值为yes,用于配置zookeeper是否在事务提交的时候,将日志写入操作强制刷新磁盘,默认是yes,即每次事务日志写入操作都会实时刷入磁盘,如果是no,可以提高zookeeper写性能,但存在类似机器断电这样的安全风险。
  • globalOutstandingLimit:默认1000,配置zookeeper服务器最大请求堆积量,在zookeeper运行过程中,客户端会不断的将请求发送到服务端,为了防止服务端资源耗尽,服务端必须限制同时处理的请求数,即最大请求堆积数量。
  • leaderServes:默认为yes,配置leader是否有可以接受客户端连接,即是否允许leader向客户端提供服务,默认情况下,leader服务器能够接受并处理客户端读写请求,在zookeeper的设计中,leader服务器主要用于进行对事务更新请求的协调以及集群本身的运行时协调,因此,可以设置让leader服务器不接受客户端的连接,使其专注于进行分布式协调。
  • skipAcl:默认为no,配置是否可以跳过acl权限检查,默认情况下,会对每一个客户端请求进行权限检查,如果设置为yes,则能一定程度的提升zookeeper的读写性能,但同时也将向所有客户端开放zookeeper的数据,包括那些之前设置过acl权限的数据节点,也将不再接受权限控制。
  • cnxTimeout:默认5000毫秒,配置在leader选举过程中,各服务器之间进行tcp连接创建的超时时间。

二、常用命令

先Telnet上服务器:telnet localhost 2181

  • conf 输出zookeeper服务器运行时使用的基本配置信息,包括clientPort、dataDir、tickTime等。
  • cons 输出当前这台服务器上所有客户端连接的详细信息,包括每个客户端的客户端ip、会话id和最后一次与服务器交互的操作类型等。
  • crst 是一个功能性命令,用于重置所有的客户端连接统计信息。
  • dump 用于输出当前集群的所有会话信息,包括这些会话的会话id,以及每个会话创建的临时节点等信息,另外,只有leader服务器会进行所有会话的超时检测,因此,如果在leader上执行该命令,还能够看到每个会话的超时时间。
  • envi 输出zookeeper所在服务器运行时的环境信息。
  • ruok 输出当前zookeeper服务器是否正在运行,该命令的名字非常有趣,谐音正好是are you ok。执行该命令后,如果当前zookeeper服务器正在运行,那么返回imok,否则没有任何输出。这个命令只能说明2181端口开着,想要更可靠的获取更多zookeeper运行状态信息,可以使用stat命令。
  • stat 用于获取zookeeper服务器的运行时状态信息,包括基本的zookeeper版本、打包信息、运行时角色、集群数据节点个数等信息,还会将当前服务器的客户端连接打印出来。还会输出一些服务器的统计信息,包括延迟情况,收到请求数和返回的响应数等。
  • srst 是一个功能命令,用于重置所有服务器的统计信息。
  • wchs 命令用于输出当前服务器上管理的watcher的概要信息。
  • wchc 用于输出当前服务器上管理的watcher的详细信息,以会话为单位进行归组,同时列出被该会话注册了watcher的节点路径。
  • wchp 和wahc一样,不同点在于该命令的输出信息以节点路径为单位进行归组。
  • mntr 用于输出比stat命令更详尽的服务器统计信息,包括请求处理的延迟情况、服务器内存数据库大小和集群的数据同步情况。

三、ZK的启动过程

3.1、单机启动

zookeeper通过配置文件启动,分布式技术,服务器,java,数据库,zookeeper

3.1.1、预启动

1. 统一由QuorumPeerMain作为启动类。无论单机或集群,在zkServer.cmd和zkServer.sh中都配置了QuorumPeerMain作为启动入口类。

2. 解析配置文件zoo.cfg。zoo.cfg配置运行时的基本参数,如tickTime、dataDir、clientPort等参数。

3. 创建并启动历史文件清理器DatadirCleanupManager。对事务日志和快照数据文件进行定时清理。

4. 判断当前是集群模式还是单机模式启动。若是单机模式,则委托给ZooKeeperServerMain进行启动。

5. 再次进行配置文件zoo.cfg的解析。

6. 创建服务器实例ZooKeeperServer。Zookeeper服务器首先会进行服务器实例的创建,然后对该服务器实例进行初始化,包括连接器、内存数据库、请求处理器等组件的初始化。

3.1.2、初始化

1. 创建服务器统计器ServerStats。ServerStats是Zookeeper服务器运行时的统计器。

2. 创建Zookeeper数据管理器FileTxnSnapLog。FileTxnSnapLog是Zookeeper上层服务器和底层数据存储之间的对接层,提供了一系列操作数据文件的接口,如事务日志文件和快照数据文件。Zookeeper根据zoo.cfg文件中解析出的快照数据目录dataDir和事务日志目录dataLogDir来创建FileTxnSnapLog。

3. 设置服务器tickTime和会话超时时间限制。

4. 创建ServerCnxnFactory。通过配置系统属性zookeper.serverCnxnFactory来指定使用Zookeeper自己实现的NIO还是使用Netty框架作为Zookeeper服务端网络连接工厂。

5. 初始化ServerCnxnFactory。Zookeeper会初始化Thread作为ServerCnxnFactory的主线程,然后再初始化NIO服务器。

6. 启动ServerCnxnFactory主线程。进入Thread的run方法,此时服务端还不能处理客户端请求。

7. 恢复本地数据。启动时,需要从本地快照数据文件和事务日志文件进行数据恢复。

8. 创建并启动会话管理器。Zookeeper会创建会话管理器SessionTracker进行会话管理。

9. 初始化Zookeeper的请求处理链。Zookeeper请求处理方式为责任链模式的实现。会有多个请求处理器依次处理一个客户端请求,在服务器启动时,会将这些请求处理器串联成一个请求处理链。

10. 注册JMX服务。Zookeeper会将服务器运行时的一些信息以JMX的方式暴露给外部。

11. 注册Zookeeper服务器实例。将Zookeeper服务器实例注册给ServerCnxnFactory,之后Zookeeper就可以对外提供服务。

至此,单机版的Zookeeper服务器启动完毕。

3.2、集群启动

zookeeper通过配置文件启动,分布式技术,服务器,java,数据库,zookeeper

3.2.1、预启动

1. 统一由QuorumPeerMain作为启动类。

2. 解析配置文件zoo.cfg。

3. 创建并启动历史文件清理器DatadirCleanupFactory。

4. 判断当前是集群模式还是单机模式的启动。在集群模式中,在zoo.cfg文件中配置了多个服务器地址,可以选择集群启动。

3.2.2、初始化

1. 创建ServerCnxnFactory。

2. 初始化ServerCnxnFactory。

3. 创建Zookeeper数据管理器FileTxnSnapLog。

4. 创建QuorumPeer实例。Quorum是集群模式下特有的对象,是Zookeeper服务器实例(ZooKeeperServer)的托管者,QuorumPeer代表了集群中的一台机器,在运行期间,QuorumPeer会不断检测当前服务器实例的运行状态,同时根据情况发起Leader选举。

5. 创建内存数据库ZKDatabase。ZKDatabase负责管理ZooKeeper的所有会话记录以及DataTree和事务日志的存储。

6. 初始化QuorumPeer。将核心组件如FileTxnSnapLog、ServerCnxnFactory、ZKDatabase注册到QuorumPeer中,同时配置QuorumPeer的参数,如服务器列表地址、Leader选举算法和会话超时时间限制等。

7. 恢复本地数据。

8. 启动ServerCnxnFactory主线程。文章来源地址https://www.toymoban.com/news/detail-582612.html

到了这里,关于Zookeeper(2) - 配置详解与启动原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • zookeeper的安装与配置和启动闪退问题的解决(win)

    官网下载地址:https://zookeeper.apache.org/releases.html#download 解压,进入conf目录下,将zoo_example.cfg重命名为zoo.cfg,如图所示 新建俩文件夹,分别命名为data和log,打开zoo.cfg文件,找到dataDir,修改数据存放路径dataDir(可以自定义) 然后保存关闭. 在zoo.cfg文件中,还可以修改默认的z

    2024年02月04日
    浏览(38)
  • 修改通过CDH安装的Kafka和Zookeeper等组件的最大文件句柄数

    目录 1.查看当前kafka最大文件句柄数 2.修改supervisord.service 服务配置文件 3.加载配置文件 4.重启supervisord.service服务 5.重启kafka等组件 6.查看修改后最大文件句柄数 7.查看kafka当前使用的文件句柄数 参考:   添加 LimitNOFILE=500000 添加完如下: 在CDH界面重启kafka、zookeeper等组件  

    2024年02月05日
    浏览(27)
  • 从0到一搭建Kafka-单机版-通过单机版zookeeper配置

    教程https://www.bilibili.com/video/BV1t34y1G7NW/ 首先得找到一些基本概念: Java 程序从源代码到运行主要有三步: 编译 :将我们的代码(.java)编译成虚拟机可以识别理解的字节码(.class) 解释 :虚拟机执行Java字节码,将字节码翻译成机器能识别的机器码 执行 :对应的机器执行二进

    2024年02月07日
    浏览(39)
  • Zookeeper的配置和myid文件说明

    配置项 说明 这个配置文件定义了ZooKeeper集群的基本设置,包括如何处理客户端连接和如何进行身份验证和授权。 myid文件的作用是确保zookeeper集群中每个节点的唯一标识符,以便节点可以在集群内互相通信和协调。当一个zookeeper节点启动时,它会读取myid文件,获取自己的标

    2024年02月10日
    浏览(24)
  • ZooKeeper 分布式协调服务: 概述及原理, 安装配置, 基本操作

    作者:禅与计算机程序设计艺术 Apache Zookeeper 是 Apache Hadoop 的子项目之一,是一个开源的分布式协调服务。它负责存储和维护关于网络中各个节点的数据。Zookeeper 提供了以下功能:配置维护、域名服务、同步和共享、软/硬件负载均衡、集群管理、Master 选举等。它的架构使得

    2024年02月08日
    浏览(32)
  • 在Windows上搭建Kafka环境的步骤,包括安装Java、下载Kafka、配置Zookeeper和Kafka、启动Zookeeper和Kafka、创建主题和生产者/消费者等

    1. 安装Java Kafka需要Java环境支持。可以从Oracle官网下载JDK,或者使用OpenJDK。 2. 下载Kafka 可以从Kafka官网下载Kafka二进制压缩包。解压后可以看到bin、config、libs等目录。 3. 配置Zookeeper Kafka依赖Zookeeper实现分布式协作。可以使用Kafka自带的Zookeeper,也可以独立安装Zookeeper。 如果使

    2024年02月11日
    浏览(33)
  • 关于我在配置zookeeper出现,启动成功,进程存在,但是查看状态却没有出现Mode:xxxxx的问题和我的解决方案

            在我输入:zkServer.sh status 之后出现报错码. 报错码: ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Error contacting service. It is probably not running.          我开始去查看我的日志:         日志上面确实有警告

    2024年02月02日
    浏览(42)
  • zookeeper1==zookeeper源码阅读,源码启动ZK集群

    下载源码 Tags · apache/zookeeper · GitHub https://codeload.github.com/apache/zookeeper/zip/refs/tags/release-3.9.1 JDK8 MAVEN3.8.6 mvn -DskipTests=true package 配置ZK1 zkServer.cmd中指出了启动类是 QuorumPeerMain QuorumPeer翻译成集群成员比较合理,Quorum集群Peer成员 在代码目录下新建data文件夹和log文件夹 并在dat

    2024年02月05日
    浏览(34)
  • zookeeper 启动失败,报错 “ZooKeeper JMX enabled by default”

    zookeeper启动时,出现如下情况: 显示JMX是默认关闭的 通过jps命令查看进程时,没有QuorumPeerMain这个进程 网上有很多方法,有说关闭防火墙的, 也有说把命令改成 ./zkServer.sh start 我都尝试过,和上面效果一样,均无法启动(可能每一个人的解决办法都不一样) 在 zkServer.sh 文

    2024年02月01日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包