温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-09-10 13:39:05 来源:亿速云 阅读:373 作者:柒染 栏目:大数据

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

概述

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

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

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

    ZooKeeper配置文件修改为:

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

运行环境:

    dubbo版本号:2.5.3

    ZooKeeper版本号:3.4.11

    im-service是dubbo提供方(provider)

    im-web是dubbo消费方(consumer)

问题场景:

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

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

这种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的运行状态:

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

图示: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注册中心为什么没有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注册中心为什么没有zookeeper节点

(下图:ZooKeeper zk-0数据)

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

(下图:ZooKeeper zk-1数据)

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

(下图:ZooKeeper zk-2数据)

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

为了证明上图没有问题,我还找了运维同事,进入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&timestamp=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&timestamp=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&timestamp=1567157143813&version=1.0]

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

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

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

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

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

2019-09-03记录:

    把ZooKeeper配置文件修改为:

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

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI