Docker部署Zookeeper集群
简介
ZooKeeper 是一个开源的分布式协调服务,由 Apache 软件基金会开发和维护。它主要用于管理和协调分布式系统中的多个节点,以解决分布式环境下的常见问题,如配置管理、服务发现、分布式锁等。ZooKeeper 提供了一种可靠的机制,使得分布式系统中的节点可以高效地协作,确保数据的一致性和服务的高可用性。
核心功能
-
命名服务
-
为分布式系统中的节点提供唯一的名称,方便节点之间的识别和访问。这类似于 DNS 在互联网中的作用,但更专注于分布式系统内部的节点命名。
-
-
分布式锁
-
实现分布式环境下的锁机制,确保在多节点访问共享资源时,资源的一致性和完整性。ZooKeeper 通过其内部的顺序节点创建和监听机制,可以有效地实现分布式锁。
-
-
配置管理
-
集中管理分布式系统中的配置信息。当配置信息发生变化时,ZooKeeper 可以及时通知各节点,确保所有节点使用最新的配置。
-
-
服务发现
-
动态发现系统中的可用服务实例。服务启动后可在 ZooKeeper 中注册,其他服务可通过 ZooKeeper 查询可用的服务实例列表。
-
-
队列管理
-
实现分布式队列,包括普通队列(FIFO)和优先队列,用于任务调度和消息传递等场景。
-
搭建步骤
部署Docker
略
部署docker-compose
略
单实例部署(简单)
docker run --name some-zookeeper --restart always -d zookeeper
单实例部署(使用自定义配置文件)
1、创建zookeeper管理用户和工作目录
useradd zookeeper
su - zookeeper
mkdir -p zookeeper/{data,conf,logs}
2、自定义配置文件zoo.cfg(举例)
cat > zookeeper/conf/zoo.cfg <<EOF
dataDir=/data
clientPort=2181
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=localhost:2888:3888;2181
EOF
3、启动zookeeper单实例
docker run --name some-zookeeper --restart always \-e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" \--user $(id -u):$(id -g) \-v $(pwd)/zookeeper/data:/data \-v $(pwd)/zookeeper/conf:/conf \-v $(pwd)/zookeeper/logs:/datalog \-d zookeeper
验证Zookeeper状态
docker exec -it some-zookeeper /bin/bash zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
进入控制台
docker run -it --rm --link some-zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
创建结点
使用以下命令创建持久结点:
create /test '测试'
查看结点
查看结点存储的值及其状态:
get /test
查看结点状态:
stat /test
修改结点
修改结点数据:
set /test '新数据'
删除结点
删除结点:
delete /test
递归删除结点及其所有子结点:
deleteall /test
使用docker-compose部署集群
启动集群前
1、最好创建zookeeper用户。
2、需要提前准备的配置提前准备好,通过挂载卷的方式挂载给容器。
3、也可以通过环境变量的方式修改zookeeper启动项
(注:如上操作均需要定义到docker-compose.yaml中,下面仅仅是举例,只能在测试开发环境下使用。)
1、定义docker-compose.yaml(举例)
注:如果docker-compose启动集群时,无法自动创建network,或者就要使用已有的network,注意下面的红色部分。
services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
- zookeeper-netzoo2:
image: zookeeper
restart: always
hostname: zoo2
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
- zookeeper-netzoo3:
image: zookeeper
restart: always
hostname: zoo3
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
- zookeeper-netnetworks:
zookeeper-net:
external: true
2、启动zookeeper集群
docker-compose up -d
3、查看zookeeper集群状态