Docker部署zookeeper3.6集群
# 一、Zookeeper介绍
Zookeeper是一个开源的分布式协调服务,主要用于管理和协调分布式系统中的大量节点。它由Apache软件基金会开发和维护,为构建可靠、高性能、分布式应用程序提供支持。
Zookeeper的设计目标是为分布式应用提供一致性、可靠性和高性能的服务,使得分布式应用可以更轻松地处理节点故障、数据同步、配置管理、服务发现等问题。它为开发人员提供了一个分布式的数据存储和协调解决方案,使得分布式系统中的各个节点能够相互协作,共享信息,并在节点发生故障时维护系统的一致性。
Zookeeper的工作原理主要基于“Zab”(ZooKeeper Atomic Broadcast)协议,该协议保证了数据在分布式系统中的原子广播,确保所有节点都能以相同的顺序接收到更新。
# 二、应用场景
分布式配置管理:各个节点可以共享和管理配置信息,当配置变化时,通知所有相关节点。
服务发现:允许节点动态地发现和加入到分布式系统中的服务。
分布式锁:实现分布式系统中的同步和互斥,以确保数据的一致性和正确性。
集群管理:监视节点状态,处理节点故障,维护集群的健康状态。
队列管理:实现分布式队列,用于协调和控制任务的执行顺序。
# 三、集群部署
# 3.1 机器规划
zookeeper版本: 3.6
主机 | IP | 端口 |
---|---|---|
kafka-zk-01 | 172.16.10.79 | 2181,2888,3888 |
kafka-zk-01 | 172.16.10.80 | 2181,2888,3888 |
kafka-zk-01 | 172.16.10.81 | 2181,2888,3888 |
# 3.2 镜像下载
更多版本参考:zookeeper官方镜像 (opens new window)
docker pull zookeeper:3.6
# 3.3 配置准备
创建宿主机映射目录
mkdir /opt/zookeeper/{conf,data,logs} -p
新建配置文件:
mkdir /opt/zookeeper/{conf,data,logs} -p
# vim /opt/zookeeper/conf/zoo.cfg
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=172.16.10.79:2888:3888;2181
server.2=172.16.10.80:2888:3888;2181
server.3=172.16.10.81:2888:3888;2181
2
3
4
5
6
7
8
9
10
11
12
13
配置zookeeper主机id,每个机器id不能相同,同一个集群中,必须唯一,并且需要对应配置文件中server后面的值
[root@kafka-zk-01 ~]# echo "1" > /opt/zookeeper/data/myid
[root@kafka-zk-02 ~]# echo "2" > /opt/zookeeper/data/myid
[root@kafka-zk-03 ~]# echo "3" > /opt/zookeeper/data/myid
2
3
参数解释
配置文件:
autopurge.snapRetainCount
: 自动清理(autopurge)保留的快照文件数量。当Zookeeper服务器保存的快照文件超过此数量时,旧的快照文件将被自动删除。autopurge.purgeInterval
: 自动清理(autopurge)运行的时间间隔。设置为0将禁用自动清理,否则,Zookeeper将在指定的时间间隔内检查并执行清理操作。server.x
: 这里的"x"代表Zookeeper集群中的每个服务器的编号。格式为server.ID=hostname:peerPort:leaderPort;
clientPort。其中hostname
是服务器的IP地址或主机名,peerPort
是该服务器与其他Zookeeper服务器通信的端口号,leaderPort
是用于选举Leader的端口号,clientPort
是主机端口,3.5版本之后才加入。
# 3.4 启动
容器网络采用的是host模式,因此不需要再进行端口映射,三台机器上zk部署,基本类似,只有myid每个机器需要有唯一值
docker run --network host --restart=always \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/conf:/conf \
-v /opt/zookeeper/logs:/datalog \
--name zookeeper -d zookeeper:3.6
2
3
4
5
启动参数:
/opt/zookeeper/data:/data
: 数据目录/opt/zookeeper/conf:/conf
: 配置文件/opt/zookeeper/logs:/datalog
: 日志目录
# 3.5 集群状态查看
- kafka-zk-01
[root@kafka-zk-01 ~]# docker exec -it zookeeper /bin/bash
root@kafka-zk-01:/apache-zookeeper-3.6.4-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
2
3
4
5
6
- kafka-zk-02
[root@kafka-zk-02 ~]# docker exec -it zookeeper /bin/bash
root@kafka-zk-02:/apache-zookeeper-3.6.4-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
2
3
4
5
6
- kafka-zk-03
[root@kafka-zk-03 ~]# docker exec -it zookeeper /bin/bash
root@kafka-zk-03:/apache-zookeeper-3.6.4-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
2
3
4
5
6
可以看到kafka-zk-03
节点为主节点,另外两台为从节点