1、簡介
1.1、zookeeper 簡介
ZooKeeper是一個分布式的,開放源碼的分布式應用程式協調服務,是Google的Chubby一個開源的實作,是Hadoop和Hbase的重要元件。它是一個為分布式應用提供一緻性服務的軟體,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
1.2、zookeeper github位址
github 位址
2、準備工作
2.1、安裝 Docker
CentOS7 安裝 Docker
2.2、建立 bridge 網絡
#建立自定義網絡
docker network create --driver bridge --subnet 172.0.0.0/16 woniu_network
#檢視已存在網絡
docker network ls
3、單機模式啟動
3.1、建立挂載目錄
# 建立 zookeeper 配置存放目錄
mkdir -p /home/docker/zookeeper/alone/conf
# 建立 zookeeper 資料存放目錄
mkdir -p /home/docker/zookeeper/alone/data
# 建立 zookeeper 資料日志存放目錄
mkdir -p /home/docker/zookeeper/alone/datalog
# 建立 zookeeper 日志存放目錄
mkdir -p /home/docker/zookeeper/alone/logs
3.2、建立配置檔案
# zookeeper 配置存放目錄
cd /home/docker/zookeeper/alone/conf
# 編輯配置檔案
vi zoo.cfg
參考配置
# Zookeeper儲存資料的目錄,預設情況下,Zookeeper将寫資料的日志檔案也儲存在這個目錄裡
dataDir=/data
# 事物日志存儲地點,如果沒提供的話使用的則是 dataDir
dataLogDir=/datalog
# 伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。tickTime以毫秒為機關
tickTime=2000
# 叢集中的follower伺服器(F)與leader伺服器(L)之間初始連接配接時能容忍的最多心跳數(tickTime的數量)
initLimit=5
# 叢集中的follower伺服器與leader伺服器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)
syncLimit=2
# 預設值為3,不支援以系統屬性方式配置。用于配置Zookeeper在自動清理的時候需要保留的快照資料檔案數量和對應的事務日志檔案。此參數的最小值為3,如果配置的值小于3會自動調整到3
autopurge.snapRetainCount=3
# 預設值為0,機關為小時,不支援以系統屬性方式配置。用于配置Zookeeper進行曆史檔案自動清理的頻率。如果配置為0或負數,表示不需要開啟定時清理功能
autopurge.purgeInterval=0
# 預設為60,不支援以系統屬性方式配置。從Socket層面限制單個用戶端與單台伺服器之間的并發連接配接數,即以ip位址來進行連接配接數的限制。
# 如果設定為0,表示不做任何限制。僅僅是單台用戶端與單個Zookeeper伺服器連接配接數的限制,不能控制所有用戶端的連接配接數總和
maxClientCnxns=60
# 3.5.0中的新功能:當設定為false時,可以在複制模式下啟動單個伺服器,單個參與者可以使用觀察者運作,并且群集可以重新配置為一個節點,并且從一個節點。
# 對于向後相容性,預設值為true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通過将“standaloneEnabled = false”或“standaloneEnabled = true”添加到伺服器的配置檔案來設定它。
standaloneEnabled=false
# 内嵌的管理控制台,停用這個服務
admin.enableServer=false
# 開啟四字指令,将所有指令添加到白名單中
4lw.commands.whitelist=*
# 叢集中服務的清單
server.1=localhost:2888:3888;2181
3.3、單機模式啟動
# 啟動指令
docker run -d --restart always \
--name zookeeper-alone \
--network woniu_network \
--ip 172.0.0.181 \
-p 2181:2181 \
-e ZOO_MY_ID=1 \
-v /home/docker/zookeeper/alone/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/alone/data:/data \
-v /home/docker/zookeeper/alone/datalog:/datalog \
-v /home/docker/zookeeper/alone/logs:/logs \
zookeeper
4、叢集模式啟動
4.1、建立主節點挂載目錄
# 建立 zookeeper 主節點配置存放目錄
mkdir -p /home/docker/zookeeper/master/conf
# 建立 zookeeper 主節點資料存放目錄
mkdir -p /home/docker/zookeeper/master/data
# 建立 zookeeper 主節點資料日志存放目錄
mkdir -p /home/docker/zookeeper/master/datalog
# 建立 zookeeper 主節點日志存放目錄
mkdir -p /home/docker/zookeeper/master/logs
# 建立 zookeeper 節點1 配置存放目錄
mkdir -p /home/docker/zookeeper/node1/conf
# 建立 zookeeper 節點1 資料存放目錄
mkdir -p /home/docker/zookeeper/node1/data
# 建立 zookeeper 節點1 資料日志存放目錄
mkdir -p /home/docker/zookeeper/node1/datalog
# 建立 zookeeper 節點1 日志存放目錄
mkdir -p /home/docker/zookeeper/node1/logs
# 建立 zookeeper 節點2 配置存放目錄
mkdir -p /home/docker/zookeeper/node2/conf
# 建立 zookeeper 節點2 資料存放目錄
mkdir -p /home/docker/zookeeper/node2/data
# 建立 zookeeper 節點2 資料日志存放目錄
mkdir -p /home/docker/zookeeper/node2/datalog
# 建立 zookeeper 節點2 日志存放目錄
mkdir -p /home/docker/zookeeper/node2/logs
4.2、建立配置檔案
# zookeeper 主節點配置存放目錄
cd /home/docker/zookeeper/master/conf
# 編輯配置檔案
vi zoo.cfg
# zookeeper 節點1 配置存放目錄
cd /home/docker/zookeeper/node1/conf
# 編輯配置檔案
vi zoo.cfg
# zookeeper 節點2 配置存放目錄
cd /home/docker/zookeeper/node2/conf
# 編輯配置檔案
vi zoo.cfg
參考配置
# Zookeeper儲存資料的目錄,預設情況下,Zookeeper将寫資料的日志檔案也儲存在這個目錄裡
dataDir=/data
# 事物日志存儲地點,如果沒提供的話使用的則是 dataDir
dataLogDir=/datalog
# 伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。tickTime以毫秒為機關
tickTime=2000
# 叢集中的follower伺服器(F)與leader伺服器(L)之間初始連接配接時能容忍的最多心跳數(tickTime的數量)
initLimit=5
# 叢集中的follower伺服器與leader伺服器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)
syncLimit=2
# 預設值為3,不支援以系統屬性方式配置。用于配置Zookeeper在自動清理的時候需要保留的快照資料檔案數量和對應的事務日志檔案。此參數的最小值為3,如果配置的值小于3會自動調整到3
autopurge.snapRetainCount=3
# 預設值為0,機關為小時,不支援以系統屬性方式配置。用于配置Zookeeper進行曆史檔案自動清理的頻率。如果配置為0或負數,表示不需要開啟定時清理功能
autopurge.purgeInterval=0
# 預設為60,不支援以系統屬性方式配置。從Socket層面限制單個用戶端與單台伺服器之間的并發連接配接數,即以ip位址來進行連接配接數的限制。
# 如果設定為0,表示不做任何限制。僅僅是單台用戶端與單個Zookeeper伺服器連接配接數的限制,不能控制所有用戶端的連接配接數總和
maxClientCnxns=60
# 3.5.0中的新功能:當設定為false時,可以在複制模式下啟動單個伺服器,單個參與者可以使用觀察者運作,并且群集可以重新配置為一個節點,并且從一個節點。
# 對于向後相容性,預設值為true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通過将“standaloneEnabled = false”或“standaloneEnabled = true”添加到伺服器的配置檔案來設定它。
standaloneEnabled=false
# 内嵌的管理控制台,停用這個服務
admin.enableServer=false
# 開啟四字指令,将所有指令添加到白名單中
4lw.commands.whitelist=*
# 叢集中服務的清單
server.1=172.0.0.181:2888:3888;2181
server.2=172.0.0.182:2888:3888;2181
server.3=172.0.0.183:2888:3888;2181
4.3、叢集模式啟動
4.3.1、主節點啟動
# 啟動指令
docker run -d --restart always \
--name zookeeper-master \
--network woniu_network \
--ip 172.0.0.181 \
-p 2181:2181 \
-e ZOO_MY_ID=1 \
-v /home/docker/zookeeper/master/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/master/data:/data \
-v /home/docker/zookeeper/master/datalog:/datalog \
-v /home/docker/zookeeper/master/logs:/logs \
zookeeper
4.3.2、節點1 啟動
# 啟動指令
docker run -d --restart always \
--name zookeeper-node1 \
--network woniu_network \
--ip 172.0.0.182 \
-p 2182:2181 \
-e ZOO_MY_ID=2 \
-v /home/docker/zookeeper/node1/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/node1/data:/data \
-v /home/docker/zookeeper/node1/datalog:/datalog \
-v /home/docker/zookeeper/node1/logs:/logs \
zookeeper
4.3.3、節點2 啟動
# 啟動指令
docker run -d --restart always \
--name zookeeper-node2 \
--network woniu_network \
--ip 172.0.0.183 \
-p 2183:2181 \
-e ZOO_MY_ID=3 \
-v /home/docker/zookeeper/node2/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/docker/zookeeper/node2/data:/data \
-v /home/docker/zookeeper/node2/datalog:/datalog \
-v /home/docker/zookeeper/node2/logs:/logs \
zookeeper
4.4、叢集狀态
# 在容器 zookeeper-master 中開啟一個互動模式的終端
docker exec -it zookeeper-master /bin/bash
# 檢視 zookeeper 狀态
bin/zkServer.sh status