我使用的Centos6.5与zookeeper2.4.1版本,进行完全分布式部署。部署完毕后,启动三台ZK集群,使用status查看情况发现异常。

现象

  1. 在使用 ./bin/zkServer.sh start启动zookeeper后,jsp没有显示QuorumPeerMain进程。
  2. zookeeper单机运行,突然连接不上,启动后总是成功的,但是启动后查看状态又显示没有在运行
    异常现象

查看zookeeper.out日志,报出错误:ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally java.lang.NullPointerException,是一个空指针异常。

解决方案:

  • 可能是部署完后启动zk后又修改其配置信息导致。重新安装zookeeper。
  1. 在日志内显示Cannot open channel to 2 at election address /10.1.85.106:3888
    查阅了一些资料,原因一般有:
  • 端口被占用
  • ip地址不是本机网卡

解决方案

  • 如果是端口被占用,换一个端口监听即可
  • 如果是原因2.我们需要让服务器监听0.0.0.0的ip(所有网卡)
    在conf中的zoo.cfg配置文件中添加
quorumListenOnAllIPs=true

处理

这是一位博主的方法,但我试过后发现还是不行,最好我果断删除zookeeper重装就好了,但是集群间不能选举就很无语。。。

自我检查

  1. 防火墙关闭
  2. zoo.cfg是否配置正确
  3. 每个机器人上的myid是否对应
  4. 端口2181、2888、3888是否被占用
  5. 配置环境变量(个人感觉没用)

解决

  1. 找到zoo.cfg中配置的dataDir和dataLogDir路径。然后删除两个文件夹下的version -2文件夹和zookeeper_server.pid文件。

  2. 感觉是zookeeper的版本问题,下载个新一版的安装

    这个方法有效我之前用3.4.1正常配置后启动就莫名其妙的各种连不上,从配置到防火墙再到日志一样检查都没有毛病。但启动集群就是说其他zk没有启动。整了好几天,在网上看别人轻轻松松配置完一启动就zk就选举完了。整了几天后,想着从根源抓取,果断换了一个网上常用的版本3.4.10,这个我一配置完后,全面检查了一遍,都没发病后,怀着忐忑的心情启动zk集群,用status看情况,看到一号机是Leader,整个人都好起来了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐