如何使用Docker搭建ZooKeepe集群

1、拉取镜像

shell 复制代码
# docker pull zookeeper:3.7.1

2、创建网络

Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。在实际部署中,需要指定容器ip,不允许其自行分配ip,尤其在搭建集群时。可以通过docker network create指令创建自己的bridge网络 ,在创建容器时指定网络和ip即可。

shell 复制代码
# 创建自定义网络
# docker network create --driver bridge --subnet=172.168.0.0/16 --gateway=172.168.1.1 mynet
# 查看所有网络
# docker network ls

3、配置文件

a、创建目录

创建用于存放各个zookeeper节点配置文件的config

shell 复制代码
# mkdir -p /usr/local/zk_cluster/{node1/conf,node2/conf,node3/conf}

b、创建文件

shell 复制代码
# zookeeper 节点1 配置
# vi /usr/local/zk_cluster/node1/conf/zoo.cfg

# zookeeper 节点2 配置
# vi /usr/local/zk_cluster/node2/conf/zoo.cfg

# zookeeper 节点3 配置存放目录
# vi /usr/local/zk_cluster/node3/conf/zoo.cfg

内容:

txt 复制代码
# Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里
dataDir=/data

# 事物日志存储地点,如果没提供的话使用的则是 dataDir
dataLogDir=/datalog

# 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位
tickTime=2000

# 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=5

# 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)
syncLimit=2

# 默认值为3,不支持以系统属性方式配置。用于配置Zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。此参数的最小值为3,如果配置的值小于3会自动调整到3
autopurge.snapRetainCount=3

# 默认值为0,单位为小时,不支持以系统属性方式配置。用于配置Zookeeper进行历史文件自动清理的频率。如果配置为0或负数,表示不需要开启定时清理功能
autopurge.purgeInterval=0

# 默认为60,不支持以系统属性方式配置。从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以ip地址来进行连接数的限制。
# 如果设置为0,表示不做任何限制。仅仅是单台客户端与单个Zookeeper服务器连接数的限制,不能控制所有客户端的连接数总和
maxClientCnxns=60

# 3.5.0中的新功能:当设置为false时,可以在复制模式下启动单个服务器,单个参与者可以使用观察者运行,并且群集可以重新配置为一个节点,并且从一个节点。
# 对于向后兼容性,默认值为true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通过将"standaloneEnabled = false"或"standaloneEnabled = true"添加到服务器的配置文件来设置它。
standaloneEnabled=false

# 内嵌的管理控制台,停用这个服务
admin.enableServer=false

# 开启四字命令,将所有命令添加到白名单中
4lw.commands.whitelist=*

# 集群中服务的列表
server.1=172.168.0.1:2888:3888;2181
server.2=172.168.0.2:2888:3888;2181
server.3=172.168.0.3:2888:3888;2181

5、集群启动

节点1启动

shell 复制代码
# docker run -d --restart always \
--name zk-node1 \
--network mynet \
--ip 172.168.0.1 \
-p 2181:2181 \
-e ZOO_MY_ID=1 \
-v /usr/local/zk_cluster/node1/conf/zoo.cfg:/conf/zoo.cfg \
-v /usr/local/zk_cluster/node1/data:/data \
-v /usr/local/zk_cluster/node1/datalog:/datalog \
-v /usr/local/zk_cluster/node1/logs:/logs \
zookeeper:3.7.1

说明:

/usr/local/zk_cluster/node1/data:指定存放zookeeper数据的目录,若该目录不存在,则自动生成;

/usr/local/zk_cluster/node1/datalog:指定存放zookeeper数据日志目录,若该目录不存在,则自动生成;

/usr/local/zk_cluster/node1/logs:指定存放zookeeper日志目录,若该目录不存在,则自动生成;

节点2启动

shell 复制代码
# docker run -d --restart always \
--name zk-node2 \
--network mynet \
--ip 172.168.0.2 \
-p 2182:2181 \
-e ZOO_MY_ID=2 \
-v /usr/local/zk_cluster/node2/conf/zoo.cfg:/conf/zoo.cfg \
-v /usr/local/zk_cluster/node2/data:/data \
-v /usr/local/zk_cluster/node2/datalog:/datalog \
-v /usr/local/zk_cluster/node2/logs:/logs \
zookeeper:3.7.1

节点3启动

shell 复制代码
# docker run -d --restart always \
--name zk-node3 \
--network mynet \
--ip 172.168.0.3 \
-p 2183:2181 \
-e ZOO_MY_ID=3 \
-v /usr/local/zk_cluster/node3/conf/zoo.cfg:/conf/zoo.cfg \
-v /usr/local/zk_cluster/node3/data:/data \
-v /usr/local/zk_cluster/node3/datalog:/datalog \
-v /usr/local/zk_cluster/node3/logs:/logs \
zookeeper:3.7.1

6、集群状态

shell 复制代码
# 在容器 zk-node1 中开启一个交互模式的终端
[root@localhost ~]# docker exec -it zk-node1 /bin/bash
# 查看 zookeeper 状态 node1为follower
root@dce8441d0178:/apache-zookeeper-3.7.1-bin# bin/zkServer.sh status

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@dce8441d0178:/apache-zookeeper-3.7.1-bin# exit
exit

# 在容器 zk-node2 中开启一个交互模式的终端
[root@localhost ~]# docker exec -it zk-node2 /bin/bash
# 查看 zookeeper 状态 node2为leader
root@969650dede5a:/apache-zookeeper-3.7.1-bin# bin/zkServer.sh status

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
root@969650dede5a:/apache-zookeeper-3.7.1-bin# exit
exit

# 在容器 zk-node3 中开启一个交互模式的终端
[root@localhost ~]# docker exec -it zk-node3 /bin/bash
# 查看 zookeeper 状态 node3为follower
root@9a0ca305754a:/apache-zookeeper-3.7.1-bin# bin/zkServer.sh status

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@9a0ca305754a:/apache-zookeeper-3.7.1-bin# exit
exit

7、开放端口

shell 复制代码
# firewall-cmd --add-port=2181/tcp --add-port=2182/tcp --add-port=2183/tcp --permanent
# firewall-cmd --reload
相关推荐
热爱嵌入式的小许10 分钟前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
雪域迷影3 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
莹雨潇潇4 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
Pythonliu74 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我4 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
小O_好好学6 小时前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥6 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
john_hjy6 小时前
11. 异步编程
运维·服务器·javascript
x晕x7 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器
活跃的煤矿打工人7 小时前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu