1. 程式人生 > 其它 >服務註冊中心之Zookeeper使用

服務註冊中心之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使用)。