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

结束!

posted @ 2022-04-22 13:37  aaronthon  阅读(1177)  评论(0编辑  收藏  举报