当前位置 : 主页 > 网络编程 > net编程 >

ZK的zoo.cfg文件和节点属性说明

来源:互联网 收集:自由互联 发布时间:2023-09-03
zoo.cfg 安装完ZooKeeper后在conf下有这样一个文件: 一般会将其重命名为zoo.cfg,在zoo.cfg钟有这样几个比较重要的配置: tickTime=2000 用于计算的时间单元,默认单位是毫秒,整个Zookeeper中的


zoo.cfg

安装完ZooKeeper后在conf下有这样一个文件:

ZK的zoo.cfg文件和节点属性说明_客户端

一般会将其重命名为zoo.cfg,在zoo.cfg钟有这样几个比较重要的配置:

  • tickTime=2000   

用于计算的时间单元,默认单位是毫秒,整个Zookeeper中的时间都是以tickTime为基准的。比如session超时:N*tickTime

ZK的zoo.cfg文件和节点属性说明_数据_02

  • initLimit=10

用于集群,允许从节点连接并同步到master节点的初始化时间,以tickTime的倍数来表示,initLimit * tickTime,随ZK集群数据量适当增加值。这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是 tickTime)长度后 Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。

ZK的zoo.cfg文件和节点属性说明_数据_03

  • syncLimit=5

用于集群,Leader与从节点之间发送消息,请求和应答的时间长度(心跳机制,心跳机制超过一定时间,从节点就会被抛弃)。即Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长。以tickTime的倍数来表示,initLimit * tickTime,不适合太大,容易使Leader 误认为Follower 在线。

ZK的zoo.cfg文件和节点属性说明_数据_04

  • dataDir/dataLogDir

dataDir是必须要配置的,用来存储ZooKeeper相关的一些数据,默认情况下,ZK的事务日志和数据快照都会保存在dataDir目录下。在集群zookeeper服务在启动的时候回去读取zoo.cfg这个文件,从这个文件中找到这个属性然后获取它的值也就是dataDir 的路径,它会从这个路径下面读取mydi这个文件,从这个文件中获取要启动的当前服务器的地址,当它找不到这个地址的时候就会抛出异常。dataLogDir事务日志输出目录,建议单独一个磁盘或挂载点,可极大的提升ZK性能,如果不配置会和dataDir公用。

ZK的zoo.cfg文件和节点属性说明_客户端_05

官方建议不要使用/tmp来做存储快照的目录,/tmp这只是一个案例。

比如我这里配置的是:

ZK的zoo.cfg文件和节点属性说明_数据_06

里面有相关的日志记录:

ZK的zoo.cfg文件和节点属性说明_服务器_07

  • clientPort端口

在server启动完成后需要有一个客户端,默认是2181。

ZK的zoo.cfg文件和节点属性说明_服务器_08

  • #server.A=B:C:D 

其中A是一个数字, 表示这是第几号server,是一个数字,与myid文件中的id是一致的。 B是该server所在的IP地址;C配置该server和集群中的leader交换消息所使用的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群(在单机模拟集群模式)的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。 

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。 

  • #maxClientCnxns=60

单个客户端与单台服务器之间的连接数的限制,默认是60,如果设置为0,那么表明不作任何限制。

ZK的zoo.cfg文件和节点属性说明_服务器_09

  • # Session超时时间限制

如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2 * tickTime ~ 20 * tickTime 这个范围 。

minSessionTimeout=4000

maxSessionTimeout=40000

  • #autopurge.snapRetainCount=3

ZK的zoo.cfg文件和节点属性说明_服务器_10

这个参数和下面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。

  • autopurge.purgeInterval=1

3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,为0表示不开启自动清理功能。

ZK的zoo.cfg文件和节点属性说明_数据_11

其他属性

首先获取一个节点/test:

ZK的zoo.cfg文件和节点属性说明_客户端_12

这里的1是value值;

  • cZxid = 0x300000002
  • 表示事务id,我们进行一个事务操作的时候,这里是create操作,相当于发起一个事务请求,会有一个事务id。
  • ctime = Fri Oct 05 08:01:29 CST 2018
  • 创建时间。
  • mZxid = 0x300000002
  • 即modify。如果我们没有修改过的话,create的id和modify的id是一样的。最后修改znode更改的事务id。
  • mtime = Fri Oct 05 08:01:29 CST 2018
  • 修改时间。
  • pZxid = 0x300000002
  • 表示当前/test节点下的子节点最后一次被修改的事务id。即只有子节点变更才会对pZxid有影响。
  • cversion = 0
  • 这里的vesion相当于是乐观锁的版本。当前节点的子节点的版本号。
  • dataVersion = 0
  • 当前数据的version。
  • aclVersion = 0
  • 当前节点acl变更的version。

  这三个version可以控制数据的并发性。简单演示下:

ZK的zoo.cfg文件和节点属性说明_客户端_13

ZK的zoo.cfg文件和节点属性说明_数据_14

  • ephemeralOwner = 0x0
  • 创建临时节点的时候,会有一个sessionId 。 该值存储的就是这个sessionid,即绑定当前会话。

      简单演示下:

ZK的zoo.cfg文件和节点属性说明_服务器_15

存储的就是会话信息,基于这个会话标识我们才能知道当前会话断开后将哪些节点删除。

  • dataLength = 1
  • 当前数据长度。

    简单演示下:

ZK的zoo.cfg文件和节点属性说明_服务器_16

  • numChildren = 0
  • ​当前子节点的数量。

ZK的zoo.cfg文件和节点属性说明_数据_17

上一篇:类型转换
下一篇:没有了
网友评论