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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 分布式学习十一:搭建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

集群搭建成功

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
26天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
存储 运维 NoSQL
分布式读写锁的奥义:上古世代 ZooKeeper 的进击
本文作者将介绍女娲对社区 ZooKeeper 在分布式读写锁实践细节上的思考,希望帮助大家理解分布式读写锁背后的原理。
|
3月前
|
存储 负载均衡 监控
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
这篇文章是关于Apache Dubbo框架与Zookeeper的关系,以及如何下载、安装和启动Zookeeper的教程,包括解决启动过程中可能遇到的报错问题。
135 3
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
|
2月前
|
存储 分布式计算 负载均衡
分布式计算模型和集群计算模型的区别
【10月更文挑战第18天】分布式计算模型和集群计算模型各有特点和优势,在实际应用中需要根据具体的需求和条件选择合适的计算架构模式,以达到最佳的计算效果和性能。
96 2
|
3月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
236 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
3月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
71 2
|
2月前
|
存储 监控 大数据
构建高可用性ClickHouse集群:从单节点到分布式
【10月更文挑战第26天】随着业务的不断增长,单一的数据存储解决方案可能无法满足日益增加的数据处理需求。在大数据时代,数据库的性能、可扩展性和稳定性成为企业关注的重点。ClickHouse 是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS),以其卓越的查询性能和高吞吐量而闻名。本文将从我的个人角度出发,分享如何将单节点 ClickHouse 扩展为高可用性的分布式集群,以提升系统的稳定性和可靠性。
227 0
|
4月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
4月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
4月前
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)