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

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集群状态

http://www.lryc.cn/news/2385971.html

相关文章:

  • 数据结构—(概述)
  • python打卡day34
  • 华为OD机试真题—— 流水线(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【数据架构01】数据技术架构篇
  • 【安全攻防与漏洞​】​​HTTPS中的常见攻击与防御​​
  • esp32cmini SK6812 2个方式
  • 【数据集】30 m地表温度LST数据集
  • 【CATIA的二次开发07】草图编辑器对象结构及应用
  • IT | 词汇科普手册Ⅱ
  • 【 java 基础问题 第一篇 】
  • 以前端的角度理解 Kubernetes(K8s)
  • 自用git记录
  • pyhton基础【2】基本语法
  • python数据结构-列表详解
  • 本地环境下 前端突然端口占用问题 针对vscode
  • flutter 项目调试、flutter run --debug调试模式 devtools界面说明
  • 在局域网(LAN)中查看设备的 IP 地址
  • Axure 基本用法学习笔记
  • 使用 Hyperlane 实现 WebSocket广播
  • SQL每日一题(5)
  • git提交通用规范
  • C++ - 仿 RabbitMQ 实现消息队列(3)(详解使用muduo库)
  • docker部署XTdrone
  • 图解 | 大模型智能体LLM Agents
  • Lambda表达式的方法引用详解
  • echarts设置标线和最大值最小值
  • gcc编译构建流程
  • Maven 中央仓库操作指南
  • BUUCTF——RCE ME
  • clickhouse-1-特性及docker化安装