zookeeper高可用集群部署

運維圈子 發佈 2022-02-27T08:57:41+00:00

一、Zookeeper 的搭建方式Zookeeper 安裝方式有三種,單機模式和集群模式以及偽集群模式。

一、ZooKeeper 的搭建方式

Zookeeper 安裝方式有三種,單機模式和集群模式以及偽集群模式。

  1. 單機模式 :zookeeper 只運行在一台伺服器上,適合測試環境;
  2. 集群模式 :Zookeeper 運行於一個集群上,適合生產環境,這個計算機集群被稱為一個 「集合體」(ensemble);
  3. 偽集群模式 :就是在一台物理機上運行多個 Zookeeper 實例,測試使用。

Zookeeper 通過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就能夠保證服務繼續。

為什麼一定要超過半數呢? 這跟 Zookeeper 的複製策略有關:Zookeeper 確保對 znode 樹的每一個修改都會被複製到集合體中超過半數的機器上。

二、配置JDK環境

tar zxvf jdk-8u162-linux-x64.tar.gz -C /usr/local/
cat >>/etc/profile<<'EOF'
export JAVA_HOME=/usr/local/jdk1.8.0_162
export CLASSPAT=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
EOF
source /etc/profile

三、Zookeeper 單機模式搭建

1、下載 ZooKeeper :http://mirrors.hust.edu.cn/apache/zookeeper/

2、解壓

tar zxvf zookeeper-3.4.10.tar.gz -C /usr/local/

3、配置環境變量

vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

source /etc/profile

非必須操作

4、修改 Zookeeper 的配置文件 conf/zoo.cfg

tickTime=2000
dataDir=/usr/local/zookeeper-3.4.10/data
dataLogDir=/usr/local/zookeeper-3.4.10/logs
clientPort=2181

5、啟動 ZooKeeper

zkServer.sh start # 啟動
zkServer.sh stop # 停止
zkServer.sh status # 狀態

zkCli.sh -server localhost:2181

四、Zookeeper 集群模式搭建

Zookeeper 集群模式搭建方案:

主機IP

消息埠

通信埠

myid

data目錄

10.10.10.16

2181

2888:3888

0

$ZOOKEEPER_HOME/data

10.10.10.17

2181

2888:3888

1

$ZOOKEEPER_HOME/data

10.10.10.18

2181

2888:3888

2

$ZOOKEEPER_HOME/data

  1. 一共三個節點(zk伺服器集群規模不小於三個節點),要求伺服器之間系統時間保持一致

1、解壓

tar zxvf zookeeper-3.4.10.tar.gz -C /usr/local/

2、配置環境變量

vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

source /etc/profile

非必須操作

3、修改 Zookeeper 的配置文件

cd /usr/local/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
修改如下配置
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
# 修改目錄
dataDir=/usr/local/zookeeper-3.4.10/data
dataLogDir=/usr/local/zookeeper-3.4.10/logs
# 添加集群配置
server.0=10.10.10.16:2888:3888
server.1=10.10.10.17:2888:3888
server.2=10.10.10.18:2888:3888

zookeeper參數說明

  • server.A=B:C:D

A :其中 A 是一個數字,表示這個是伺服器的編號;B :是這個伺服器的 ip 地址;C :Leader 選舉的埠;D :Zookeeper 伺服器之間的通信埠。

  • clientPort:客戶端連接埠
  • tickTime:tickTime這個時間是作為Zookeeper伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個tickTime時間就會發送一個心跳。
  • initLimit=10:initLimit這個配置項是用來配置Zookeeper接受客戶端(這裡所說的客戶端不是用戶連接Zookeeper伺服器的客戶端,而是Zookeeper伺服器集群中連接到Leader的Follower 伺服器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過10個心跳的時間(也就是tickTime)長度後Zookeeper 伺服器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長度就是10*2000=20 秒。
  • syncLimit=5:syncLimit這個配置項標識Leader與Follower之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
  • dataDir:dataDir顧名思義就是Zookeeper保存數據的目錄,默認情況下Zookeeper將寫數據的日誌文件也保存在這個目錄里。
  • dataLogDir:日誌文件目錄
  • clientPort=2181:clientPort這個埠就是客戶端(應用程式)連接Zookeeper伺服器的埠,Zookeeper會監聽這個埠接受客戶端的訪問請求
  • maxClientCnxns:這個操作將限制連接到 Zookeeper 的客戶端數量,並限制並發連接的數量,通過 IP 來區分不同的客戶端。此配置選項可以阻止某些類別的 Dos 攻擊。將他設置為零或忽略不進行設置將會取消對並發連接的限制。
  • minSessionTimeout 和 maxSessionTimeout:即最小的會話超時和最大的會話超時時間。在默認情況下,minSession=2tickTime;maxSession=20tickTime
  • 自動清理快照(snapshot)和事務日誌:從版本 3.4.0 開始, Zookeeper 提供了自動清理快照(snapshot)和事務日誌的功能
  • autopurge.purgeInterval :這個參數指定了持久化日誌清理頻率,單位是小時,默認是 0,表示不開啟自動清理功能。autopurge.snapRetainCount :這個參數和上面的參數搭配使用,用於指定需要保留的持久化目志文件數目,默認是保留 3 個。
  • myid 和 zoo.cfg:除了修改 zoo.cfg 配置文件,集群模式下還要配置一個文件 myid,這個文件在 dataDir 目錄下,這個文件裡面就有一個數據就是 A 的值,Zookeeper 啟動時會讀取這個文件,拿到裡面的數據與 zoo.cfg 裡面的配置信息比較從而判斷到底是哪個 server。

4、添加伺服器標識配置 dataDir/myid

# 在 dataDir 目錄創建 myid 文件
mkdir /usr/local/zookeeper-3.4.10/{data,logs}
# 創建文件 myid,Server0 內容為 0,Server1 內容為 1,Server2 內容為 2
echo "0" >/usr/local/zookeeper-3.4.10/data/myid

5、將修改後的zookeeper分發到其他節點

scp -r /usr/local/zookeeper-3.4.10/ envir-03:/usr/local/
scp -r /usr/local/zookeeper-3.4.10/ envir-04:/usr/local/
修改其他節點上的myid文件內容,這裡修改envir-03和envir-04
envir-03:
echo "1" >/usr/local/zookeeper-3.4.10/data/myid

envir-04:
echo "2" >/usr/local/zookeeper-3.4.10/data/myid

6、啟動

分別在3個節點啟動zookeeper

/usr/local/zookeeper-3.4.10/bin/zkServer.sh start

查看狀態

/usr/local/zookeeper-3.4.10/bin/zkServer.sh status

五、 Zookeeper 偽集群模式搭建

主機IP

消息埠

通信埠

myid

data目錄

10.10.10.16

2180

2880:3880

0

$ZOOKEEPER_HOME/data

10.10.10.16

2181

2881:3881

1

$ZOOKEEPER_HOME/data

10.10.10.16

2182

2882:3882

2

$ZOOKEEPER_HOME/data

只需將zookeper複製3份到不同的位置,配置如下

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/zookeeper/data_0

# the port at which the clients will connect
clientPort=2180

#the location of the log file
dataLogDir=/usr/local/zookeeper/logs_0

server.0=localhost:2880:3880
server.1=localhost:2881:3881
server.2=localhost:2882:3882

zookeeper服務腳本

#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
source /etc/profile
ZK_HOME=/usr/local/zookeeper
case $1 in
start)
$ZK_HOME/bin/zkServer.sh start
;;
stop)
$ZK_HOME/bin/zkServer.sh stop
;;
status)
$ZK_HOME/bin/zkServer.sh status
;;
restart)
$ZK_HOME/bin/zkServer.sh restart
;;
*)
echo "require start|stop|status|restart"
;;
esac
關鍵字: