Zookeeper之基于Docker搭建集群

发布时间:2023年12月30日

简介

搭建ZK分布式模式,由2n+1台服务器组成。

搭建集群有两种方式:

  1. 单机多服务:
    1. 不同服务使用不同的配置文件,配置不同的端口号等。
    2. 使用同一个配置不同的server.id,即IP相同,但是端口不同。
  2. 多机多服务:各自配置zoo.cfg文件,互相加入各自的服务器列表。

节点概念

  • Loader 主节点:事务请求的唯一调度者和写操作的处理者(从节点的写操作需要转发给主节点,主节点决定编号、是否执行操作)。
  • Follower 从节点:处理非事务(读)请求;参与Loader选举的投票,比如Loader 节点挂了之后选举新的。
  • Observer 观察者节点:访问量大的时候,可以增减观察者角色,处理部分请求。观察者同步集群最新状态变化,处理非事务请求, 对于事务请求,则会转发给 Leader服务器进行处理。 观察者不参与任何形式的投票,只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群非事务处理能力。

搭建集群

准备

环境说明:
使用虚拟机启动三台ubunut18的主机,IP分别为192.168.204.175/176/177

修改host文件(一般位于C:\Windows\System32\drivers\etc

192.168.204.175 zk1
192.168.204.176 zk2
192.168.204.177 zk3

配置&启动

  • 拉取镜像docker pull zookeeper:3.8.1
  • 创建存储数据的目录data(自己命名)目录和myid文件,myid文件存储集群中此节点的唯一值。
mkdir zk_home
cd zk_home/
mkdir data
cd data
touch myid
# 集群内唯一ID
echo 1 >> myid
# zk2
# echo 2 >> myid
# zk3
# echo 3 >> myid
  • 创建一个存放配置文件的目录,然后再创建zoo.cfg文件
# 创建存放配置文件的目录
cd zk_home/
mkdir conf
cd zk_conf
touch zoo.cfg
  • 将配置写入zoo.cfg文件
# 启动成功的配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data
clientPort=2181
# server后面的数字是集群节点的唯一ID
server.1=zk1:2888:3888;2181
server.2=zk2:2888:3888;2181
server.3=zk3:2888:3888;2181
  • 启动zookeeper容器。注意,不同的服务器--hostname不同。
docker run  --name zookeeper  --restart always -d \
-p 2888:2888 \
-p 3888:3888 \
-p 2181:2181 \
-v /home/liangshijie/zk_home/conf/zoo.cfg:/conf/zoo.cfg \
-v /home/liangshijie/zk_home/data:/data \
--hostname="zk1" \
zookeeper:3.8.1
  • 检查zk状态
# 分别进入zk1、zk2、zk3服务器,查看zk状态:
# 1.进入容器
docker exec -it <ID> bash
# 2.进入bin目录
cd /apache-zookeeper-3.8.1-bin/bin
# 3.运行命令查看状态
zkServer.sh status

# 4.命令执行结果
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

  • 测试,使用zkCli登录远程服务器,执行操作命令

image.png

# 登录zk3新增/app节点,并设置值
zkCli.cmd -server zk3:2181
create /app
set /app 11

# 登录zk1节点,查看/app值
zkCli.cmd -server zk1:2181
get /app
文章来源:https://blog.csdn.net/qq_38974073/article/details/135294326
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。