Zookeeper 配置文件:核心参数优化与实操指南

文章目录

  • 一、核心参数优化详解
    • [1.1 tickTime:Client-Server通信心跳时间](#1.1 tickTime:Client-Server通信心跳时间)
    • [1.2 initLimit:Leader-Follower初始通信时限](#1.2 initLimit:Leader-Follower初始通信时限)
    • [1.3 syncLimit:Leader-Follower同步通信时限](#1.3 syncLimit:Leader-Follower同步通信时限)
    • [1.4 dataDir:数据文件目录](#1.4 dataDir:数据文件目录)
    • [1.5 clientPort:客户端连接端口](#1.5 clientPort:客户端连接端口)
  • 二、优化操作说明
    • [2.1 jvm配置](#2.1 jvm配置)
    • [2.2 log4j配置](#2.2 log4j配置)
    • [2.3 ACL验证忽略](#2.3 ACL验证忽略)

一、核心参数优化详解

1.1 tickTime:Client-Server通信心跳时间

Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。

tickTime=2000

1.2 initLimit:Leader-Follower初始通信时限

集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。

initLimit=5

1.3 syncLimit:Leader-Follower同步通信时限

集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。

syncLimit=2

1.4 dataDir:数据文件目录

Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。

dataDir=/opt/zookeeper/data

1.5 clientPort:客户端连接端口

客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

clientPort=2181

服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)

这个配置项的书写格式比较特殊,规则如下:

复制代码
server.N=YYY:A:B
server.1=itcast05:2888:3888
server.2=itcast06:2888:3888
server.3=itcast07:2888:3888

ALLOW_ANONYMOUS_LOGIN=yes

表明zookeeper会读取该环境变量,从字面意思也可知,该参数配置的为是否可以让匿名用户访问服务,说白了也就是游客也可以访问。

ZOO_LISTEN_ALLIPS_ENABLED

二、优化操作说明

2.1 jvm配置

默认jvm没有配置Xmx、Xms等信息,可以在conf目录下创建java.env文件。

export JVMFLAGS="-Xms512m -Xmx512m $JVMFLAGS"

2.2 log4j配置

log4j配置,由于zk是通过nohup启动的,会有一个zookeeper.out日志文件,该文件中记录的是输出到console的日志。

log4j中只要配置输出到console即可,zookeeper.out日积月累会不断变大,要放在容量大的磁盘上。

复制代码
zookeeper.root.logger=INFO, CONSOLE
zookeeper.console.threshold=INFO
log4j.rootLogger=${zookeeper.root.logger}
 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

zoo.cfg文件中,dataDir是存放快照数据的,dataLogDir是存放写前日志的。

这两个目录不要配置成一个路径,要配置到不同的磁盘上。

如果磁盘是使用了raid,系统就一块磁盘,那配置到一块磁盘上也可以。

写前日志的部分对写请求的性能影响很大,保证dataLogDir所在磁盘性能良好。

2.3 ACL验证忽略

zoo.cfg文件中skipACL=yes,忽略ACL验证,可以减少权限验证的相关操作,提升一点性能。

zoo.cfg文件中forceSync=no,这个对写请求的性能提升很有帮助,是指每次写请求的数据都要从pagecache中固化到磁盘上,才算是写成功返回。

当写请求数量到达一定程度的时候,后续写请求会等待前面写请求的forceSync操作,造成一定延时。

如果追求低延时的写请求,配置forceSync=no,数据写到pagecache后就返回。但是机器断电的时候,pagecache中的数据有可能丢失。

zk的dataDir和dataLogDir路径下,如果没有配置zk自动清理,会不断的新增数据文件。可配置成zk系统自动清理数据文件,但是最求系统最高性能的话,建议人工手动清理文件:

复制代码
zkCleanup.sh -n 3  #这样保留三份文件。

查看zk节点状态。重新启动zk节点前后,一定要查看状态

复制代码
echo ruok | nc host port
echo stat | nc host port

配置fsync.warningthresholdms=20,单位是毫秒,在forceSync=yes的时候,如果数据固化到磁盘的操作fsync超过20ms的时候,将会在zookeeper.out中输出一条warn日志。

这个目前zk的3.4.5和3.5版本有bug,在zoo.cfg中配置不生效。我的做法是在conf/java.env中添加java系统属性:

1

export JVMFLAGS="-Dfsync.warningthresholdms=20 $JVMFLAGS"

相关推荐
阿里云云原生4 小时前
Agent 数据飞轮平台的选型和实践
云原生
做运维的阿瑞5 小时前
云项目可观测性与成本治理:告警、日志、Dashboard 与预算标签
大数据·云原生·云计算·terraform
无人生还别怕6 小时前
如何搭建k8s服务(containerd部署)
linux·云原生·容器·kubernetes·openanolisos
知已难寻6 小时前
01 · OpenStack的认证管理 Keystone
运维·服务器·云原生·云计算·openstack
分布式存储与RustFS6 小时前
模型权重散落在每台 GPU?用 RustFS 给 vLLM 做共享权重库
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
fb_123458 小时前
从探针到权限:一篇吃透 Kubernetes 健康检查、RBAC 认证授权与 Dashboard 可视化管理
云原生·容器·kubernetes
mengge.cloud8 小时前
10-28-Kubernetes健康检查认证授权与Dashboard
云原生·容器·kubernetes
骑着蜗牛撵大象3279 小时前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
做运维的阿瑞9 小时前
EKS 可销毁环境:集群创建、应用部署到账单归零
云原生·云计算·terraform
每天一道题9 小时前
微服务为什么会变慢?从 QPS、P99 到 Trace 与性能瓶颈
微服务·云原生·架构