1. 程式人生 > 其它 >docker方式搭建zookeeper叢集

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

四、 修改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

結束!