zoukankan      html  css  js  c++  java
  • Hadoop记录- zookeeper 监控指标

    目前zookeeper获取监控指标已知的有两种方式:

    1、通过zookeeper自带的 four letter words command 获取各种各样的监控指标

    2、通过JMX Client连接zookeeer对外提供的MBean来 获取监控指标 (需要修改启动脚本,使其支持远程JMX连接)

    上述两种方式获取的指标大体上是一致的。

    通过下列命令来获取这些监控信息 echo commands  |  nc ip port

    如:echo conf | nc 192.168.144.110 2181

    现在吧能获取到的监控大致列出来:

    conf:

    能够获取到zookeeper的配置信息,包括

    客户端端口,

    数据以及日志路径,

    间隔单位时间,

    单台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 操作
     

    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有效)。

     
  • 相关阅读:
    javascript类的封装『转』
    闭包概念
    继承
    理解面向对象
    cookie的使用
    开园啦。。。
    Myslq 之常用命令
    Myslq 之修改提示符
    Myslq 之登陆、退出
    Javascript 之 Number
  • 原文地址:https://www.cnblogs.com/xinfang520/p/10721770.html
Copyright © 2011-2022 走看看