使用 docker-compose 部署 zookeeper(单机和集群)
我之前编写了一些 zookeeper 的博客,当时是在 windows 系统上部署的单机版,在实际应用中绝大多数情况下都是部署在 Linux 系统上,因此很有必要介绍一下如何在 CentOS7 上快速部署 zookeeper 的单机版和集群版。
这里就不详细介绍 zookeeper 了,网上资料很多,也可以查看官网或者我之前的博客,我之前编写的相关博客地址如下:
zookeeper 部署和常用操作命令:https://www.cnblogs.com/studyjobs/p/16413055.html
对 zookeeper 进行增删改查:https://www.cnblogs.com/studyjobs/p/16460619.html
使用 zookeeper 实现分布式协调机制:https://www.cnblogs.com/studyjobs/p/16468221.html
使用 zookeeper 实现分布式锁:https://www.cnblogs.com/studyjobs/p/16488794.html
另外 zookeeper 的官网地址是:https://zookeeper.apache.org
一、单机版部署
我的 CentOS7 虚拟机 ip 地址是 192.168.136.128,已经安装好了 docker 和 docker-compose
在虚拟机上创建目录 mkdir -p /data/zookeeper
在其下面再创建两个目录 data 和 datalog,整体结构如下图:
编写 docker-compose.yml 文件,具体内容如下:
version: '3.2'
services:
zoo1:
image: zookeeper:latest
restart: always
container_name: zookeeper
ports:
- "2181:2181"
- "8080:8080"
volumes:
- ./data:/data
- ./datalog:/datalog
- /etc/localtime:/etc/localtime
其中 2181 是 zookeeper 的连接端口,8080 是 zookeeper 提供的 web 界面操作端口
在 docker-compose.yml 所在目录运行命令 docker-compose up -d
启动服务,使用 docker-compose logs -f
查看启动日志
服务启动成功后,打开浏览器访问 http://192.168.136.128:8080/commands
查看服务提供的 web 操作界面,界面很简陋。
有兴趣的话,可以把上面的链接都点一下,熟悉了解一下。这里我们点击 server_stats
链接,可以查看 zookeeper 服务的状态:
要想操作 zookeeper ,还是得使用可视化工具比较方便,我介绍使用 prettyZoo 这个开源免费的可视化工具
prettyZoo 的 github 地址为:https://github.com/vran-dev/PrettyZoo
prettyZoo 的工具下载地址为:https://github.com/vran-dev/PrettyZoo/releases
我当前看到的最新版本是 v2.1.1,如下图所示:
我下载的是 zip 包,解压缩之后双击里面的 exe 程序即可启动可视化界面,可以设置为中文界面:
然后使用该工具连接到刚刚部署的 zookeeper,然后就可以很方便的查看 zookeeper 中的树节点,也可以进行增删改查操作
prettyZoo 可视化工具,使用起来很简单,也非常方便,这里就不详细介绍了
二、集群部署
有了上面单机部署的经验后,集群部署就简单很多了,创建 /data/zookeeper-cluster 目录,然后在其下面创建 3 个子目录 zk1、zk2、zk3
每个 zk 目录的结构跟上面的单机部署目录结构一样,都包含 2 个目录 data、datalog,如下图所示:
编写 docker-compose.yml 文件内容如下所示:
version: '3.2'
services:
zk1:
image: zookeeper:latest
hostname: zk1
container_name: zk1
ports:
- "2181:2181"
- "8081:8080"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk1/data:/data
- ./zk1/datalog:/datalog
- /etc/localtime:/etc/localtime
networks:
- zk-net
zk2:
image: zookeeper:latest
hostname: zk2
container_name: zk2
ports:
- "2182:2181"
- "8082:8080"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk2/data:/data
- ./zk2/datalog:/datalog
- /etc/localtime:/etc/localtime
networks:
- zk-net
zk3:
image: zookeeper:latest
hostname: zk3
container_name: zk3
ports:
- "2183:2181"
- "8083:8080"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
volumes:
- ./zk3/data:/data
- ./zk3/datalog:/datalog
- /etc/localtime:/etc/localtime
networks:
- zk-net
# 给集群创建一个网络,名称自己随便定义,这里取名为 zk-net
networks:
zk-net:
driver: bridge
最后在 docker-compose.yml 所在目录运行命令 docker-compose up -d
启动服务
使用 docker-compose logs -f
命令可以实时查看 3 个 zookeeper 服务启动的日志。
zookeeper 的集群部署,最主要是配置 environment 环境变量,上面配置的 2 个环境变量含义如下:
- ZOO_MY_ID 表示当前 zookeeper 实例在集群中的编号,范围为1-255,所以一个 zookeeper 集群最多有 255 个节点
- ZOO_SERVERS 表示当前 zookeeper 实例所在集群中的所有节点的编号、主机名(或IP地址)、端口
zookeeper一共需要用到三个端口:
- 2181:对客户端程序(如我们开发的 SpringBoot 程序)提供服务的连接端口
- 3888:zookeeper 集群中的节点,选举 leader 使用的通信端口
- 2888:集群内各节点之间的通讯端口(Leader监听此端口)
最后我们分别访问已经部署好的 zookeeper 的 3 个节点的 web 操作界面,访问其 server_stats 界面,查看其在集群中的角色
OK,到此为止,有关 zookeeper 的单机部署和集群部署,已经介绍完毕。