您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。