• 实际工作中用到Zookeeper集群的地方很多, 也碰到过各种各样的问题, 在这里作个收集整理, 后续会一直补充;
  • 其中很多问题的原因, 解决方案都是google而来, 这里只是作次搬运工;
  • 其实很多问题都跟配置有关, 只怪自己没好好读文档;
  • 问题列表:
    1. 一台 zk 节点重启后始终无法加入到集群中, 无法对外提供服务
    2. zk的log和snapshot占用大量空间
    3. 某台客户端上有的进程可以连接到zk, 有的无法连接
    4. 一台zk服务器无法对外提供服务,报错"Have smaller server identifier, so dropping
    the connection."

    5. zk客户端偶尔无法成功连接到zk server

一台 zk 节点重启后始终无法加入到集群中, 无法对外提供服务
  • 现象: 使用zkCli.sh无法连接成功该zk节点
  • 日志: 首先想到的是将该节点restart, 但问题依旧, 故查看zk的log, 有大量的如下日志
2017-07-18 17:31:12,015 - INFO [WorkerReceiver Thread:FastLeaderElection@496] - Notification: 1 (n.leader), 77309411648 (n.zxid), 1 (n.round), LOOKING (n.state), 1 (n.sid), LOOKING (my state) 2017-07-18 17:31:12,016 - INFO [WorkerReceiver Thread:FastLeaderElection@496] - Notification: 3 (n.leader), 73014444480 (n.zxid), 831 (n.round), LEADING (n.state), 3 (n.sid), LOOKING (my state) 2017-07-18 17:31:12,017 - INFO [WorkerReceiver Thread:FastLeaderElection@496] - Notification: 3 (n.leader), 77309411648 (n.zxid), 832 (n.round), FOLLOWING (n.state), 2 (n.sid), LOOKING (my state) 2017-07-18 17:31:15,219 - INFO [QuorumPeer:/0.0.0.0:2181:FastLeaderElection@697] - Notification time out: 6400 
  • 解决方案:

    1. Zookeeper本身的Bug: FastLeaderElection - leader ignores the round information when joining a quorum
    2. 重启下当前的Leader, 产生新的Leader.
zk的log和snapshot占用大量空间
  • 现象: zk的datadir下的version-2下有大量的log和snapshot文件, 占用大量的磁盘空间
  • 解决: 在配置文件里打开周期性自动清理的开关 autopurge.purgeInterval=1, 当然也可以通过 autopurge.snapRetainCount来设置需要保留的snapshot文件个数,默认是3;
某台客户端上有的进程可以连接到zk, 有的无法连接
  • 现象: 同一台客户端机器上启动多个相同的进程, 有些进程无法连接到zk集群
  • zk服务端日志:
Too many connections from /x.x.x.x - max is x
  • 解决: zk的配置中maxClientCnxns设置过小, 这个参数用来限制单个IP对zk集群的并发访问;
一台zk服务器无法对外提供服务,报错"Have smaller server identifier, so dropping the connection."
  • 现象:使用zkCli.sh无法连接成功该zk节点;
  • 日志: 大量报错:Have smaller server identifier, so dropping the connection.
  • 解决方案: 保持这台有问题zk的现状, 按myid从小到大依次重启其他的zk机器;
  • 原因: zk是需要集群中所有机器两两建立连接的, 其中配置中的3555端口是用来进行选举时机器直接建立通讯的端口, 大id的server才会去连接小id的server,避免连接浪费.如果是最后重启myid最小的实例,该实例将不能加入到集群中, 因为不能和其他集群建立连接
zk客户端偶尔无法成功连接到zk server
  • 现象: 同一台机器来运行的zk客户端, 偶发无法成功连接到zk server
  • 分析:
    1. 当时提供给业务一份sdk, sdk初始化时需要先连接zk, 初始化结束后断开zk的连接,业务将这份sdk用在了由fpm-php 处理的前端web请求的php代码中, 该业务的QPS在6K-8K左右, 相当于zk在处理大量的短连接请求;
    2. 在zk服务端监控下列命令的输出, overflowed和droped的数值在不断增加,说明 listen的accept queue有不断被打满的情况
[root@m1 ~]# netstat -s |grep -i listen53828 times the listen queue of a socket overflowed53828 SYNs to LISTEN sockets ignored
  • 解决:

    1. 调整相关内核参数:/proc/sys/net/ipv4/tcp_max_syn_backlog和net.core.somaxconn
    2. zk服务端listen时的backlog用的是默认值50, zk没参数用来设置这个,有这个issue:Configurable listen socket backlog for the client port, 里面提供了patch;
    3. 避免客户端有大量短连接的方式连接zk服务;

作者:扫帚的影子
链接:https://www.jianshu.com/p/88ffb54fb43a
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/zhengchunyuan/p/10646554.html

Zookeeper运维问题集锦相关推荐

  1. zookeeper 运维管理

    2019独角兽企业重金招聘Python工程师标准>>> zookeeper 运维管理(转) link: http://blog.163.com/bdweizhong@yeah/blo ...

  2. zookeeper运维管理

    目录: 1.运维管理 2.淘宝的关于zookeeper的多篇文章: link:http://nileader.blog.51cto.com/1381108/1068033 zookeeper 运维管理 ...

  3. zookeeper 运维

    2019独角兽企业重金招聘Python工程师标准>>> 当配置伪集群有3台服务实例时,只启动2台集群依然能够起来!因为达到了过半有效策略. zoo.cfg 配置类->  集群: ...

  4. zookeeper版本更新_zookeeper介绍及运维实践

    Zookeeper介绍 首先介绍下Zookeeper的背景.数据类型.使用场景以及ZAB协议,让大家对Zookeeper有一个清晰的认识. Zookeeper概述 ZooKeeper是一个分布式的.开 ...

  5. zookeeper 运维管理手册

     1.部署 本章节主要讲述如何部署ZooKeeper,包括以下三部分的内容: 1. 系统环境 2. 集群模式的配置 3. 单机模式的配置 系统环境和集群模式配置这两节内容大体讲述了如何部署一个能够用于 ...

  6. 一文运维zookeeper

    文章目录 1. zookeeper生产环境的安装配置 1.1 软件配置 1.2 硬件配置 1.3 日志配置文件 1.4 配置三节点的zookeeper集群 2. zookeeper的监控方法 2.1 ...

  7. 运维老鸟告诉你这个经典Zookeeper问题的根因

    来自:DBAplus社群 作者介绍 邹春华,新炬网络中间件专家.10年软件开发工作经验,9年运营商行业IT系统维护经验.精通C.C++.JAVA.PHP.SHELL等语言,有着深厚的大型IT软件系统开 ...

  8. ZooKeeper: 简介, 配置及运维指南

    1. 概览 ZooKeeper是一个供其它分布式应用程序使用的软件, 它为其它分布式应用程序提供所谓的协调服务. 所谓的协调服务, 是指ZooKeeper的如下能力 naming 命名 configu ...

  9. Linux运维常见问题解决集锦【转】

    作为linux运维,多多少少会碰见这样那样的问题或故障,用点心,平时多注意积累,水平肯定越来越高. 下面就是常见问题解决集锦:   1.shell脚本不执行 问题:某天研发某同事找我说帮他看看他写的s ...

最新文章

  1. 证明实对称正定矩阵A的Gauss-Seidel法必定收敛(完整过程)
  2. redis 主从切换
  3. 【 Vivado 】输出延迟约束实例
  4. wget镜像网站并且下载到指定目录 2012-06-20 19:40:56
  5. python中系列的含义_python中四种组合数据类型的含义、声明、增删改查,遍历
  6. 反序列化 还是记一下吧
  7. Pandas to_bool
  8. 自己用到的相关Linux命令,谨以记录
  9. html 插入本地视频,win7系统中Word文档插入本地视频的方法【图文】
  10. send anywhere:一个全平台的文件传输神器
  11. 【ES】MySQL语法版的ES来了,搜索引擎可以如此简单
  12. 关于分销体系是怎么理解的?
  13. 没有鼠标就无法对计算机进行操作,电脑鼠标不灵敏是什么原因?怎么解决?
  14. 苹果手机计算机怎么看以前的记录,苹果手机怎么查找以前的历史通话记录
  15. JScript 方法
  16. 实习------Java基础2
  17. 查询任何一门课程成绩在70分以上的姓名、课程名称和分数
  18. 知识管理软件厂商汇总
  19. 模拟赛DAY1 T2腐草为萤
  20. debian 10 安装apache,apache配置

热门文章

  1. 关于程序设计语言(贴吧里很有意思的一个帖子)
  2. 云后台Bmob的一些资料
  3. [转]软件保护之注册算法篇
  4. 点击链接,执行.py脚本,cgi脚本,浏览器中没有显示解析后的web页面,而是.py文件本身的代码内容...
  5. 紫书搜索 习题7-8 UVA - 12107 Digit Puzzle IDA*迭代加深搜索
  6. Oracle86和92语法的连接,子查询,集合的操作
  7. 咏南中间件集群解决方案
  8. c# 扩展方法奇思妙用基础篇八:Distinct 扩展(转载)
  9. Linux 刻录光盘
  10. JS不同类型之间运算与转换