zookeeper-监控与优化-《每日五分钟搞定大数据》

本文的命令和配置都是基于zookeeper-3.4.6版本。优化很多时候都是基于监控的,所以把这两个内容写在了一起,慢慢消化。 监控 简单地说,监控无非就是获取服务的一些指标,再根据实际业务情况给这些指标设定一个合适的阈值,然后进行告警的一个过程。 如何获取这些指标? ZooKeeper 提供了四字命令(The Four Letter Words),用来获取 ZooKeeper 服务的当前状态及相关信息。 有哪些命令可以使用? ZooKeeper四字命令 功能描述 conf 打印配置 cons 列出所有连接到这台服务器的客户端全部连接/会话详细信息。包括"接受/发送"的包数量、会话id、操作延迟、最后的操作执行等等信息。 crst 重置所有连接的连接和会话统计信息。 dump 列出那些比较重要的会话和临时节点。这个命令只能在leader节点上有用。 envi 打印出服务环境的详细信息。 reqs 列出未经处理的请求 ruok 即"Are you ok",测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应。 stat 输出关于性能和连接的客户端的列表。 srst 重置服务器的统计。 srvr 列出连接服务器的详细信息 wchs 列出服务器watch的详细信息。 wchc 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。 wchp 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。 mntr 输出可用于检测集群健康状态的变量列表 如何使用四字命令? 可以在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。举个最常用的栗子: echo mntr | nc ip 2181 指标名 解释 zk_version 版本 zk_avg_latency 平均 响应延迟 zk_max_latency 最大 响应延迟 zk_min_latency 最小 响应延迟 zk_packets_received 收包数 zk_packets_sent 发包数 zk_num_alive_connections 活跃连接数 zk_outstanding_requests 堆积请求数 zk_server_state 主从状态 zk_znode_count znode 数 zk_watch_count watch 数 zk_ephemerals_count 临时节点数 zk_approximate_data_size 近似数据总和大小 zk_open_file_descriptor_count 打开 文件描述符 数 zk_max_file_descriptor_count 最大 文件描述符 数 leader才有的指标 zk_followers Follower 数 zk_synced_followers 已同步的 Follower 数 zk_pending_syncs 阻塞中的 sync 操作 优化方案 1.日志 快照目录 dataDir 和 事务日志目录 dataLogDir 分离 写事务日志的目录,需要保证目录空间足够大,并挂载到单独的磁盘上 为了保证数据的一致性,Zookeeper 默认 forceSync 配置为 yes , 即在返回客户端事务请求响应之前,要将此次请求对应的事务日志刷入到磁盘中,所以事务日志的写入速度,直接决定了 Zookeeper 的吞吐率 Log4j日志优化 调整为 DaliyRollingFileAppender,每天滚动创建新的日志文件 vim $ZOOKEEPER_HOME/conf/log4j.properties zookeeper.root.logger=INFO, CONSOLE zookeeper.console.threshold=INFO zookeeper.log.dir=. zookeeper.log.file=zookeeper.log zookeeper.log.threshold=DEBUG zookeeper.tracelog.dir=. zookeeper.tracelog.file=zookeeper_trace.log log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file} log4j.appender.ROLLINGFILE.DatePattern='.'yyyy-MM-dd 增加 ZOO_LOG_DIR 配置 vim bin/zkServer.sh ZOO_LOG_DIR=$ZOOBINDIR/../log4j CONSOLE改为ROLLINGFILE vim bin/zkEnv.sh # if [ "x${ZOO_LOG4J_PROP}" = "x" ] # then # ZOO_LOG4J_PROP="INFO,CONSOLE" # fi if [ "x${ZOO_LOG4J_PROP}" = "x" ] then ZOO_LOG4J_PROP="INFO,ROLLINGFILE" fi 2.zoo.cfg配置 globalOutstandingLimit=100000 客户端连接过多,限制客户端请求,避免OOM preAllocSize=64M 日志文件预分配大小; snapCount=100,000 多少次写事务,生成一个快照如果快照生成频繁可适当调大该参数。 一般zk的应用提倡读大于写,性能较好(10:1),存储元数据用来协调分布式数据最终一致。写过于频繁使用缓存更好 日志文件自动清除 autopurge.snapRetainCount=3 # 要在dataDir中保留的快照数 autopurge.purgeInterval=24 # 设置日志清除时间间隔;设置为“0”以禁用自动清除功能 谨慎修改: skipACL=yes 忽略ACL验证,可以减少权限验证的相关操作,提升一点性能。 forceSync=no 在不追求强一致性的情况下可以把这个设为no,对写请求的性能提升很有帮助。 forceSync指每次写请求都强制从pagecache固化到磁盘上,才算是写成功返回。 当写请求数量到达一定程度的时候,后续写请求会等待前面写请求的forceSync操作,造成一定延时。 如果追求低延时的写请求,配置forceSync=no,数据写到pagecache后就返回。 但是机器断电的时候,pagecache中的数据有可能丢失。 forceSync=yes;fsync.warningthresholdms=50 若为强一致性场景,可以再设置个fsync.warningthresholdms=50, 数据固化到磁盘的操作fsync超过50ms的时候,将会在zookeeper.out中输出一条warn日志(forceSync=yes有效)。https://www.cnblogs.com/uncledata/p/9771268.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信