微服务实战系列之玩转Docker(十六)
导览
- 前言
- Q:基于容器云如何实现高可用的配置中心
- 一、etcd入门
- 1. 简介
- 2. 特点
- 二、etcd实践
- 1. 安装etcd镜像
- 2. 创建etcd集群
- 2.1 etcd-node1
- 2.2 etcd-node2
- 2.3 etcd-node3
- 3. 启动etcd集群
- 结语
- 系列回顾
前言
Docker,一个宠儿,一个云原生领域的“容器健将”,博主自开设玩转Docker系列后,从7月到本月,已足足持续更新了3个月。通过循序渐进、由浅入深的方式,以十五篇“精美实干”的Docker实践文章,为各位有兴趣、需帮助的盆友/同学提供了一定的示范或指南。
经过这个系列的创作,博主深切地感受到知识的整合与传递过程,不是堆砌拼凑,更不是左拉右拽。正如你在提交一个方案时,如果没有明确的论题、论据,那么大概率是一次无效的思考。
总之,还是一句话,理论联系实际是“技术ren”的看家本领。
话不多言归正传,最近有粉丝又找博主了,询问什么时候更博啊…甚为惭愧。因为博主虽然主攻Java领域,但是周边也得涉猎。为积极响应粉丝盆友的号召,玩转Docker系列今日再续新篇。那么该谈点什么呢?咱们边走边聊,Let’s go~

Q:基于容器云如何实现高可用的配置中心
先抛个问题给各位,当业务从单体(或单节点)切换到集群服务模式时,你最该考虑的是什么呢?
甲说:我打包一次,可以随处部署,这正是Docker可以解决的,妙极了;
乙说:业务模块切换为微服务,实现高可用,好想法;
丙说:集中发布、集中部署、集中运维,好主意;
其他人怎么说,咱们先不谈了。以上甲乙丙的想法,也可能是我们的想法,博主在这里不做评价,但是必须考虑的指标一定是配置中心支持高可用。
当前我们以微服务模式构建业务,以容器化思维部署应用,那么中心轴是什么?毫无疑问,一定是配置中心。配置中心至少发挥了以下3个作用:
- 服务注册
- 服务状态发布与订阅
- 服务发现
行文至此,各位盆友,脑海中有没有闪现出一个“名人”:动物园管理员——ZooKeeper。在博主的历史文章中,已对这位管理员做了较为详细的介绍,这里不再赘述(可以回去查找)。今天我们看看另外一个活跃于云平台(PaaS)的服务发现配置中心——etcd 吧。
一、etcd入门
1. 简介
什么是etcd ?
etcdis a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It gracefully handles leader elections during network partitions and can tolerate machine failure, even in the leader node。
一句话总结:etcd是一个高度一致的分布式key-value存储仓库,支持集群共享访问,并且可以优雅的实现集群内的选举,避免宕机。

它的名称由来也很有意思,是 etc(unix/linux的/etc目录)+ d(distribute系统)。简单理解就是一个支持分布式的“文件目录”。
2. 特点
根据官方提供的文档材料,博主进行简单描述,以供大家参考:

总结一下,即以下8个字:
- 简单:调用简单
- 安全:支持SSL机制
- 快速:读写效率高
- 可信:分布一致性强
二、etcd实践
对它有一个简单的认知后,博主先带着各位亲自体验一下,咱走着聊~
1. 安装etcd镜像
docker pull bitnami/etcd:3
效果如下:

2. 创建etcd集群
博主准备3个主机,用于模拟创建真实的etcd集群,每个节点定义如下:
| 节点名称 | 节点IP端口 |
|---|---|
| etcd-node1 | 10.11.12.44:2380 |
| etcd-node2 | 10.11.12.45:2380 |
| etcd-node3 | 10.11.12.46:2380 |
同时为便于管理,博主选择采用docker compose进行容器编排,以下是每个节点的docker-compose.yml基础配置内容。
2.1 etcd-node1
services:etcd-node1:image: bitnami/etcd:3container_name: etcd-node1environment:- TZ=Asia/Shanghai- ETCD_NAME=etcd-node1- ETCD_DATA_DIR=/bitnami/etcd/data- ALLOW_NONE_AUTHENTICATION=yes- ETCD_ADVERTISE_CLIENT_URLS=http://10.11.12.44:2379- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.11.12.44:2380- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster- ETCD_INITIAL_CLUSTER=etcd-node1=http://10.11.12.44:2380,etcd-node2=http://10.11.12.45:2380,etcd-node3=http://10.11.12.46:2380- ETCD_INITIAL_CLUSTER_STATE=newrestart: alwaysports:- 2380:2380- 2379:2379volumes:- /app/etcd/data:/bitnami/etcd/data
2.2 etcd-node2
services:etcd-node2:image: bitnami/etcd:3container_name: etcd-node2environment:- TZ=Asia/Shanghai- ETCD_NAME=etcd-node2- ETCD_DATA_DIR=/bitnami/etcd/data- ALLOW_NONE_AUTHENTICATION=yes- ETCD_ADVERTISE_CLIENT_URLS=http://10.11.12.45:2379- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.11.12.45:2380- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster- ETCD_INITIAL_CLUSTER=etcd-node1=http://10.11.12.44:2380,etcd-node2=http://10.11.12.45:2380,etcd-node3=http://10.11.12.46:2380- ETCD_INITIAL_CLUSTER_STATE=newrestart: alwaysports:- 2380:2380- 2379:2379volumes:- /app/etcd/data:/bitnami/etcd/data
2.3 etcd-node3
services:etcd-node3:image: bitnami/etcd:3container_name: etcd-node3environment:- TZ=Asia/Shanghai- ETCD_NAME=etcd-node3- ETCD_DATA_DIR=/bitnami/etcd/data- ALLOW_NONE_AUTHENTICATION=yes- ETCD_ADVERTISE_CLIENT_URLS=http://10.11.12.46:2379- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.11.12.46:2380- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster- ETCD_INITIAL_CLUSTER=etcd-node1=http://10.11.12.44:2380,etcd-node2=http://10.11.12.45:2380,etcd-node3=http://10.11.12.46:2380- ETCD_INITIAL_CLUSTER_STATE=newrestart: alwaysports:- 2380:2380- 2379:2379volumes:- /app/etcd/data:/bitnami/etcd/data
3. 启动etcd集群
启动集群很简单,分别在每个节点中执行如下命令:
# 后台启动
docker compose up -d
# 查看
docker compose ps
效果如下:

至此,一个基于docker的etcd集群创建完成了。
结语
这是一篇极简的etcd学习教程,重在实践。etcd是容器云中常用的分布式存储工具,在高可用高可靠等安全服务的前提下, 它能够为业务服务提供极高的数据稳定性和可靠性。
走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~
系列回顾
微服务实战系列之玩转Docker(十五)
微服务实战系列之玩转Docker(十四)
微服务实战系列之玩转Docker(十三)
微服务实战系列之玩转Docker(十二)
微服务实战系列之玩转Docker(十一)
微服务实战系列之玩转Docker(十)
微服务实战系列之玩转Docker(九)
微服务实战系列之玩转Docker(八)
微服务实战系列之玩转Docker(七)
微服务实战系列之玩转Docker(六)
微服务实战系列之玩转Docker(五)
微服务实战系列之玩转Docker(四)
微服务实战系列之玩转Docker(三)
微服务实战系列之玩转Docker(二)
微服务实战系列之玩转Docker(一)
微服务实战系列之云原生

相关文章:
微服务实战系列之玩转Docker(十六)
导览 前言Q:基于容器云如何实现高可用的配置中心一、etcd入门1. 简介2. 特点 二、etcd实践1. 安装etcd镜像2. 创建etcd集群2.1 etcd-node12.2 etcd-node22.3 etcd-node3 3. 启动etcd集群 结语系列回顾 前言 Docker,一个宠儿,一个云原生领域的…...
Solana 代币 2022 — Transfer Hook
从零到英雄的 Solana 代币 2022 — Transfer Hook Token 2022 计划引入了几项令人兴奋的扩展,增强了铸造和代币账户的功能。在这些功能中,我个人最喜欢的是Transfer Hook (转账钩子) 。 想象时间 让我们戴上想象的帽子…...
网络爬虫中的反爬虫技术:突破限制,获取数据
,网络爬虫已成为获取大量网络数据的重要工具。然而,随着爬虫技术的发展,许多网站也开始采用各种反爬虫措施来保护自己的数据。作为爬虫开发者,我们需要不断更新我们的技术,以应对这些反爬虫措施。本文将详细介绍一些常…...
【ROS2】cv_bridge:ROS图像消息和OpenCV的cv::Mat格式转换库
1、简述 cv_bridge可以实现ROS图像消息(sensor_msgs::msg::Image)和OpenCV的cv::Mat格式的转换。 cv_bridge支持各种常见的图像编码格式,包括JPEG、PNG、BMP等。 2、互转 1)cv::Mat转sensor_msgs::Image cv::Mat image; sensor_msgs::ImagePtr pMsg = cv_bridge::CvIma…...
【Web.路由】——URL生成
前几篇文章介绍了路由的相关知识,包括原理,模板和约束。围绕的一个点就是URL,那么URL是如何生成的呢? 在 ASP.NET CORE应用程序中,使用了一个叫 LinkGenerator的链接生成器来生成URL的。 LinkGenerator是一个中间件组件…...
使用 Java 实现从搜索引擎批量下载图片
在进行一些数据收集、图像处理或研究工作时,我们可能需要从网络上批量下载高质量的图片。本文将介绍如何使用 Java 和 Jsoup 库,从搜索引擎中抓取图片,解析详情页并过滤出高质量图片。通过以下几个步骤,您可以自动化这个图片收集的…...
基于Matlab GUI的说话人识别测试平台
基于Matlab GUI的说话人识别测试平台 摘 要:为了克服在Matlab中语音处理工具箱的不足,设计出基于Matlab图形用户界面(GUI)的说话人识别测试平台。系统框架设计:特征参数采用美尔倒谱系数及差分美尔倒谱系数,…...
Leetcode 热题100之二叉树2
1.二叉树的层序遍历 思路分析:层序遍历是逐层从左到右访问二叉树的所有节点,通常可以使用广度优先搜索(BFS)来实现。我们可以使用一个队列(FIFO)来存储每一层的节点,并逐层访问。 初始化队列&a…...
<项目代码>YOLOv8 煤矸石识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
GA/T1400视图库平台EasyCVR视频分析设备平台微信H5小程序:智能视频监控的新篇章
GA/T1400视图库平台EasyCVR是一款综合性的视频管理工具,它兼容Windows、Linux(包括CentOS和Ubuntu)以及国产操作系统。这个平台不仅能够接入多种协议,还能将不同格式的视频数据统一转换为标准化的视频流,通过无需插件的…...
LVM与磁盘配额
文章目录 LVM与磁盘配额1 LVM概述1.1 名词解释1.2 LVM优势 2 LVM相关命令2.1 创建逻辑卷过程2.2 对逻辑卷扩容 3 磁盘配额3.1 磁盘配额的特点3.2 磁盘配额的命令3.3 查看配额使用情况3.4 验证磁盘配额3.5 实验 LVM与磁盘配额 1 LVM概述 1.1 名词解释 LVM:logical…...
xmuoj [蒙德里安的梦想] 状压dp个人笔记
本题是状压dp经典题目,很多人都是通过这一题开始对状压dp有所了解。 在进行讲解之前,我们先通过几个问答大致了解状压dp。 一、问答 1. 问题:什么是状压dp? 回答:状压dp即为状态压缩动态规划,何为状态压缩&#x…...
ubuntu22安装搜狗输入法不能输入中文
关闭Wayland 在/etc/gdm3/custom.conf文件内,取消注释WaylandEnable cat /etc/gdm3/custom.conf | grep WaylandEnable WaylandEnablefalse 其它步骤参考搜狗官方教程 https://pinyin.sogou.com/linux/help.php...
HtmlAgilityPack 操作详解
目录 1.安装 HtmlAgilityPack 2. 示例 HTML 3. 使用 HtmlAgilityPack 进行 HTML 解析与操作 4. 代码详解 1.加载html文档 2.选择元素 3. 提取属性 4.修改属性 5.常用的几种获取元素的 XPath 写法 HtmlAgilityPack: 轻量且高效,适合进行常规的 H…...
基于SSM医院门诊互联电子病历管理系统的设计
管理员账户功能包括:系统首页,个人中心,用户管理,医生管理,项目分类管理,项目信息管理,预约信息管理,检查信息管理,系统管理 用户账号功能包括:系统首页&…...
【读书笔记/深入理解K8S】集群网络
前言 上一章讲了集群控制器的一个大概的原理,这一章讲一下集群网络。网络是集群通信的载体,因为该书是阿里云团队出品的,所以也以阿里云的集群网络方案为例,其他云厂商的网络集群方案一般来说也大同小异。所以通过本章的学习&…...
【专有网络VPC】连接公网
通过ECS实例固定公网IP、弹性公网IP、NAT网关、负载均衡使专有网络中的云资源可以访问公网(Internet)或被公网访问。 概述 专有网络是您自定义的云上私有网络。专有网络中的云资源默认无法访问公网,也无法被公网访问。您可以通过配置ECS实例…...
论文 | Legal Prompt Engineering for Multilingual Legal Judgement Prediction
这篇文章探讨了如何利用“法律提示工程”(LPE)来指导大型语言模型(LLM)进行多语言法律判决预测(LJP)。主要内容: LPE 的概念: LPE 是指通过设计特定的提示(promp…...
国科安芯抗辐照MCU和CANFD芯片发布
国科安芯科技有限公司近期发布了两款重要的芯片产品:抗辐照MCU芯片和抗辐照CANFD芯片。这两款芯片的发布标志着国科安芯在高性能、高安全性芯片产品研制方面取得了显著进展,特别是在抗辐照技术领域。 1. 抗辐照MCU芯片:国科安芯研发的AS32A4…...
C++ 并发专题 - 无锁数据结构(概述)
一:概述: 无锁数据结构是一种在多线程环境中实现线程安全的结构,它允许多个线程在没有传统锁机制的情况下并发访问和修改数据。这种设计的目标是提高程序的性能和响应性,避免锁竞争和上下文切换的开销。 二:原理&…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
