千家信息网

ZooKeeper注册中心为什么没有zookeeper节点

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这期内容当中小编将会给大家带来有关ZooKeeper注册中心为什么没有zookeeper节点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概述具体原因:因为ZooK
千家信息网最后更新 2026年11月03日ZooKeeper注册中心为什么没有zookeeper节点

这期内容当中小编将会给大家带来有关ZooKeeper注册中心为什么没有zookeeper节点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

概述

具体原因:因为ZooKeeper数据不一致导致

修复操作:修改ZooKeeper配置如下,删除ZooKeeper所有数据、重启ZooKeeper后,重启所有dubbo providers/consumers服务。

一段时间后,未出现此类问题。

ZooKeeper配置文件修改为:

clientPort=2181dataDir=/data/zk-datadataLogDir=/data/zk-logstickTime=5000initLimit=10syncLimit=20maxClientCnxns=60server.0=zk-0:2888:3888server.1=zk-1:2888:3888server.2=zk-2:2888:3888

运行环境:

dubbo版本号:2.5.3

ZooKeeper版本号:3.4.11

im-service是dubbo提供方(provider)

im-web是dubbo消费方(consumer)

问题场景:

部分dubbo接口调用失败,查看consumer方调用日志:

这种Forbid consumer问题嘛,一般来说也就检查ZooKeeper注册中心中,对应的/providers节点下是否有提供方,如果没有提供方,就是看看provider方是否启动正常。

所以我就查看了zk-0节点上/dubbo/com.newbanker.im.service.WbsExpertService/providers节点的子节点:

ls /dubbo/com.newbanker.im.service.WbsExpertService/providers

发现providers子节点不存在。也就是说ZooKeeper注册中心认为dubbo providers没有正常启动,所以看一下dubbo providers的运行状态:

图示:dubbo provider运行正常。此时就很迷茫了:docker认为服务提供方im-service项目运行正常,但是dubbo注册中心ZooKeeper却认为提供方未注册。这里面肯定有什么误会。

解决方案:

重启im-service服务

重启后,一切ok!

猜测原因:

Dubbo项目启动后,没有提供者。项目启动日志正常,DUBBO服务启动没有注册到zookeeper。

tickTime修改为5000之后:2019-09-17记:目前还未发现此类问题。

延伸问题

今天又发现类似问题了,但是有一点不同的是:

  • ZooKeeper zk-0节点中/dubbo/com.newbanker.im.service.WbsExpertService/providers的子节点不存在。

  • ZooKeeper zk-1节点中/dubbo/com.newbanker.im.service.WbsExpertService/providers的子节点不存在。

  • ZooKeeper zk-2节点中/dubbo/com.newbanker.im.service.WbsExpertService/providers的子节点存在。

遇到这种数据不一致的问题,我最初猜测ZooKeeper集群内部应该是正在做数据同步,而导致的数据不一致情况。

于是使用./bin/zkService.sh status命令查看一下各个ZooKeeper节点的状态,发现一切正常:zk-2节点为leader,zk-0、zk-1节点都是follower.......也就是,遇到了ZooKeeper集群中,各个节点中数据不一致的情况了。这和当初说好的数据一致性对不上号啊!!

抱着试一试的心态,百度了一下,还找到了:

ZooKeeper数据不一致的定位过程 (3.4.11)

这篇博客说是ZooKeeper 3.4.11版本存在bug,而此bug在ZooKeeper 3.4.12版本已经fixed。

于是,我导出了ZooKeeper日志看了一下:

世上为何有如此巧合之事?我司用的ZooKeeper还真是3.4.11版本....

解决方案:

没错,还是重启im-service服务!(~ ̄▽ ̄)~

由于替换ZooKeeper版本影响范围未知,我们暂时没有替换ZooKeeper版本到3.4.12,而是把dubbo provider项目重启了一下。重启之后,ZooKeeper数据一致了,dubbo consumer调用接口也正常了。

后续还会跟进此bug的各种原因。。。。。

思考:

上面的【猜测原因】里的博客描述,是tickTime时间太小导致的。

但是根据上面的【延伸问题】看,根本原因还在ZooKeeper,或者说,不管是不是tickTime太小,ZooKeeper的数据都不能出现不一致的情况。

现在的焦点工作就是:找到ZooKeeper数据不一致的原因并解决之!

又一个ZooKeeper数据不一致的bug:

(下图:MarketingActivityService消费异常)

(下图:ZooKeeper zk-0数据)

(下图:ZooKeeper zk-1数据)

(下图:ZooKeeper zk-2数据)

为了证明上图没有问题,我还找了运维同事,进入docker pod中,查看ZooKeeper数据:

ZooKeeper zk-0数据:(有一个dubbo:// 说明有一个provider)

ls /dubbo/com.newbanker.ac.service.MarketingActivityService/providers[dubbo://10.233.81.217:23880/com.newbanker.ac.service.MarketingActivityService?accepts=1000&anyhost=true&application=ac-service&buffer=8192&charset=UTF-8&client=netty&default.delay=-1&default.retries=0&default.service.filter=entIdReceiveFilter&default.timeout=60000&delay=-1&dubbo=2.5.3&interface=com.newbanker.ac.service.MarketingActivityService&iothreads=9&methods=preview,costUpdate,release,selectByName,unrelease,appView,unrecommend,update,recommend,delete,timingDateUpdate,selectByNo,exportMarketingActivity,timingDateAdd,view,top,timingDateDelete,labelCount,updateChannel,queryAppPage,typeCount,selectByNos,add,previewQrcode,timingRelease,statusCount,cusView,list,untop,updateEvaluationPeriod,queryPage&payload=8388608&pid=8&queues=0&revision=0.0.1-SNAPSHOT&serialization=hessian2&server=netty&side=provider&threadpool=fixed&threads=100×tamp=1567157143813&version=1.0]

ZooKeeper zk-1数据:(没有provider)

ls /dubbo/com.newbanker.ac.service.MarketingActivityService/providers[]

ZooKeeper zk-2数据:(有两个dubbo:// 说明有两个provider)

ls /dubbo/com.newbanker.ac.service.MarketingActivityService/providers[dubbo://10.233.112.197:23880/com.newbanker.ac.service.MarketingActivityService?accepts=1000&anyhost=true&application=ac-service&buffer=8192&charset=UTF-8&client=netty&default.delay=-1&default.retries=0&default.service.filter=entIdReceiveFilter&default.timeout=60000&delay=-1&dubbo=2.5.3&interface=com.newbanker.ac.service.MarketingActivityService&iothreads=9&methods=preview,costUpdate,release,selectByName,unrelease,appView,update,unrecommend,recommend,delete,timingDateUpdate,selectByNo,exportMarketingActivity,timingDateAdd,view,top,timingDateDelete,labelCount,updateChannel,queryAppPage,typeCount,selectByNos,add,previewQrcode,timingRelease,statusCount,cusView,list,untop,updateEvaluationPeriod,queryPage&payload=8388608&pid=8&queues=0&revision=0.0.1-SNAPSHOT&serialization=hessian2&server=netty&side=provider&threadpool=fixed&threads=100×tamp=1567391428907&version=1.0, dubbo://10.233.81.217:23880/com.newbanker.ac.service.MarketingActivityService?accepts=1000&anyhost=true&application=ac-service&buffer=8192&charset=UTF-8&client=netty&default.delay=-1&default.retries=0&default.service.filter=entIdReceiveFilter&default.timeout=60000&delay=-1&dubbo=2.5.3&interface=com.newbanker.ac.service.MarketingActivityService&iothreads=9&methods=preview,costUpdate,release,selectByName,unrelease,appView,unrecommend,update,recommend,delete,timingDateUpdate,selectByNo,exportMarketingActivity,timingDateAdd,view,top,timingDateDelete,labelCount,updateChannel,queryAppPage,typeCount,selectByNos,add,previewQrcode,timingRelease,statusCount,cusView,list,untop,updateEvaluationPeriod,queryPage&payload=8388608&pid=8&queues=0&revision=0.0.1-SNAPSHOT&serialization=hessian2&server=netty&side=provider&threadpool=fixed&threads=100×tamp=1567157143813&version=1.0]

这tm就很尴尬了。同一个zk集群中,每个节点的数据竟然不一致?!

看一下此环境的ZooKeeper配置:(根据运维的叙述,ZooKeeper的配置都使用docker镜像打死的,所以ZooKeeper的配置是不会有问题的)

/zookeeper-3.4.11 # cat /conf/zoo.cfg clientPort=2181dataDir=/data/zk-datadataLogDir=/data/zk-logstickTime=2000initLimit=5syncLimit=2maxClientCnxns=60server.0=zk-0:2888:3888server.1=zk-1:2888:3888server.2=zk-2:2888:3888

还是没有任何头绪。。。。。

---------------------------------------------------------------------------------------------------

2019-09-03记录:

把ZooKeeper配置文件修改为:

clientPort=2181dataDir=/data/zk-datadataLogDir=/data/zk-logstickTime=5000initLimit=10syncLimit=20maxClientCnxns=60server.0=zk-0:2888:3888server.1=zk-1:2888:3888server.2=zk-2:2888:3888

修改配置之后,把事务日志和快照文件删除,重启ZooKeeper集群、重启所有dubbo服务。

上述就是小编为大家分享的ZooKeeper注册中心为什么没有zookeeper节点了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0