如何使用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
相关推荐
忆~遂愿22 分钟前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
Fcy64842 分钟前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满44 分钟前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9031 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技2 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀3 小时前
Linux环境变量
linux·运维·服务器
zzzsde3 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
70asunflower4 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
聆风吟º4 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann