微服务实战系列之玩转Docker(十六)

news2024/11/5 6:12:05

导览

  • 前言
  • 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-node110.11.12.44:2380
etcd-node210.11.12.45:2380
etcd-node310.11.12.46:2380

同时为便于管理,博主选择采用docker compose进行容器编排,以下是每个节点的docker-compose.yml基础配置内容。

2.1 etcd-node1

services:
  etcd-node1:
    image: bitnami/etcd:3
    container_name: etcd-node1
    environment:
      - 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=new
    restart: always
    ports:
      - 2380:2380
      - 2379:2379
    volumes:
      - /app/etcd/data:/bitnami/etcd/data

2.2 etcd-node2

services:
  etcd-node2:
    image: bitnami/etcd:3
    container_name: etcd-node2
    environment:
      - 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=new
    restart: always
    ports:
      - 2380:2380
      - 2379:2379
    volumes:
      - /app/etcd/data:/bitnami/etcd/data

2.3 etcd-node3

services:
  etcd-node3:
    image: bitnami/etcd:3
    container_name: etcd-node3
    environment:
      - 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=new
    restart: always
    ports:
      - 2380:2380
      - 2379:2379
    volumes:
      - /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(一)
微服务实战系列之云原生

在这里插入图片描述

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

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

相关文章

Rust 力扣 - 1423. 可获得的最大点数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 题目所求结果存在下述等式 可获得的最大点数 所有卡牌的点数之和 - 长度为(卡牌数量 - k)的窗口的点数之和的最小值 我们遍历长度为(卡牌数量 - k)的窗口&#…

flink 内存配置(二):设置TaskManager内存

TaskManager在Flink中运行用户代码。根据需要配置内存使用,可以极大地减少Flink的资源占用,提高作业的稳定性。 注意下面的讲解适用于TaskManager 1.10之后的版本。与JobManager进程的内存模型相比,TaskManager内存组件具有类似但更复杂的结构…

配置DDNS结合光猫路由器实现外网映射

配置ddns结合光猫路由器实现外网映射 一、实现思路 首先需要去获取一个动态域名(文章不再赘述,重点去介绍具体实现),用作后面与与公网绑定。然后需要在光猫和路由器上去做配置,同时确保路由器有公网IP,最…

如何在BSV区块链上实现可验证AI

​​发表时间:2024年10月2日 nChain的顶尖专家们已经找到并成功测试了一种方法:通过区块链技术来验证AI(人工智能)系统的输出结果。这种方法可以确保AI模型既按照规范运行,避免严重错误,遵守诸如公平、透明…

华为HarmonyOS打造开放、合规的广告生态 - 激励广告

场景介绍 激励广告是一种全屏幕的视频广告,用户可以选择点击观看,以换取相应奖励。 接口说明 接口名 描述 loadAd(adParam: AdRequestParams, adOptions: AdOptions, listener: AdLoadListener): void 请求单广告位广告,通过AdRequestPar…

easyui +vue v-slot 注意事项

https://www.jeasyui.com/demo-vue/main/index.php?pluginDataGrid&themematerial-teal&dirltr&pitemCheckBox%20Selection&sortasc 接口说明 <template><div><h2>Checkbox Selection</h2><DataGrid :data"data" style&…

unity搭建场景学习

unity搭建场景学习 创建场景创建gameobject创建材质&#xff0c;用于给gameobject上色拖拽材质球上色上色原理设置多个材质方式设置贴图的方式 效果设置光滑度一些预览设置菜单渲染模型与碰撞模型网格渲染参数1. materials(材质)2. lighting(光照)3. reflection probes(反射探针…

软件加密与授权管理:构建安全高效的软件使用体系

“软件加密与授权管理&#xff1a;构建安全高效的软件使用体系”是一个全面且深入的议题&#xff0c;以下是对该议题的详细探讨&#xff1a; 一、软件加密的概念与重要性 软件加密是指为软件添加保护措施&#xff0c;以防止其被盗版或非法复制。这一技术站在软件开发者的角度&a…

【VScode】中文版ChatGPT编程工具-CodeMoss!教程+示例+快捷键

文章目录 1. 多模型选择2. 编辑快捷键3. 历史记录收藏 CodeMoss使用教程1. 安装CodeMoss插件2. 配置AI模型3. 使用快捷键4. 进行代码优化与解释5. 收藏历史记录 总结与展望 在当今快速发展的编程世界中&#xff0c;开发者们面临着越来越多的挑战。如何提高编程效率&#xff0c;…

宝塔Linux面板安装PHP扩展失败报wget: unable to resolve host address ‘download.bt.cn’

一、问题&#xff1a; 当使用宝塔面板安装PHP扩展失败出现如下错误时 Resolving download.bt.cn(download.bt.cn)...failed: Connection timed out. wget: unable toresolve host address download.bt.cn’ 二、解决&#xff1a; 第一步&#xff1a;如下命令执行拿到返回的I…

Scrapy源码解析:DownloadHandlers设计与解析

1、源码解析 代码路径&#xff1a;scrapy/core/downloader/__init__.py 详细代码解析&#xff0c;请看代码注释 """Download handlers for different schemes"""import logging from typing import TYPE_CHECKING, Any, Callable, Dict, Gener…

【C++】对左值引用右值引用的深入理解(右值引用与移动语义)

&#x1f308; 个人主页&#xff1a;谁在夜里看海. &#x1f525; 个人专栏&#xff1a;《C系列》《Linux系列》 ⛰️ 天高地阔&#xff0c;欲往观之。 ​ 目录 前言&#xff1a;对引用的底层理解 一、左值与右值 提问&#xff1a;左值在左&#xff0c;右值在右&#xff1f;…

docker下迁移elasticsearch的问题与解决方案

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 docker下迁移elasticsearch的问题与解决方案 数据挂载报错解决权限问题节点故障 直接上图&#x…

1.3 初探OpenCV贡献库

OpenCV贡献库&#xff08;opencv_contrib&#xff09;是OpenCV的一个扩展库&#xff0c;由社区开发&#xff0c;包含更多视觉应用和受专利保护的算法。它提供最新研究算法、扩展功能和社区支持。可以通过pip安装或手动编译。

太空旅游:科技能否让星辰大海变为现实?

内容概要 在这个快速变化的时代&#xff0c;太空旅游成为了一个让人热血沸腾的话题。想象一下&#xff0c;坐在一颗漂浮的太空舱里&#xff0c;手中端着饮料&#xff0c;眺望着无尽的星辰大海&#xff0c;简直就像科幻电影中的情节一样。不过&#xff0c;这不仅仅是一个空洞的…

智能提醒助理系列-jdk8升级到21,springboot2.3升级到3.3【性能篇】

本系列文章记录“智能提醒助理”产品建设历程&#xff0c;记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍技术栈升级后的切换方案以及性能提升。 一、需求出发点 智能提醒小程序 当前使用的是jdk8&#xff0c;springboot2.3,升级到jdk21和springboot3.3 学习新知识的同时…

ROS2入门学习——ROS在机器人中的运行

一、入门级基础平台TurtleBot TurtleBot 是 ROS 中重要且资源丰富的机器人之一&#xff0c;特别适合入门级机器人爱好者提供基础平台。用户可以直接利用其自带的软硬件&#xff0c;专注于应用程序的开发。TurtleBot 随着 ROS 的发展&#xff0c;一直处于开发前沿。 TurtleBot…

cuda、pytorch-gpu安装踩坑!!!

前提&#xff1a;已经安装了acanoda cuda11.6下载 直接搜索cuda11.6 acanoda操作 python版本3.9 conda create -n pytorch python3.9conda activate pytorch安装Pytorch-gpu版本等包 要使用pip安装&#xff0c;cu116cuda11.6版本 pip install torch1.13.1cu116 torchvi…

二分法查找(c基础)

二分法查找一个有序数组中是否有某个数 大家看了可以自己写一下 &#xff08; 要用知识点 数组 while循环 scanf 函数 printf函数 &#xff09; //用二分法查找 #include<stdio.h> int main() {char arr[] { 1,2,3,4,5,6,7,8,9,10 };int sz sizeof(arr) / size…

实现图书管理系统

1. 图书管理系统菜单 如上图给用户选项 1. 管理员 2. 普通用户 2. 实现基本框架 右键点src&#xff0c;选择new&#xff0c;选择Package命名三个包 book operation user 1.先选择book包&#xff0c;new两个类 book bookList 在book类中定义书的基本属性&#xff0c;并重写…