目前zookeeper获取监控指标已知的有两种方式:node
一、经过zookeeper自带的 four letter words command 获取各类各样的监控指标shell
二、经过JMX Client链接zookeeer对外提供的MBean来 获取监控指标 (须要修改启动脚本,使其支持远程JMX链接)apache
上述两种方式获取的指标大致上是一致的。vim
经过下列命令来获取这些监控信息 echo commands | nc ip port缓存
如:echo conf | nc 192.168.144.110 2181服务器
如今吧能获取到的监控大体列出来:session
conf:app
可以获取到zookeeper的配置信息,包括jvm
客户端端口,分布式
数据以及日志路径,
间隔单位时间,
单台server与单个client端的链接数限制,
超时时间,
serverId等等信息,
Follower在启动过程当中,会从Leader同步全部最新数据,而后肯定本身可以对外服务的起始状态。Leader容许F在initLimit时间内完成这个工做。
在运行过程当中,Leader负责与ZK集群中全部机器进行通讯,例如经过一些心跳检测机制,来检测机器的存活状态。若是L发出心跳包在syncLimit以后,尚未从F那里收到响应,那么就认为这个F已经不在线了。
选举端口。
详细信息以下:
clientPort=2181
dataDir=/export/servers/zookeeper-3.4.6/data/version-2
dataLogDir=/export/servers/zookeeper-3.4.6/logs/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=2
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
cons:
链接信息的总览,
链接ip
端口号
该链接的发包数
该链接的收包数
链接的session Id
最后操做方式/命令
链接的时间戳
超时时间(未确认)
最后的zxid
最后的响应时间戳
链接的时间延时信息
crst:
重置链接状态,是一个execute 操做 不是一个select 操做
执行后返回一个状态信息:
Connection stats reset.
dump:
输出全部等待队列中的会话和临时节点的信息
envi:
当前server的环境信息:
版本信息
主机的host
jvm相关参数:version,classpath,lib等等
os相关参数:name,version等等
当前host用户信息:name,dir等等
ruok:
查询当前server状态是否正常 若正常返回imok
imok
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 操做 |
调整为 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
客户端链接过多,限制客户端请求,避免OOM
通常zk的应用提倡读大于写,性能较好(10:1),存储元数据用来协调分布式数据最终一致。写过于频繁使用缓存更好
autopurge.snapRetainCount=3 # 要在dataDir中保留的快照数 autopurge.purgeInterval=24 # 设置日志清除时间间隔;设置为“0”以禁用自动清除功能
谨慎修改:
忽略ACL验证,能够减小权限验证的相关操做,提高一点性能。
在不追求强一致性的状况下能够把这个设为no,对写请求的性能提高颇有帮助。
forceSync指每次写请求都强制从pagecache固化到磁盘上,才算是写成功返回。
当写请求数量到达必定程度的时候,后续写请求会等待前面写请求的forceSync操做,形成必定延时。
若是追求低延时的写请求,配置forceSync=no,数据写到pagecache后就返回。
可是机器断电的时候,pagecache中的数据有可能丢失。
若为强一致性场景,能够再设置个fsync.warningthresholdms=50, 数据固化到磁盘的操做fsync超过50ms的时候,将会在zookeeper.out中输出一条warn日志(forceSync=yes有效)。