1. 程式人生 > >使用Zookeeper搭建服務治理中心

使用Zookeeper搭建服務治理中心

時間間隔 res 回復 image 服務提供者 器) 變更 AR pre

Zookeeper是Apache Hadoop的子項目,是一個樹形的目錄服務,支持變更推送,適合作為Dubbo服務的註冊中心,工業強度較高,推薦生成環境使用。

技術分享圖片

下面結合上圖介紹Zookeeper在服務註冊與發現裏面的應用:

如上圖整體Zookeeper的樹根Root是Dubbo,說明建立的Zookeeper分組為Dubbo,樹的第二層為Service層用來表示具體的接口服務,這裏為com.test.UserServiceBo接口服務,樹的第三層為Type層用來區分是服務提供者,還是服務消費者,還是路由規則等,樹的第四層URL是具體服務提供者或者消費者對應的機器列表或者具體的路由規則。

假設服務提供者對外提供com.test.UserServiceBo的實現類的服務,那麽當服務提供者啟動時候,Provider會通過ZKClient在Zookeeper服務端的/dubbo/com.test.UserServiceBo/providers目錄下寫入自己的URL地址。如果服務提供者有多個,那麽providers下就會有多個地址,這裏需要註意的是這裏的樹形目錄不一定是二叉樹,假如服務提供者有100個機器,那麽providers下就會有100個節點的。

假設服務消費者需要使用com.test.UserServiceBo接口的服務,那麽當服務消費者啟動時候,Consumer會通過ZKClient訂閱Zookeeper服務端的/dubbo/com.test.UserServiceBo/providers目錄下提供的服務提供方的URL地址列表。並且在/dubbo/com.test.UserServiceBo/consumers目錄下寫下自己的URL地址,這裏要記錄服務消費者的地址是為了當服務提供者地址列表變化時候(比如新增了機器,減少了機器)時候,Zookeeper可以通知訂閱該服務的訂閱者。

監控中心和管理控制臺在啟動時候會通過ZKClient訂閱Zookeeper服務端的/dubbo/com.test.UserServiceBo/目錄下的內容,並通過providers和consumers子目錄區分哪些是服務提供者列表,哪些是服務消費者列表,另外管理控制臺還可以寫入路由規則到/dubbo/com.test.UserServiceBo/routers目錄,這些路由規則也會被推送到服務消費端。

當服務提供者集群中有一臺機器掛了後,Zookeeper能及時通過長鏈斷開發現該機器掛了,並會從Zookeeper註冊中心服務提供者的providers目錄下刪除該機器,然後會通知服務消費者更新可用的服務提供者地址列表。由於zookeeper支持持久化存儲,所以當zookeeper重啟後,可以自動恢復服務註冊信息。

Zookeeper的安裝

下面使用Apache Zookeeper作為服務註冊中心,首先要進行Zookeeper的搭建。

首先需要到Apache官網上下載安裝包,地址為http://zookeeper.apache.org/releases.html,本文使用的是zookeeper-3.4.11版本,如下圖:

技術分享圖片

解壓該包後,如下圖:

技術分享圖片

然後修改zookeeper-3.4.11/conf文件夾裏面的zoo.cfg文件。

  • 設置配置項dataDir為一個存在的以data結尾的目錄;
  • 設置Zookeeper的監聽端口clientPort=2181
  • 設置Zookeeper心跳檢查間隔tickTime=2000
  • 設置Follower服務器啟動時候從Leader同步完畢數據能忍受多少個心跳時間間隔數initLimit=5

設置運行過程中Leader同步數據到Follower後,Follower回復信息到Leader的超時時間syncLimit=2,如果Leader超過syncLimit個tickTime的時間長度,還沒有收到Follower響應,那麽就認為這個Follower已經不在線了,如下圖:

技術分享圖片

最後在zookeeper-3.4.11/bin下運行sh zkServer.sh start-foreground就會啟動Zookeeper,會有下面輸出:

技術分享圖片

可知Zookeeper在2181端口進行監聽,至此服務註冊中心搭建完畢。

Zookeeper的使用

服務提供方和調用方需要引入ZKClient的jar包才能使用訪問Zookeeper服務器,需要在pom裏面添加下面依賴。

<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

Zookeeper單機配置:指定一個Zookeeper的ip作為服務註冊中心。

<dubbo:registry address="zookeeper://12.22.123.101:2181" />

或者:

<dubbo:registry protocol="zookeeper" address="12.22.123.101:2181" />

其中Zookeeper指明使用Zookeeper作為服務註冊中心,12.22.123.101:2181是Zookeeper的服務器地址和服務監聽端口號。

Zookeeper集群配置:指定多個ip作為服務註冊中心:

<dubbo:registry address="zookeeper://11.10.13.10:2181?backup=11.20.153.111:2181,11.30.
133.112:2181" />

或者:

<dubbo:registry protocol="zookeeper" address="11.10.13.10:2181,11.20.153.111:2181,11.30.
133.112:2181" /> 

另外你還可以在同一個Zookeeper服務器上劃分多個分組,例如下面:

<dubbo:registry id="registry1" protocol="zookeeper" address="10.20.153.10:2181" gr
oup="registry1" />
<dubbo:registry id="registry2" protocol="zookeeper" address="10.20.153.10:2181" gro
up="registry2" />

如上代碼,在同一個Zookeeper服務器上劃分了兩個分組,也就是會有兩棵樹目錄,樹根分別為registry1和registry2。

使用Zookeeper搭建服務治理中心