<code>本文由“開發者手冊”原創,如需轉載,拿走不謝!/<code>
前提概要
“ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
如果您還沒有安裝docker,請參考我的另一篇文章:
如果你想用安裝包的方式部署,請參考我的另一篇文章:
系統環境介紹
<code>centos7.5參數如下:
命令:uname -a
輸出:Linux server160131 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
命令:rpm -q centos-release
輸出:centos-release-7-5.1804.el7.centos.x86_64
需要centos7.5精簡版安裝包的同學可以評論或者私信我,私信關鍵字”centos“會自動回覆您下載地址。/<code>
演示服務器介紹
<code>服務器名稱:server160132
服務器IP:192.168.160.132
說明:為了演示方便,我這邊使用一臺物理節點部署zookeeper集群,實際使用中要做到高可用需要分別部署到不同的物理節點上。
zookeeper集群:zk-node1、zk-node2、zk-node3/<code>
docker版本介紹
<code>命令:docker -v
輸出:
Docker version 17.03.0-ce, build 3a232c8/<code>
JDK版本介紹
<code>JDK版本為:1.8.0_72
JDK路徑為:/opt/jdk/jdk1.8.0_72
需要jdk安裝包的同學可以評論或者私信我,私信關鍵字”jdk“會自動回覆您下載地址。/<code>
如果您還沒有安裝JDK,請參考我的另一篇文章:
zookeeper版本介紹
<code>zookeeper的官方鏡像版本為:zookeeper:3.4.9
獲取方式一、可以通過docker命令拉取
命令:docker pull zookeeper:3.4.9
獲取方式二、導入我提供的鏡像文件
命令:gunzip -c zookeeper_3.4.9.tar.gz | docker load
說明:需要打包好的zookeeper_3.4.9.tar.gz鏡像文件可以關注+留言/私信獲取。/<code>
安裝步驟
1、先創建存放數據的目錄
<code># 創建zk-node1節點的conf(配置文件)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node1/conf
# 創建zk-node1節點的data(數據)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node1/data
# 創建zk-node1節點的log(日誌)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node1/log
# 創建zk-node2節點的conf(配置文件)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node2/conf
# 創建zk-node2節點的data(數據)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node2/data
# 創建zk-node2節點的log(日誌)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node2/log
# 創建zk-node3節點的conf(配置文件)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node3/conf
# 創建zk-node3節點的data(數據)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node3/data
# 創建zk-node3節點的log(日誌)文件夾
命令:mkdir -p /opt/docker/zookeeper/zk-node3/log
最後設置文件夾權限:
命令:chmod -R 777 /opt/docker/zookeeper/<code>
2、啟動腳本
<code>docker run -d \\
--name=zk-node1 \\
--restart=always \\
-p 2191:2181 \\
-p 2891:2888 \\
-p 3891:3888 \\
-e ZOO_MY_ID=1 \\
-e ZOO_SERVERS="server.1=zk-node1:2888:3888 server.2=zk-node2:2892:3892 server.3=zk-node3:2893:3893" \\
-v /opt/docker/zookeeper/zk-node1/data:/data \\
-v /opt/docker/zookeeper/zk-node1/log:/datalog \\
-v /opt/docker/zookeeper/zk-node1/conf:/conf \\
--add-host "zk-node1:0.0.0.0" \\
--add-host "zk-node2:192.168.160.132" \\
--add-host "zk-node3:192.168.160.132" \\
zookeeper:3.4.9
docker logs -f zk-node1
/<code>
<code># 啟動zk-node2節點
docker run -d \\
--name=zk-node2 \\
--restart=always \\
-p 2192:2181 \\
-p 2892:2888 \\
-p 3892:3888 \\
-e ZOO_MY_ID=2 \\
-e ZOO_SERVERS="server.1=zk-node1:2891:3891 server.2=zk-node2:2888:3888 server.3=zk-node3:2893:3893" \\
-v /opt/docker/zookeeper/zk-node2/data:/data \\
-v /opt/docker/zookeeper/zk-node2/log:/datalog \\
-v /opt/docker/zookeeper/zk-node2/conf:/conf \\
--add-host "zk-node1:192.168.160.132" \\
--add-host "zk-node2:0.0.0.0" \\
--add-host "zk-node3:192.168.160.132" \\
zookeeper:3.4.9
docker logs -f zk-node2/<code>
<code># 啟動zk-node3節點
docker run -d \\
--name=zk-node3 \\
--restart=always \\
-p 2193:2181 \\
-p 2893:2888 \\
-p 3893:3888 \\
-e ZOO_MY_ID=3 \\
-e ZOO_SERVERS="server.1=zk-node1:2891:3891 server.2=zk-node2:2892:3892 server.3=zk-node3:2888:3888" \\
-v /opt/docker/zookeeper/zk-node3/data:/data \\
-v /opt/docker/zookeeper/zk-node3/log:/datalog \\
-v /opt/docker/zookeeper/zk-node3/conf:/conf \\
--add-host "zk-node1:192.168.160.132" \\
--add-host "zk-node2:192.168.160.132" \\
--add-host "zk-node3:0.0.0.0" \\
zookeeper:3.4.9
docker logs -f zk-node3/<code>
3、驗證集群是否部署成功
<code>查看容器啟動狀態
命令:docker ps -a | grep zk
輸出:
25be3a53ebf2 zookeeper:3.4.9 "/docker-entrypoin..." 4 minutes ago Up 4 minutes 0.0.0.0:2193->2181/tcp, 0.0.0.0:2893->2888/tcp, 0.0.0.0:3893->3888/tcp zk-node3
79efba9adf97 zookeeper:3.4.9 "/docker-entrypoin..." 4 minutes ago Up 4 minutes 0.0.0.0:2192->2181/tcp, 0.0.0.0:2892->2888/tcp, 0.0.0.0:3892->3888/tcp zk-node2
b5d6309eee03 zookeeper:3.4.9 "/docker-entrypoin..." 4 minutes ago Up 4 minutes 0.0.0.0:2191->2181/tcp, 0.0.0.0:2891->2888/tcp, 0.0.0.0:3891->3888/tcp zk-node1/<code>
4、查看集群狀態
<code>命令:docker exec -it zk-node1 bash -c "zkServer.sh status"
輸出:
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower/<code>
<code>命令:docker exec -it zk-node2 bash -c "zkServer.sh status"
輸出:
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader/<code>
<code>命令:docker exec -it zk-node3 bash -c "zkServer.sh status"
輸出:
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower/<code>
5、本zookeeper集群對外提供的地址列表
<code>zk-node1:192.168.160.132:2191:2891:3891
zk-node2:192.168.160.132:2192:2892:3893
zk-node3:192.168.160.132:2193:2893:3893/<code>
結束語
希望我的文章能給您帶來幫助,如果您有什麼疑問,可以給我留言,我會在第一時間給你提供解答。如果您有好的建議或想法,也歡迎給我留言。
![docker部署zookeeper集群](http://p2.ttnews.xyz/loading.gif)
閱讀更多 開發者手冊 的文章