当前位置: 首页 > news >正文

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-net

  zoo2:
    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-net

  zoo3:
    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-net

networks:
  zookeeper-net:
    external: true

2、启动zookeeper集群

docker-compose up -d

3、查看zookeeper集群状态

相关文章:

  • 技术服务业-首套运营商网络路由5G SA测试专网搭建完成并对外提供服务
  • 分布式缓存:缓存的三种读写模式及分类
  • Flume的大概简单介绍
  • AGV(自动导引车)通信协议及通信链路性能需求分析
  • 移远三款主流5G模块RM500U,RM520N,RG200U比较
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • EasyRTC音视频实时通话WebP2P技术赋能的全场景实时通信解决方案
  • 力扣-最大连续一的个数
  • 力扣-将x减到0的最小操作数
  • 【时时三省】(C语言基础)对被调用函数的声明和函数原型
  • [特殊字符] GUNION SDK 接口调用方式说明(静态库 vs 动态库)
  • C/C++的OpenCV 进行图像梯度提取
  • 并发容器(Collections)
  • bi软件是什么?bi软件是做什么用的?
  • 量化研究---bigquant策略交易api研究
  • 30个性能优化方案
  • Python在自动驾驶中的多传感器融合——让智能汽车“看得更清楚”
  • Ubantu安装 Jenkins LTS
  • VR全景制作方法都有哪些?需要注意什么?
  • 9大开源AI智能体概况
  • 大网站制作公司/seo刷词
  • 网络广告的特征是()多选题/seo专员是什么意思
  • it培训机构学费/seo方案书案例
  • 响应式网站设计的要求/友情链接seo
  • 网站怎么下载视频/谷歌流量代理代理
  • 微网站 前景/小红书广告投放平台