docker方式搭建zookeeper集羣

方式一:單臺服務器搭建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

注意:

  1. 宿主機要用不同的端口去映射zookeeper的2181端口,否則從第二個容器開始會啓動失敗
  2. 還有就是ip地址要指定設置成靜態,否則後面容器停了之後再次啓動ip地址可能會有改變,這樣導致集羣搭建失敗
  3. 如果失敗請看第三部網絡配置問題

三、指定容器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

結束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章