目录

一、配置参数

二、常用命令

三、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、单机启动

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、集群启动

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主线程。

Zookeeper(2) - 配置详解与启动原理相关推荐

  1. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  2. 使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...

  3. Zookeeper集群搭建(配置详解)

    软件环境准备: Linux服务器一台.三台.五台(2*n+1台): Java jdk 1.7: zookeeper 3.4.6版: 软件安装: 解压jdk.zookeeper文件到指定目录,执行命令t ...

  4. 【深入理解Hadoop原理】Hadoop 参数配置 详解

    Hadoop 参数配置 详解 一.常用端口 组件 节点 默认端口 配置 用途说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传 ...

  5. php-fpm 启动参数及重要配置详解

    2019独角兽企业重金招聘Python工程师标准>>> php-fpm 启动参数及重要配置详解 约定几个目录 /usr/local/php/sbin/php-fpm /usr/loc ...

  6. AspNetCore 启动地址配置详解

    背景 程序在发布部署时候,设置环境ASPNETCORE_URLS不生效,也没在代码里使用UseUrls("xxxx"),启动一直是http://localhost:5000.最后测 ...

  7. JVM启动参数配置详解

    JVM启动参数配置详解 1. JDK8的JVM启动参数默认配置 2. JDK8的JVM启动参数说明 2.1 基本参数 2.2 G1相关参数 2.3 辅助信息 1. JDK8的JVM启动参数默认配置 - ...

  8. 内核启动流程分析(二)配置详解

    总体概述 配置详解 配置的最终目的,是生成了.config文件,查看下这个文件, # # Automatically generated make config: don't edit # Linux ...

  9. 【ZooKeeper】配置文件详解

    ZooKeeper的配置文件详解 zkServer.sh读取的默认配置文件是$ZOOKEEPER_HOME/conf/zoo.cfg.如果要用其它配置文件.如下传递配置文件参数: zkServer.s ...

最新文章

  1. alsa 测试 linux_python语音智能对话聊天机器人--linuxamp;amp;树莓派双平台兼容
  2. JavaScript label语句
  3. toad mysql导入excel_Oracle 使用TOAD实现导入导出Excel数据
  4. 数据结构源码笔记(C语言):索引文件建立和查找
  5. 基于mini2440的看门狗(裸机)
  6. Wannafly挑战赛10F-小H和遗迹【Trie,树状数组】
  7. memcpy/memset函数的c语言实现
  8. 安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告
  9. 文件流对象 c# 1614525948
  10. 请注意,我们要谈谈神经网络的注意机制和使用方法
  11. endnotex9如何导入caj中文文献_EndNote X9常用方法汇总
  12. 云计算实战系列六(Linux进程管理)
  13. mysql两个数据库表数据同步_php同步mysql两个数据库中表的数据
  14. 提问:Server Application Unavailable
  15. minio 文件预览_Minio使用说明
  16. 论大学毕业后是否适合创业
  17. Zabbix 5.0 监测Windows远程桌面登录
  18. 【JavaScript】新浪微博批量删除脚本
  19. php汉字转换拼音,php中怎么将中文转换拼音
  20. 如何解决网站首页老是被篡改经常反复被篡改

热门文章

  1. 计算机网络谢希仁第七版课后习题答案(第四章)
  2. [ESP][驱动]ST7701S RGB屏幕驱动
  3. AVB校验微观版本:android avb(Android Verified Boot)验证
  4. Mysql表连接:内连接、外连接、交叉连接、自然连接真的都不一样吗
  5. JSP的标签有哪些如何使用jsp标签
  6. libxml主要函数说明
  7. 12、可观测性--告警处理
  8. Laravel 报错 failed to open stream 的解决方法
  9. Axure动态面板使用,简单的交互
  10. C++的高精乘+高精加