这期内容当中小编将会给大家带来有关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方调用日志:
这种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数据不一致的原因并解决之!
(下图: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=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节点了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。