1. 程式人生 > >docker簡易搭建Zookeeper叢集

docker簡易搭建Zookeeper叢集

docker簡易搭建Zookeeper叢集


寫在前面:為什麼要用zookeeper?主要是在分散式架構中,很多時候 需要考慮到資料的一致性問題,資料管理問題,以及事務的執行順序等各種各樣的問題,這時候就有一個zookeeper分散式伺服器框架來幫我們解決這些問題。

docker zookeeper官網:https://hub.docker.com/_/zookeeper/

第一步 建立docker網段

在centos視窗中,執行如下命令:

docker network create --subnet=172.20.0.0/16 net7

*注:172.20.0.0 網段(讀者可以自定義自己所需的網段)
16 子網掩碼
net7 網段名稱 (讀者可以自定義自己所需的網段名稱)
說明:在此步建立網段,是為了合理規範便於治理,讀者可自行選擇是否建立*

第二步 建立Zookeeper叢集

建立本地儲存資料以及事務日誌檔案對映目錄,在本文中將建立3個節點,故會建立對應3個節點的路徑,在centos視窗中,執行如下命令建立所需目錄:

cd /home/soft/
mkdir zookeepercluster
cd  zookeepercluster
mkdir zookeeper1DataDir
mkdir zookeeper1DataLogDir
mkdir zookeeper2DataDir
mkdir zookeeper2DataLogDir
mkdir zookeeper3DataDir
mkdir zookeeper3DataLogDir

注:本文zookeeper叢集存放的資料結構為/home/soft/zookeepercluster下 ,讀者可自行選擇

建立完成後,接下來在centos視窗中,執行如下命令,拉取zookeeper映象:

docker pull zookeeper

拉取完映象後,建立zookeeper叢集,在centos視窗中,執行如下命令:

docker run -d -v /home/soft/zookeepercluster/zookeeper1DataDir:/data -v /home/soft/zookeepercluster/zookeeper1DataLogDir:/datalog  -e ZOO_MY_ID=1
-e ZOO_SERVERS='server.1=172.20.0.2:2888:3888 server.2=172.20.0.3:2888:3888 server.3=172.20.0.4:2888:3888' --name=zookeeper1 --net=net7 --ip 172.20.0.2 --privileged zookeeper docker run -d -v /home/soft/zookeepercluster/zookeeper2DataDir:/data -v /home/soft/zookeepercluster/zookeeper2DataLogDir:/datalog -e ZOO_MY_ID=2 -e ZOO_SERVERS='server.1=172.20.0.2:2888:3888 server.2=172.20.0.3:2888:3888 server.3=172.20.0.4:2888:3888' --name=zookeeper2 --net=net7 --ip 172.20.0.3 --privileged zookeeper docker run -d -v /home/soft/zookeepercluster/zookeeper3DataDir:/data -v /home/soft/zookeepercluster/zookeeper3DataLogDir:/datalog -e ZOO_MY_ID=3 -e ZOO_SERVERS='server.1=172.20.0.2:2888:3888 server.2=172.20.0.3:2888:3888 server.3=172.20.0.4:2888:3888' --name=zookeeper3 --net=net7 --ip 172.20.0.4 --privileged zookeeper

*注:‘ZOO_MY_ID=1’ 與 ‘server.1=172.20.0.2’ 的server.1對應,讀者可自定義myid的編號
2888 叢集內機器通訊使用(Leader監聽此埠)
3888 選舉leader使用
說明:建立叢集的時候請選擇奇數個節點,以便節點選舉leader*

第三步 驗證是否成功搭建zookeeper叢集

在centos視窗中,執行如下命令,進入容器中:

docker exec -it zookeeper1 bash

在容器中,執行如下命令可進行檢視叢集資訊:

echo stat |nc 172.20.0.2 2181

其他兩個容器,就不一一贅述。
下方是本人建立zookeeper叢集全部的執行命令以及對應資訊:

[[email protected] ~]# docker exec -it zookeeper1 bash
bash-4.4# echo stat | nc 172.20.0.2 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.20.0.2:42792[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
bash-4.4# exit
exit
[[email protected] ~]# docker exec -it zookeeper2 bash
bash-4.4# echo stat | nc 172.20.0.3 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.20.0.3:40206[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: leader
Node count: 4
Proposal sizes last/min/max: -1/-1/-1
bash-4.4# exit
exit
[[email protected] ~]# docker exec -it zookeeper3 bash
bash-4.4# echo stat | nc 172.20.0.4 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.20.0.4:43465[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower
Node count: 4
bash-4.4# 

在上方具體的資訊可以看到是1個leader 2個follower。

寫在最後,讀者也可以參考dockerfile檔案中的環境設定,通過(docker -v 引數)將本地伺服器shitzookeeper配置對映到對應容器的zookeeper對應檔案目錄(/conf),詳情請見附錄

附錄:
1.配置引數列表:

    ZOO_USER=zookeeper  #使用者名稱
    ZOO_CONF_DIR=/conf  #配置檔案路徑 
    ZOO_DATA_DIR=/data  #資料檔案路徑
    ZOO_DATA_LOG_DIR=/datalog #事務日誌檔案路徑  
    ZOO_PORT=2181             #客戶端連線zookeeper埠
    ZOO_TICK_TIME=2000        #zookeeper獨立工作時間單元 單位毫秒
    ZOO_INIT_LIMIT=5          #初始化連線時間 當初始化時間>2000*5(10秒)表示客戶端連線失敗
    ZOO_SYNC_LIMIT=2          #心跳時間 當間隔時間響應>2000*2(4秒) 表示節點失敗
    ZOO_AUTOPURGE_PURGEINTERVAL=0  #清理頻率,單位是小時,需要配置一個1或更大的整數,預設是0,表示不開啟自動清理功能
    ZOO_AUTOPURGE_SNAPRETAINCOUNT=3 #這個引數和上面的引數搭配使用,這個引數指定了需要保留的檔案數目。預設是保留3個
    ZOO_MAX_CLIENT_CNXNS=60 #單個客戶端與單臺伺服器之間的連線數的限制,是ip級別的,預設是60,如果設定為0,那麼表明不作任何限制

2.four letter word(常用四字命令)
1.echo stat | nc localhost 2181 檢視當前zookeeper狀態資訊

bash-4.4# echo stat | nc localhost 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /127.0.0.1:44935[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/552
Received: 1857
Sent: 1856
Connections: 1
Outstanding: 0
Zxid: 0x300000006
Mode: follower
Node count: 6

2.echo ruok | nc localhost 2181 檢視當前zkserver是否啟動,啟動成功返回 imok

bash-4.4# echo ruok | nc localhost 2181
imok

3 echo dump | nc localhost 2181 列出未經處理的會話和臨時節點

bash-4.4# echo dump | nc localhost 2181
SessionTracker dump:
[email protected]499d64c5
ephemeral nodes dump:
Sessions with Ephemerals (0):

4 echo conf | nc localhost 2181 檢視伺服器配置

bash-4.4# echo conf | nc localhost 2181
clientPort=2181
dataDir=/data/version-2
dataLogDir=/datalog/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=5
syncLimit=2
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0

5 echo cons | nc localhost 2181 展示連線到伺服器的客戶端資訊

bash-4.4# echo cons | nc localhost 2181
 /127.0.0.1:55150[1](queued=0,recved=29,sent=29,sid=0x100046ccbd70000,lop=PING,est=1534428159463,to=30000,lcxid=0x1,lzxid=0xffffffffffffffff,lresp=93577238,llat=1,minlat=0,avglat=0,maxlat=13)
 /127.0.0.1:32959[0](queued=0,recved=1,sent=0)

6echo envi | nc localhost 2181 檢視當前zookeeper環境變數

bash-4.4# echo envi | nc localhost 2181
Environment:
zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
host.name=e76b00d78b5e
java.version=1.8.0_171
java.vendor=Oracle Corporation
java.home=/usr/lib/jvm/java-1.8-openjdk/jre
java.class.path=/zookeeper-3.4.13/bin/../build/classes:/zookeeper-3.4.13/bin/../build/lib/*.jar:/zookeeper-3.4.13/bin/../lib/slf4j-log4j12-1.7.25.jar:/zookeeper-3.4.13/bin/../lib/slf4j-api-1.7.25.jar:/zookeeper-3.4.13/bin/../lib/netty-3.10.6.Final.jar:/zookeeper-3.4.13/bin/../lib/log4j-1.2.17.jar:/zookeeper-3.4.13/bin/../lib/jline-0.9.94.jar:/zookeeper-3.4.13/bin/../lib/audience-annotations-0.5.0.jar:/zookeeper-3.4.13/bin/../zookeeper-3.4.13.jar:/zookeeper-3.4.13/bin/../src/java/lib/*.jar:/conf:
java.library.path=/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.io.tmpdir=/tmp
java.compiler=<NA>
os.name=Linux
os.arch=amd64
os.version=3.10.0-862.3.3.el7.x86_64
user.name=zookeeper
user.home=/home/zookeeper
user.dir=/zookeeper-3.4.13

7 echo mntr | nc localhost 2181 監控zk健康資訊

bash-4.4# echo mntr | nc localhost 2181
zk_version  3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
zk_avg_latency  0
zk_max_latency  552
zk_min_latency  0
zk_packets_received 1911
zk_packets_sent 1910
zk_num_alive_connections    2
zk_outstanding_requests 0
zk_server_state follower
zk_znode_count  6
zk_watch_count  0
zk_ephemerals_count 0
zk_approximate_data_size    63
zk_open_file_descriptor_count   32
zk_max_file_descriptor_count    65536
zk_fsync_threshold_exceed_count 0

8 echo wchs | nc localhost 2181 展示watch的資訊

bash-4.4# echo wchs | nc localhost 2181
0 connections watching 0 paths
Total watches:0

9 wchc wchp session與watch以及path與watch資訊
使用wchc wchp命令,需要在zookeeper的配置檔案加入41w.commadns.whitelist=* .完成白名單的配置,並重啟zookeeper服務。