dubbo(2.5.3版本) provider服務運行正常,但ZooKeeper(3.4.11版本)註冊中心/dubbo/{接口名}/providers節點無子節點

概述

    具體緣由:由於ZooKeeper數據不一致致使web

    修復操做:修改ZooKeeper配置以下,刪除ZooKeeper全部數據、重啓ZooKeeper後,重啓全部dubbo providers/consumers服務。docker

                    一段時間後,未出現此類問題。app

    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.3ide

    ZooKeeper版本號:3.4.11lua

    im-service是dubbo提供方(provider)spa

    im-web是dubbo消費方(consumer).net

問題場景:

    部分dubbo接口調用失敗,查看consumer方調用日誌:3d

這種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&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集羣存在數據不一致狀況。dubbo服務正常。

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

 

2019-09-17記錄:修改完配置後,此時還沒有發現此類問題。

相關文章
相關標籤/搜索