docker方式搭建zookeeper叢集
阿新 • • 發佈:2022-04-22
方式一:單臺伺服器搭建zookeeper叢集
一、取映象,本篇以3.4.10為例
docker pull zookeeper #拉取最新的映象 docker pull zookeeper:3.4.10 # 拉取指定版本
二、建立映象,啟動服務
docker run -d --name zk01 -p 2181:2181 --ip 10.88.0.19 zookeeper:3.4.10 docker run -d --name zk02 -p 2182:2181 --ip 10.88.0.20 zookeeper:3.4.10 docker run -d --name zk03 -p 2183:2181 --ip 10.88.0.21 zookeeper:3.4.10
注意:
- 宿主機要用不同的埠去對映zookeeper的2181埠,否則從第二個容器開始會啟動失敗
- 還有就是ip地址要指定設定成靜態,否則後面容器停了之後再次啟動ip地址可能會有改變,這樣導致叢集搭建失敗
- 如果失敗請看第三部網路配置問題
三、指定容器IP的注意事項
Docker建立容器時預設採用bridge網路,自行分配ip,不允許自己指定。在實際部署中,我們需要指定容器ip,不允許其自行分配ip,尤其是搭建叢集時,固定ip是必須的。我們可以建立自己的bridge網路 : mynet,建立容器的時候指定網路為mynet並指定ip即可。
1.檢視網路模式
[root@k8s-node-1 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 3dfc7f4e8674 bridge bridge local 459fab2289a4 host host local aeaff244696b none null local
2.建立一個新的bridge網路
docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 mynet
3.檢視網路資訊
docker network inspect mynet
4.建立容器並指定容器ip
// 建議用此命令執行容器
docker run -e TZ="Asia/Shanghai" --privileged -itd -h zookeeper01.com --name zk01.com --network=mynet -p 2181:2181 --ip 172.18.12.1 zookeeper:3.4.10
docker run -e TZ="Asia/Shanghai" --privileged -itd -h zookeeper01.com --name zk01.com --network=mynet -p 2182:2181 --ip 172.18.12.2 zookeeper:3.4.10
docker run -e TZ="Asia/Shanghai" --privileged -itd -h zookeeper01.com --name zk01.com --network=mynet -p 2183:2181 --ip 172.18.12.3 zookeeper:3.4.10
解釋說明:
- --privileged 可以有很多許可權
- -e TZ="Asia/Shanghai" 時區
- -h zk01.com 主機名
- --name zk01 容器名字
- -i :開啟標準輸入
- -it :合起來實現和容器互動的作用,執行一個互動式會話 shell
- -d : 後臺執行
- -p 宿主機與容器對映埠
5.檢視容器ip
docker inspect 容器id
四、 修改zookeeper配置
1、修改zoo.cfg
[root@k8s-node-1 ~]# docker exec -it zk01 /bin/bash bash-4.3# vi /conf/zoo.cfg
將如下配置內容寫入zoo.cfg的最後
server.1=172.18.12.1:2888:3888 server.2=172.18.12.2:2888:3888 server.3=172.18.12.3:2888:3888
注意:
- 每一行後面都不能有空格,ip或埠都不能有錯誤。任意一個節點異常,都會導致整個叢集的異常
- server.1 此處的1或2或3,是每個zookeeper節點的myid的值
注意:
請注意,如果你是在Linux環境下直接搭建zookeeper,請修改本機所在節點的ip為0.0.0.0
例如我當前節點是server.1,則ip修改為0.0.0.0(非docker環境),如下配置:
server.1=0.0.0.0:2888:3888;2181 server.2=10.88.0.20:2888:3888;2181 server.3=10.88.0.21:2888:3888;2181
2、修改myid
bash-4.3# vi /data/myid
注意:
- 前面已經說了,myid裡面寫的是數字,每個節點的數字不要重複
- zk01的myid是1,zk02的myid是2,zk03的myid是3
所有zookeeper節點的上述兩個配置都配置完畢,接下來就是重啟docker容器。
五、重啟docker容器
使用exit命令退出容器後,重啟三個docker服務
bash-4.3# exit exit [root@k8s-node-1 ~]# docker restart zk01 zk02 zk03
六、檢查叢集狀態
分別進入三個容器
[root@k8s-node-1 ~]# docker exec -it zk01 /bin/bash bash-4.3# /zookeeper-3.4.10/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Mode: leader
[root@k8s-node-1 ~]# docker exec -it zk02 /bin/bash bash-4.3# /zookeeper-3.4.10/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Mode: follower
[root@k8s-node-1 ~]# docker exec -it zk03 /bin/bash bash-4.3# /zookeeper-3.4.10/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Mode: follower
可以看到zk01是leader,zk02和zk03是follower
結束!