方式一:單臺服務器搭建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
如果網絡段被佔用,刪除網絡
docker network disconnect --force <網絡模式> <容器名>
四、 修改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
結束!