【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.pswp.cn/web/80451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80451.shtml
英文地址,請注明出處:http://en.pswp.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…