ZooKeeper巡检、监控、调优、排障

1,141 阅读2分钟

1、巡检

ZooKeeper 为上层应用服务提供协调同步和配置一致性等服务。

每日早晚登录运行 ZooKeepeRegionServererver 服务的主机,检测 ZK 状态。

1.1、ZooKeeper服务状态

1.2、参数配置

序号配置项当前配置推荐配置
1数据目录 dataDir/opt/zookeeper/data 
 2事务日志目录dataLogDir /opt/zookeeper/data 
 3最大客户端连接数maxClientCnxns 60 2000
 4Zookeeper Server 的Java 堆栈大小 1G 4G
5系统用户Hadoopzookeeper
6系统组hadoopzookeeper

调整建议:

①增大最大客户端连接数:

通常来讲,在一个大集群里面,对于 Zookeeper 的访问量会比较大,因此需要增大 Zookeeper 的客户端最大连接数。

②增大 ZookeepeRegionServererver 的 Java 堆栈大小:

集群比较大的情况下,Zookeeper 负载较高,需要的内存也更多。因此建议,增大 Zookeeper 的内存到 4G。

1.3、ZooKeeper shell巡检

①jps

②netstat -anput|grep 2181

查询监控端口状态

③zkServer.sh status

查询具体状态

2、排障

2.1、ZooKeeper无法正常使用

我们的集群出现了一个问题,zookeeper 突然无法正常使用,造成了整个集群产生了故障,在当时的 cm 监控页面中看到 内存溢出相关提示,但是后续再找,无法找到,并且在 zk 日志中并未找到内存溢出相关提示。

【解决办法】

zookeeper 服务器的日志中对于 Hive 应用产生的 Znode 节点数, 可以看到一共有将近 25 万个(每个 znode 都会在 Zookeeper 服务器进程内存中存在并占用一定空间)

grep hive_zookeeper_namespace_hive zookeeper-cmf-zookeeper-SERVER-DSJ-RTB-4T-205.log|wc -l  
249357

推测报告 OutOfmemory 错误的时候许多 Hive 的查询所需的 znode 占据了大量的 zookeeper 的进程内存(JVM heap), 所以导致进程崩溃。加大 zk 的 jvm 内存空间解决该问题