1. 程式人生 > 實用技巧 >ZooKeeper叢集部署指南

ZooKeeper叢集部署指南

一、前言

1、ZooKeeper簡介

ZooKeeper是一個開源的分散式應用程式協調服務,是Google的Chubby一個開源的實現。ZooKeeper為分散式應用提供一致性服務,提供的功能包括:分散式同步(Distributed Synchronization)、命名服務(Naming Service)、叢集維護(Group Maintenance)、分散式鎖(Distributed Lock)等,簡化分散式應用協調及其管理的難度,提供高效能的分散式服務。

ZooKeeper本身可以以單機模式安裝執行,不過它的長處在於通過分散式ZooKeeper叢集(1個Leader,多個Follower),基於一定的策略來保證ZooKeeper叢集的穩定性和可用性,從而實現分散式應用的可靠性。

2、ZooKeeper叢集角色說明

角色 說明
領導者(Leader) 為客戶提供讀和寫的服務,負責投票的發起和決議,更新系統狀態。
跟隨者(Follower) 為客戶提供讀服務,如果是寫服務則轉發給Leader。在選舉過程中參與投票。
觀察者(Observer) 為客戶端提供讀服務,如果是寫則轉發給Leader。不參與選舉過程中的投票,也不參與“過半寫成功”策略。在不影響效能的情況下提升叢集的讀效能。此角色與ZooKeeper3.3系列新增讀角色。

二、準備工作

1、叢集節點規劃

ZooKeeper在提供分散式鎖等服務的時候需要過半數的節點可用,另外高可用的訴求來說節點的個數必須>1,所以ZooKeeper叢集需要>1的奇數節點,例如3、5、7等。

本次我們規劃3個節點,作業系統選用CentOS7.6

節點名 IP 說明
zk01 172.31.9.177 ZooKeeper節點
zk02 172.31.8.176 ZooKeeper節點
zk03 172.31.0.70 ZooKeeper節點

2、軟體版本說明

說明
Linux Server CentOS 7.6
JDK 1.8.0_252
ZooKeeper 3.4.14

3 、部署JDK8

所有節點均需安裝JDK8

部署步驟參考上篇CentOS 7.6安裝JDK1.8.0

三、部署ZooKeeper

1、下載ZooKeeper並解壓

官方下載地址:https://downloads.apache.org/zookeeper/zookeeper-3.4.14/

sudo mkdir /opt/zookeeper
cd /opt/zookeeper
wget https://downloads.apache.org/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
sudo gunzip zookeeper-3.4.14.tar.gz
sudo tar -xvf zookeeper-3.4.14.tar

2、建立ZooKeeper相關目錄

sudo mkdir zkdata
sudo mkdir zklogs

3、配置ZooKeeper

  • 配置節點標識

zk01:

sudo vim /opt/zookeeper/zkdata/myid
1

zk02:

sudo vim /opt/zookeeper/zkdata/myid
2

zk03:

sudo vim /opt/zookeeper/zkdata/myid
3
  • 新建配置檔案
sudo cd /opt/zookeeper/zookeeper-3.4.14/conf
sudo cp zoo_sample.cfg zoo.cfg
sudo vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/zkdata
dataLogDir=/opt/zookeeper/zklogs
clientPort=2181
server.1=172.31.9.177:2888:3888
server.2=172.31.8.176:2888:3888
server.3=172.31.0.70:2888:3888

4、啟動ZooKeeper

cd /opt/zookeeper/zookeeper-3.4.14
sudo bin/zkServer.sh start

出現以下字樣表示啟動成功:
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper … STARTED

5、檢視節點狀態

sudo bin/zkServer.sh status

#狀態資訊
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

#如果為領導者節點則Mode:leader

6、客戶端連線測試

#指定Server連線
sudo bin/zkCli.sh -server 172.31.0.70:2181
#正常連線後會進入ZooKeeper命令列,顯示如下:
[zk: 172.31.0.31:2181(CONNECTED) 0]

輸入命令測試:
#檢視ZooKeeper根
[zk: 172.31.0.31:2181(CONNECTED) 0] ls /
[zookeeper]

四、ZooKeeper常用配置項說明

配置項名稱說明
tickTime CS通訊心跳間隔 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每間隔 tickTime 時間就會發送一個心跳。tickTime以毫秒為單位。
initLimit LF初始通訊時限 叢集中的follower伺服器(F)與leader伺服器(L)之間初始連線時能容忍的最多心跳數
syncLimit LF同步通訊時限 叢集中的follower伺服器與leader伺服器之間請求和應答之間能容忍的最多心跳數
dataDir 資料檔案目錄 Zookeeper儲存資料的目錄,預設情況下,Zookeeper將寫資料的日誌檔案也儲存在這個目錄裡
dataLogDir 日誌檔案目錄 Zookeeper儲存日誌檔案的目錄
clientPort 客戶端連線埠 客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求
server.N 伺服器名稱與地址 從N開始依次為:服務編號、服務地址、LF通訊埠、選舉埠;例如:server.1=172.31.9.177:2888:3888