分布式学习十一:搭建zookeeper集群

简介: 分布式学习十一:搭建zookeeper集群

单机部署

之前发过一个单机部署教程,集群部署类似,这次我们通过docker-compse进行编排部署

http://www.php20.cn/article/sw/z/317 单机安装

制作docker镜像

由于centos8停止维护了,这次我们选择Ubuntu,新建dockerfile文件:

FROM ubuntu
ARG ZK_VERSION=3.8.0
WORKDIR /zk/
RUN apt-get update 
RUN apt-get install curl -y 
RUN apt-get install openjdk-8-jdk  -y
RUN curl -o zookeeper.tar.gz https://downloads.apache.org/zookeeper/zookeeper-${ZK\_VERSION}/apache-zookeeper-${ZK\_VERSION}-bin.tar.gz
RUN tar -zvxf zookeeper.tar.gz && \\cp -rf apache-zookeeper-${ZK_VERSION}-bin/*  /zk/
RUN cp /zk/conf/zoo_sample.cfg /zk/conf/zoo.cfg
RUN rm -rf zookeeper.tar.g apache-zookeeper-${ZK_VERSION}-bin/
CMD ./bin/zkServer.sh start-foreground

build镜像:

docker build -t zk-test:v1 -f ./zkList/dockerfile/Dockerfile ./zkList/dockerfile

启动:

docker run -it zk-test:v1

可看到单机启动成功

docker-compose容器编排

容器编排目录结构

tioncico@xianshikedeMBP zkStudy % tree
.
└── zkList  
    ├── docker-compose.yml
    ├── dockerfile
    │   └── Dockerfile
    └── service
        ├── zk01
        │   ├── data
        │   │   └── myid
        │   └── zoo.cfg
        ├── zk02
        │   ├── data
        │   │   └── myid
        │   └── zoo.cfg
        ├── zk03
        │   ├── data
        │   │   └── myid
        │   └── zoo.cfg
        ├── zk04
        │   ├── data
        │   │   └── myid
        │   └── zoo.cfg
        └── zk05
            ├── data
            │   └── myid
            └── zoo.cfg

编写docker-compose.yml

version: "3"
services:
  zk01:
    image: zk-test:v1
    ports:
      - "10001:2181"
    volumes:
      - ${SOURCE_DIR}/service/zk01/data:/zk/data/
      - ${SOURCE_DIR}/service/zk01/data/myid:/zk/data/myid
      - ${SOURCE_DIR}/service/zk01/zoo.cfg:/zk/conf/zoo.cfg
    restart: always
    networks:
      - default
    environment:
      TZ: "Asia/Shanghai"
    command: \[ ./bin/zkServer.sh,start-foreground \]
  zk02:
    image: zk-test:v1
    ports:
      - "10002:2181"
    volumes:
      - ${SOURCE_DIR}/service/zk02/data:/zk/data/
      - ${SOURCE_DIR}/service/zk02/data/myid:/zk/data/myid
      - ${SOURCE_DIR}/service/zk02/zoo.cfg:/zk/conf/zoo.cfg
    restart: always
    networks:
      - default
    environment:
      TZ: "Asia/Shanghai"
    command: \[ ./bin/zkServer.sh,start-foreground \]
  zk03:
    image: zk-test:v1
    ports:
      - "10003:2181"
    volumes:
      - ${SOURCE_DIR}/service/zk03/data:/zk/data/
      - ${SOURCE_DIR}/service/zk03/data/myid:/zk/data/myid
      - ${SOURCE_DIR}/service/zk03/zoo.cfg:/zk/conf/zoo.cfg
    restart: always
    networks:
      - default
    environment:
      TZ: "Asia/Shanghai"
    command: \[ ./bin/zkServer.sh,start-foreground \]
  zk04:
    image: zk-test:v1
    ports:
      - "10004:2181"
    volumes:
      - ${SOURCE_DIR}/service/zk04/data:/zk/data/
      - ${SOURCE_DIR}/service/zk04/data/myid:/zk/data/myid
      - ${SOURCE_DIR}/service/zk04/zoo.cfg:/zk/conf/zoo.cfg
    restart: always
    networks:
      - default
    environment:
      TZ: "Asia/Shanghai"
    command: \[ ./bin/zkServer.sh,start-foreground \]
  zk05:
    image: zk-test:v1
    ports:
      - "10005:2181"
    volumes:
      - ${SOURCE_DIR}/service/zk05/data:/zk/data/
      - ${SOURCE_DIR}/service/zk05/data/myid:/zk/data/myid
      - ${SOURCE_DIR}/service/zk05/zoo.cfg:/zk/conf/zoo.cfg
    restart: always
    networks:
      - default
    environment:
      TZ: "Asia/Shanghai"
    command: \[ ./bin/zkServer.sh,start-foreground \]
networks:
  default:

注意 里面有个${SOURCE_DIR} 是.env 环境文件配置的

tioncico@xianshikedeMBP zkList % cat .env
SOURCE_DIR=./
tioncico@xianshikedeMBP zkList %

编写zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/zk/data/
# the port at which the clients will connect
clientPort=2181
# 集群地址配置 server.A=B:C:D A为序号 B为ip地址或者host C为通信端口 D为集群选举端口
server.1=zk01:2888:3888
server.2=zk02:2888:3888
server.3=zk03:2888:3888
server.4=zk04:2888:3888
server.5=zk05:2888:3888
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

编写myid

每个myid文件写上服务器编号即可,1-5

启动

docker-composer up

image.png

验证集群

打开任意n个(n>2) 容器(多个shell窗口打开):

docker exec -it zklist\_zk01\_1 ./bin/zkCli.sh
docker exec -it zklist\_zk02\_1 ./bin/zkCli.sh
docker exec -it zklist\_zk03\_1 ./bin/zkCli.sh

使用其中一个create /test

create /test 123456

使用另外2个查询

get /test

image.png

集群搭建成功

目录
相关文章
|
6月前
|
消息中间件 分布式计算 资源调度
《聊聊分布式》ZooKeeper与ZAB协议:分布式协调的核心引擎
ZooKeeper是一个开源的分布式协调服务,基于ZAB协议实现数据一致性,提供分布式锁、配置管理、领导者选举等核心功能,具有高可用、强一致和简单易用的特点,广泛应用于Kafka、Hadoop等大型分布式系统中。
|
8月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
547 2
|
消息中间件 运维 Java
搭建Zookeeper、Kafka集群
本文详细介绍了Zookeeper和Kafka集群的搭建过程,涵盖系统环境配置、IP设置、主机名设定、防火墙与Selinux关闭、JDK安装等基础步骤。随后深入讲解了Zookeeper集群的安装与配置,包括数据目录创建、节点信息设置、SASL认证配置及服务启动管理。接着描述了Kafka集群的安装,涉及配置文件修改、安全认证设置、生产消费认证以及服务启停操作。最后通过创建Topic、发送与查看消息等测试验证集群功能。全网可搜《小陈运维》获取更多信息。
988 1
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
1189 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
消息中间件 算法 调度
分布式系统学习10:分布式事务
本文是小卷关于分布式系统架构学习系列的第13篇,重点探讨了分布式事务的相关知识。随着业务增长,单体架构拆分为微服务后,传统的本地事务无法满足需求,因此需要引入分布式事务来保证数据一致性。文中详细介绍了分布式事务的必要性、实现方案及其优缺点,包括刚性事务(如2PC、3PC)和柔性事务(如TCC、Saga、本地消息表、MQ事务、最大努力通知)。同时,还介绍了Seata框架作为开源的分布式事务解决方案,提供了多种事务模式,简化了分布式事务的实现。
650 5
|
NoSQL 关系型数据库 MySQL
分布式系统学习9:分布式锁
本文介绍了分布式系统中分布式锁的概念、实现方式及其应用场景。分布式锁用于在多个独立的JVM进程间确保资源的互斥访问,具备互斥、高可用、可重入和超时机制等特点。文章详细讲解了三种常见的分布式锁实现方式:基于Redis、Zookeeper和关系型数据库(如MySQL)。其中,Redis适合高性能场景,推荐使用Redisson库;Zookeeper适用于对一致性要求较高的场景,建议基于Curator框架实现;而基于数据库的方式性能较低,实际开发中较少使用。此外,还探讨了乐观锁和悲观锁的区别及适用场景,并介绍了如何通过Lua脚本和Redis的`SET`命令实现原子操作,以及Redisson的自动续期机
1270 7
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
存储 运维 NoSQL
分布式读写锁的奥义:上古世代 ZooKeeper 的进击
本文作者将介绍女娲对社区 ZooKeeper 在分布式读写锁实践细节上的思考,希望帮助大家理解分布式读写锁背后的原理。
382 11
下一篇
开通oss服务