问题描述

测试环境ZK集群的三个节点中zk1状态虽然是follower,启动也能正常启动(通过telnet也能telnet 2181端口); 无法通过zk客户端去连接2181端口,状态一致是CONNECTING

查看zk集群所有节点状态
/data/zookeeper-new-1/bin/zkServer.sh status
/data/zookeeper-new-2/bin/zkServer.sh status
/data/zookeeper-new-3/bin/zkServer.sh status

得到zk2是主节点

查看各个节点的data数据大小
du -h /data/zookeeper/tmp/zk1/data/version-2/ --max-depth=1
du -h /data/zookeeper/tmp/zk2/data/version-2/ --max-depth=1
du -h /data/zookeeper/tmp/zk3/data/version-2/ --max-depth=1
[appadm@moonmall_Z1 zookeeper]$ du -h /data/zookeeper/tmp/zk1/data/version-2/ --max-depth=1
2.4G /data/zookeeper/tmp/zk1/data/version-2/
[appadm@moonmall_Z1 zookeeper]$ du -h /data/zookeeper/tmp/zk2/data/version-2/ --max-depth=1
7.1G /data/zookeeper/tmp/zk2/data/version-2/
[appadm@moonmall_Z1 zookeeper]$ du -h /data/zookeeper/tmp/zk3/data/version-2/ --max-depth=1
7.3G /data/zookeeper/tmp/zk3/data/version-2/
[appadm@moonmall_Z1 zookeeper]$

结果: zk1节点的数据落后其它节点太多,查看ZK1的配置信息(zoo.conf

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper/tmp/zk1/data
dataLogDir=/data/zookeeper/tmp/zk1/log
# the port at which the clients will connect
clientPort=2181

两个参数需要注意

参数名称 说明
tickTime zk服务器与客户端之间心跳维持的时间间隔。每隔tickTime的时间就会发送一个心跳。
initLimit 允许所有follower与leader进行同步的时间,如果在设定的时间段内,半数以上的follower未能完成同步,集群会再进行一次选举。
syncLimit leader与follower之间的同步时间,如果在设定的时间内未完成同步,它将会被集群丢弃。
解决方案
  1. 调整syncLimit, 如果文件大小相差较大,可以讲时间相应的调大.
  2. 将主节点的文件手动复制到有问题的节点中.
  3. 调整zoo.conf定时清理数据快照信息。减少数据同步信息
autopurge.snapRetainCount=5
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1
  1. 对于集群节点data目录快照文件相差非常巨大。用方法2无法使集群正常工作。(即使集群能够正常启动起来,过不了多久又会停止工作。但是各个节点角色还是正常的)。考虑到之前有个节点总是挂起。可以想到整个集群数据不能保证一致,可以考虑是否重建数据目录。这个需要对整个业务衡量

线上ZK问题排查的更多相关文章

  1. Java线上应用故障排查之二:高内存占用

    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...

  2. 一次线上OOM故障排查经过

    转贴:http://my.oschina.net/flashsword/blog/205266 本文是一次线上OOM故障排查的经过,内容比较基础但是真实,主要是记录一下,没有OOM排查经验的同学也可以 ...

  3. 线上zk节点报org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:187) at java.lang.Thread.run(libgcj.so.10)

    线上zk做配置管理,最近突然发现两个节点一直在刷下边 java.nio.channels.CancelledKeyException    at gnu.java.nio.SelectionKeyIm ...

  4. java线上应用故障排查之二:高内存占用【转】

    前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查. 搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGe ...

  5. 【JVM】线上应用故障排查

    高CPU占用 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障. 通过ps aux ...

  6. 线上服务器CPU100%排查,Linux进程消耗查看

    线上服务器CPU100%排查,Linux进程消耗查看 1.排查步骤 1.1Linux下排查 1.1.1查消耗cpu最高的进程PID 1.1.2根据PID查出消耗cpu最高的线程号 1.1.3根据线程号 ...

  7. MySQL死锁系列-线上死锁问题排查思路

    前言 MySQL 死锁异常是我们经常会遇到的线上异常类别,一旦线上业务日间复杂,各种业务操作之间往往会产生锁冲突,有些会导致死锁异常.这种死锁异常一般要在特定时间特定数据和特定业务操作才会复现,并且分 ...

  8. K8S线上集群排查,实测排查Node节点NotReady异常状态

    一,文章简述 大家好,本篇是个人的第 2 篇文章.是关于在之前项目中,k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务后的问题排查. 文章中所 ...

  9. mysql innodb引擎 一次线上死锁分析排查步骤

    我们的线上erp系统一天使用人员反映部分数据死活保存不上而且页面操作很慢.开始以为操作数据量大的原因, 后来查看了我们线上的glowroot系统,发现slowtrace中有超长时间的访问,点开查看详情 ...

随机推荐

  1. UVA1103 古代象形符号 Ancient Messages 题解

    题目链接: https://www.luogu.org/problemnew/show/UVA1103 题目分析: 我们可以先进行矩阵的还原 for(int k=1;k<=4;k++) { a[ ...

  2. 用canvas绘制时钟

    用canvas做时钟其实很简单,下面是我做出的效果: 是不是还挺漂亮的? 下面上代码: html <div class="whole"> <canvas id=& ...

  3. Android调用系统分享功能总结

    Android分享-调用系统自带的分享功能 实现分享功能的几个办法 1.调用系统的分享功能 2.通过第三方SDK,如ShareSDK,友盟等 3.自行使用各自平台的SDK,比如QQ,微信,微博各自的S ...

  4. [PTA] 1002. 写出这个数 (Basic)

    import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Sc ...

  5. [WPF自定义控件库]自定义Expander

    1. 前言 上一篇文章介绍了使用Resizer实现Expander简单的动画效果,运行效果也还好,不过只有展开/折叠而缺少了淡入/淡出的动画(毕竟Resizer模仿Expander只是附带的功能).这 ...

  6. sessionID是如何在客户端和服务器端传递的?

    sessionID是如何在客户端和服务器端传递的? 服务器初次创建session的时候后返回session到客服端(在返回头(response)中有setCookie),浏览器会把sessionnam ...

  7. k8s1.9.0安装--基础集群部署

    二.基础集群部署 - kubernetes-simple 1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运 ...

  8. css常用语法续集

    1   设置字体  body{font-familly:“宋体”} 2 可以使用下面代码设置网页中文字的字号为12像素,并把字体颜色设置为#666(灰色): body{font-size:12px;c ...

  9. IrisSkin2.dll 添加皮肤

    使用说明:把控件拖到你的form上,只需一行代码,即可实现整个form包括其所有控件的皮肤的更换,总共有几十套皮肤供使用,非常方便.省去你设计开发软件皮肤系统的时间和精力.全部源代码就一行: skin ...

  10. 一文掌握 Spring Boot Profiles

    Spring Boot Profiles 简介 Profile 的概念其实很早在 Spring Framework 就有了,在 Spring Framework 3.1 版本引入了注解 @Profil ...