服務註冊中心之Zookeeper使用
一、什麼是Zookeeper?
Zookeeper是一個分散式協調工具,可以實現註冊中心功能,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等,它可以替代Eureka元件實現註冊中心功能。
二、ZooKeeper安裝
zookeeper有單機、叢集部署方式。
1、單機模式下的zookeeper安裝,此處以安裝到Centos系統為例,需要先安裝JDK。
首先需要去https://zookeeper.apache.org/releases.html下載穩定版tar.gz包,下載後解壓到想要的安裝路徑,進入conf目錄複製zoo_sample.cfg樣例改名為zoo.cfg作為基礎配置檔案,進行個性化配置,cd到zookeeper安裝路徑,執行啟動命令./bin/zkServer.sh start即可啟動zookerper。zookeeper配置檔案說明如下
# The number of milliseconds of each tick# tickTime:CS通訊心跳數 # Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。tickTime以毫秒為單位。 tickTime=2000 # The number of ticks that the initial # synchronization phase can take # initLimit:LF初始通訊時限 # 叢集中的follower伺服器(F)與leader伺服器(L)之間初始連線時能容忍的最多心跳數(tickTime的數量)。 initLimit=5 # The number of ticks that can pass between # sending a request and getting an acknowledgement # syncLimit:LF同步通訊時限 # 叢集中的follower伺服器與leader伺服器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。 syncLimit=2 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. # dataDir:資料檔案目錄 # Zookeeper儲存資料的目錄,預設情況下,Zookeeper將寫資料的日誌檔案也儲存在這個目錄裡。 dataDir=/data/soft/zookeeper-3.4.12/data # dataLogDir:日誌檔案目錄 # Zookeeper儲存日誌檔案的目錄。 dataLogDir=/data/soft/zookeeper-3.4.12/logs # the port at which the clients will connect # clientPort:客戶端連線埠 # 客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求。 clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir 保留數量3 autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature 清理時間間隔1小時 autopurge.purgeInterval=1 # 伺服器名稱與地址:叢集資訊(伺服器編號,伺服器地址,LF通訊埠,選舉埠),這個配置項的書寫格式比較特殊,規則如下: # server.N=YYY:A:B # 其中N表示伺服器編號,YYY表示伺服器的IP地址,A為LF通訊埠,表示該伺服器與叢集中的leader交換的資訊的埠。B為選舉埠,表示選舉新leader時
# 伺服器間相互通訊的埠(當leader掛掉時,其餘伺服器會相互通訊,選擇出新的leader)。 # 一般來說,叢集中每個伺服器的A埠都是一樣,每個伺服器的B埠也是一樣。但是當所採用的為偽叢集時,IP地址都一樣,只是A埠和B埠不一樣。
2、叢集zookeeper安裝,安裝方式與單機模式一樣,只不過分佈在多個主機上,安裝完成後需要對這些zookeeper節點進行配置,具體如下,server.n為不同zookeeper的訪問地址,這些地址組形成zookeeper叢集
tickTime=2000 initLimit=5 syncLimit=2 dataDir=/tmp/zookeeper/data dataLogDir=/tmp/zookeeper/logs
clientPort=12181
# 伺服器名稱與地址:叢集資訊
server.1=127.0.0.1:12888:13888
server.2=127.0.0.1:14888:15888
server.3=127.0.0.1:16888:17888
配置myid檔案:這個檔案存放的路徑由zoo.cfg配置檔案中的dataDir來指定,在這三臺伺服器上的/tmp/zookeeper/data目錄下建立myid檔案,裡面填入相應的id號,這是zookeeper節點的編號。
三、將服務提供者註冊到Zookeeper伺服器
使用方式與Eureka元件類似,要將一個服務模組作為提供者註冊到Zookeeper註冊中心,需要修改Pom引入spring-cloud-starter-zookeeper-discoveryr包、編寫application.yml配置檔案,如下所示
1、引入jar包
< ! -- SpringBoot整合zookeeper客戶端--> <dependency> <groupId>org-springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency>
2、修改application.yml配置檔案
#8008表示註冊到zookeeper伺服器的服務提供者埠號 server: port: 8008 spring: application: name: cloud-provider-name #服務別名 cloud: zookeeper: connect-string: ip:port #zookeeper伺服器註冊中心地址
3、主啟動類增加@EnableDiscoveryClient註解,該註解用於向consul或者zookeeper註冊中心註冊該服務。
4、Controller類寫業務介面,該控制器通常需要使用@RestController註解。
四、服務提供者叢集
與Eureka註冊中心負載均衡叢集一樣,服務提供者如需要叢集,也需要在配置檔案ApplicationContextConfig配置檔案的getRestTemplet()下增加@LoadBalanced註解,來賦予RestTemplate負載均衡能力(參考服務註冊中心之Eureka使用)。