当前位置: 首页 > news >正文

ZooKeeper配置优化秘籍:核心参数说明与性能优化

#作者:张桐瑞

文章目录

  • tickTime:Client-Server通信心跳时间
  • initLimit:Leader-Follower初始通信时限
  • syncLimit:Leader-Follower同步通信时限
  • dataDir:数据文件目录
  • clientPort:客户端连接端口
  • 服务器名称与地址:
  • 优化操作说明

tickTime:Client-Server通信心跳时间

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

tickTime=2000

initLimit:Leader-Follower初始通信时限

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

syncLimit:Leader-Follower同步通信时限

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

syncLimit=10

dataDir:数据文件目录

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

dataDir=/opt/zookeeper/data

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

优化操作说明

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

export JVMFLAGS=“-Xms512m -Xmx512m $JVMFLAGS”

2. 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

3. zoo.cfg文件中,dataDir是存放快照数据的,dataLogDir是存放写前日志的。
这两个目录不要配置成一个路径,要配置到不同的磁盘上。

如果磁盘是使用了raid,系统就一块磁盘,那配置到一块磁盘上也可以。
写前日志的部分对写请求的性能影响很大,保证dataLogDir所在磁盘性能良好。

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

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

当写请求数量到达一定程度的时候,后续写请求会等待前面写请求的forceSync操作,造成一定延时。
如果追求低延时的写请求,配置forceSync=no,数据写到pagecache后就返回。但是机器断电的时候,pagecache中的数据有可能丢失。

5. zk的dataDir和dataLogDir路径下,如果没有配置zk自动清理,会不断的新增数据文件。可配置成zk系统自动清理数据文件,但是最求系统最高性能的话,建议人工手动清理文件:
zkCleanup.sh -n 3 #这样保留三份文件。

6. 查看zk节点状态。重新启动zk节点前后,一定要查看状态
echo ruok | nc host port
echo stat | nc host port

7. 配置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”

8. zkEnv.sh中jvm添加

修改:SERVER_JVMFLAGS一行为:

export SERVER_JVMFLAGS=“-Xmx2048m -Xms2048m”

说明:这两个参数的作用,

Xmx :程序运行期间最大可占用的内存大小,

如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出 OutOfMemory异常

Xms : 程序启动时占用内存大小

此值可以设置与-Xmx相同,

以避免每次垃圾回收完成后JVM重新分配内存

应设置为多少?

Xmx 默认是物理内存的1/4,

最大建议不超过物理内存的3/4

所以如果没有其他应用同时运行的话,

可以设置为物理内存的1/2再观察调整

9. 用jmx监控集群:

1,在zookeeper的conf目录下新建java.env

[root@zk1 conf]# vi java.env

内容:

JMXHOSTNAME="172.18.1.1"JMXPORT=8899

说明:JMXHOSTNAME的值是当前服务器的ip

相关文章:

  • 多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)
  • 最高支持高速L3商用,华为发布ADS 4智驾系统
  • AT45DB161串行FLASH操作
  • 晶振不集成到芯片内部的原因分析
  • Ubuntu中选择Python虚拟环境
  • 考拉悠然:科技与匠心,以烟草虫情AI监测系统共筑品质未来
  • git tag使用场景和实践
  • BDO分厂开展地沟“大清肠”工作
  • 交通运输行业综合智慧监管平台:商贸物流的安全与效率引擎
  • G3学习笔记
  • ejs列表渲染,条件渲染,在node中使用ejs
  • 【C++入门:类和对象】[3]
  • JS 应用算法逆向三重断点调试调用堆栈BP 插件发包安全结合
  • java中final以及static的作用
  • Linux并发与竞争:从生活例子到内核实战
  • 从对数变换到深度框架:逻辑回归与交叉熵的数学原理及PyTorch实战
  • 高企复审奖补!2025年合肥市高新技术企业重新认定奖励补贴政策及申报条件
  • 【AI论文】ToolRL:奖励是工具学习所需的一切
  • [创业之路-382]:企业法务 - 企业如何通过技术专利与技术秘密保护自己
  • 深度学习:迁移学习
  • 北京顺义潮白河大桥主跨坍塌原因公布,已成立事故调查组
  • 被电诈100万元又要被骗71万元,女子经民警近8小时劝阻幡然醒悟
  • 继微软之后,亚马逊也放缓人工智能数据中心计划
  • 大理杨徐邱上诉案开庭:当事人称曾接受过两次测谎测试
  • 特朗普亲自介入美日关税谈判:以势压人还是给对手“送助攻”
  • 深一度|奥运一年后丢冠不稀奇,但究竟谁来扛起男乒的大旗