【Docker】Docker Compose方式搭建分布式协调服务(Zookeeper)集群

开发分布式应用时,往往需要高度可靠的分布式协调,Apache ZooKeeper 致力于开发和维护开源服务器,以实现高度可靠的分布式协调。具体内容见zookeeper官网。现代应用往往使用云原生技术进行搭建,如何用Docker搭建Zookeeper集群,这里介绍使用Docker Compose方式搭建分布式协调服务(Zookeeper)集群,适用于单机Docker环境,无论是本地单机开发、测试环境单机验证,还是生产环境单机运行。

文章目录

  • 开发环境
  • 开发流程
  • 运行效果
  • 配置代码
    • zookeeper.yaml
    • README.md

开发环境

  1. ​macOS For Apple Silicon;
  2. Idea;
  3. Docker Desktop: 4.41.2,Engine:28.1.1,Compose: v2.35.1-desktop.1;
  4. Docker镜像:zookeeper:3.9.3;
  5. Docker Compose配置文件:zookeeper-cluster.yaml;
  6. 命令行启动配置文件:README.md.

开发流程

  1. 下载Docker Desktop并安装,Docker Desktop For Mac Apple Silicon地址;
  2. 编写Docker Compose配置文件,配置3个结点,每个结点的ZOO_MY_ID分别为1-3,配置客户端连接、集群结点通信端口和集群选举端口,配置3个服务结点.工程文件见zookeeper-cluster.yaml;
  3. 执行启动集群结点命令;
  4. 应用连接zookeeper集群的连接串设置为localhost:12181,localhost:22181,localhost:32181,如spring.cloud. zookeeper.connect-string=localhost:12181,localhost:22181,localhost:32181.

运行效果

启动集群图
启动集群图

配置代码

zookeeper.yaml

version: "3.8"
services:zk-node1:image: zookeeper:3.9.3container_name: zk-node1hostname: zk-node1  # 主机名用于集群通信environment:ZOO_MY_ID: 1  # 节点唯一标识:ml-citation{ref="3,4" data="citationList"}ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"ports:- "12181:2181"    # 客户端连接端口- "12888:2888"    # 集群节点通信端口- "13888:3888"    # 集群选举端口networks:- zk-cluster-netzk-node2:image: zookeeper:3.9.3container_name: zk-node2hostname: zk-node2environment:ZOO_MY_ID: 2ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"ports:- "22181:2181"    # 客户端连接端口- "22888:2888"    # 集群节点通信端口- "23888:3888"    # 集群选举端口networks:- zk-cluster-netzk-node3:image: zookeeper:3.9.3container_name: zk-node3hostname: zk-node3environment:ZOO_MY_ID: 3ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"ports:- "32181:2181"    # 客户端连接端口- "32888:2888"    # 集群节点通信端口- "33888:3888"    # 集群选举端口networks:- zk-cluster-net
networks:zk-cluster-net:driver: bridge  # 统一网络确保容器互联:ml-citation{ref="4,7" data="citationList"}

README.md

### zk集群启动
```shell
docker-compose -f zookeeper-cluster.yaml up -d
```
### zk集群停止
```shell
docker-compose -f zookeeper-cluster.yaml down
```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依框架Consul微服务版本

1、最近使用若依前后端分离框架改造为Consul微服务版本 在这里分享出来供大家参考 # Consul微服务配置参数已经放置/bin/Consul微服务配置目录 仓库地址: gitee:https://gitee.com/zlxls/Ruoyi-Consul-Cloud.git gitcode:https://gitcode.c…

BOM知识点

BOM(Browser Object Model)即浏览器对象模型,是用于访问和操作浏览器窗口的编程接口。以下是一些BOM的知识点总结: 核心对象 • window:BOM的核心对象,代表浏览器窗口。它也是全局对象,所有全…

什么是迁移学习(Transfer Learning)?

什么是迁移学习(Transfer Learning)? 一句话概括 迁移学习研究如何把一个源领域(source domain)/源任务(source task)中获得的知识迁移到目标领域(target domain)/目标任…

[创业之路-362]:企业战略管理案例分析-3-战略制定-华为使命、愿景、价值观的演变过程

一、华为使命、愿景、价值观的演变过程 1、创业初期(1987 - 1994 年):生存导向,文化萌芽 使命愿景雏形:1994年华为提出“10年之后,世界通信行业三分天下,华为将占一份”的宏伟梦想&#xff0c…

Python黑魔法与底层原理揭秘:突破语言边界的深度探索

Python黑魔法与底层原理揭秘:突破语言边界的深度探索 开篇:超越表面的Python Python常被称为"胶水语言",但其真正的威力在于对底层的高度可控性。本文将揭示那些鲜为人知的Python黑魔法,带你深入CPython实现层面&…

Es的text和keyword类型以及如何修改类型

昨天同事触发定时任务发现es相关服务报了一个序列化问题, 今天早上捕获异常将异常堆栈全部打出来看,才发现是聚合的字段不是keyword类型的问题。 到kibbna命令行执行也是一样的错误 使用 /_mapping查看索引的字段类型,才发现userUniqueid是te…

大语言模型 07 - 从0开始训练GPT 0.25B参数量 - MiniMind 实机训练 预训练 监督微调

写在前面 GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,…

【Android】从Choreographer到UI渲染(二)

【Android】从Choreographer到UI渲染(二) Google 在 2012 年推出的 Project Butter(黄油计划)是 Android 系统发展史上的重要里程碑,旨在解决长期存在的 UI 卡顿、响应延迟等问题,提升用户体验。 在 Androi…

mvc-ioc实现

IOC 1)耦合/依赖 依赖,是谁离不开谁 就比如上诉的Controller层必须依赖于Service层,Service层依赖于Dao 在软件系统中,层与层之间存在依赖。我们称之为耦合 我们系统架构或者设计的一个原则是&#xff…

MATLAB安装常见问题解决方案

目前新版本的matlab安装往往需要十几G的本地安装容量,例如matlab2022b、matlab2023b, 首先就是要保证本地硬盘空间足够大,如果没有足够的本地内存空间,那么可以尝试释放本地硬盘空间,或者安装所需内存空间较小的旧版本的matlab&am…

程序代码篇---python获取http界面上按钮或者数据输入

文章目录 前言 前言 本文简单接受了python获取http界面上按钮或者数据输入

深入理解 Cortex-M3 特殊寄存器

在上一篇文章中分享了 Cortex-M3 内核寄存器组的相关知识,实际上除了内核寄存器组外,CM3 处理器中还存在多个特殊寄存器,它们分别为 程序状态寄存器,中断/异常屏蔽寄存器 和 控制寄存器。 需要注意的是,特殊寄存器未经…

标准库、HAl库和LL库(PC13初始化)

标准库 (Standard Peripheral Library) c #include "stm32f10x.h"void GPIO_Init_PC13(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Pin GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode GPIO_…

基于开源链动2+1模式AI智能名片S2B2C商城小程序的低集中度市场运营策略研究

摘要:本文聚焦于行业市场集中度问题,探讨在低集中度市场中,如何利用开源链动21模式AI智能名片S2B2C商城小程序开展有效运营。分析了高集中度市场的竞争劣势,阐述了开源链动21模式、AI智能名片以及S2B2C商城小程序的功能特点及其在…

一文读懂-嵌入式Ubuntu平台

现在直接在一些嵌入式Soc上移植ubuntu来用到产品上,刚开始感觉还挺臃肿的,后来细聊了下感觉还是有一定的优势。 ubuntu相信大家在熟悉不过了,几乎无处不在,小到咖啡机,大到火星车,为什么ubuntu如此广泛&am…

箭头函数及其与普通函数区别的详细解释

一、箭头函数的基本特性 语法简洁性 箭头函数使用 > 符号定义,省略 function 关键字,适合快速定义匿名函数或简单表达式。 // 普通函数 function sum(a, b) { return a b; } // 箭头函数 const sum (a, b) > a b;若函数体为单行表达式&#x…

el-scrollbar 获取滚动条高度 并将滚动条保持在低端

首先我们用ref绑定一个 scrollbar <el-scrollbar style"height: 100%;" ref"chatScrollRef" scroll"scrollTest">用scroll触发滚动事件&#xff0c;一路滚到最底下&#xff0c;观察三个属性 const scrollTest ({scrollTop}) > {conso…

MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题

项目场景&#xff1a; 使用Mybatis-plus的updateById去更新实体类的时候&#xff0c;如果设置实体类中的某个字段为null&#xff0c;会导致为null的字段不做更新操作 问题描述 updateById方法 不会更新null值 解决方案&#xff1a; 在字段上加上 TableField(updateStrategy …

STC89C52单片机模拟实现洗衣机控制 Proteus仿真

用直流电机转动模拟洗衣机。要求有弱洗、普通洗、强洗三种模式,可通过按键选择相应模式。要求能够设置洗衣时长,可以通过按键选择15、30、45、60、90分钟。定时结束时蜂鸣器报警提示。LCD显示相关信息。 基本功能描述用单片机模拟实现洗衣机控制。用直流电机转动模拟洗衣机运…

游戏引擎学习第290天:完成分离渲染

game_sim_region.cpp&#xff1a;在BeginSim中移除EntityOverlapsRectangle调用 现在我们接近一个关键点&#xff0c;虽然还没完全结束&#xff0c;但我们已经把所有东西迁移到了一个新概念上——即那些临时创建的控制器结构&#xff0c;称为“脑”&#xff08;brains&#xf…