【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
概述
具体原因:因为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版本存在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=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集群存在数据不一致情况。dubbo服务正常。
---------------------------------------------------------------------------------------------------------------------------------------------------------
2019-09-17记录:修改完配置后,此时尚未发现此类问题。
来源:oschina
链接:https://my.oschina.net/u/2475326/blog/3100946