docker 部署etcd集群

news2024/12/27 13:01:47

docker 部署etcd集群

往期内容

  • ETCD 简介

前言

上期我们对于分布式kv存储中间件有了简单的认识,本期简单介绍docker-compose 部署etcd集群以及可视化工具 etcd Keeper


1-etcd docker 部署

看了很多网上部署的教程,要么超级简陋,要么搞一堆配置,也不说明每项配置的作用,让人一头雾水。所以在这里写一篇详细的博客,搭建出一个具体的 etcd 集群,并介绍每项的配置作用,镜像使用的是 bitnami/etcd。

环境准备

在此列出我自己的环境,相关版本应该问题不大,但还是建议各位道友同版本使用

Docker ====> version 24.0.7

Docker Compose ====> version: v2.12.2

bitnami/etcd ====> version: 3.5.5

如果你还没有安装 Docker 和 Docker Compose,请先参照网上的教程安装一下。

创建以下文件夹保存 etcd 相关的文件,我这里以 /home/docker/etcd 做为教程演示:

  • 创建 /home/docker/etcd 目录,保存所有 etcd 的相关文件;
  • 创建 /home/docker/etcd/data 目录,用作数据卷映射,持久化 etcd 数据到宿主机;
  • 创建 /home/docker/etcd/docker-compose.yml,用来编写我们的部署配置。

docker-compose 部署etcd单节点

部署

单节点部署比较简单,docker-compose.yml 如下所示:

version: "2.1"

services:
    etcd:
        image: "bitnami/etcd:3.5.5"
        container_name: "etcd"
        # 总是重启
        restart: "always"
        ports:
            - 2379:2379
        environment:
            # 时区设置
            - TZ=Asia/Shanghai
            # 允许无认证访问
            - ALLOW_NONE_AUTHENTICATION=yes
            # etcd 客户端访问URL
            - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379
        volumes:
            # 将数据映射到宿主机
            - etcd_data:/bitnami/etcd
volumes:
    etcd_data:
        driver: local
        driver_opts:
            type: "none"
            o: "bind"
            device: "/home/docker/etcd/data"

单机版部署比较容易,在docker-compose.yml所在文件夹下执行命令:docker-compose up -d 命令,此时在浏览器访问 http://IP:2379/version,即可看到我们的版本号:

在这里插入图片描述

此时,数据文件也会映射到 /home/docker/etcd/data 目录下,可以自行进去查看一下。

使用

执行如下命令,进入 etcd 容器:

docker exec -it etcd bash

创建一个key:

etcdctl put /k v

查看一个key:

etcdctl get /k

删除一个key:

etcdctl del /k

docker-compose 部署etcd集群

部署

集群部署较之单点配置,多了很多配置,请查看 docker-compose.yml:

version: "2.1"
services:
  etcd1:
        image: "bitnami/etcd:3.5.5"
        container_name: "etcd1"
        restart: "always"
        ports:
            - 12379:12379
        environment:
            - TZ=Asia/Shanghai
            # 允许无认证访问
            - ALLOW_NONE_AUTHENTICATION=yes
            # 名称
            - ETCD_NAME=etcd1
            # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
            - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380
            # 用于监听伙伴通讯的URL列表
            - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
            # 用于监听客户端通讯的URL列表
            - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:12379
            # 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
            - ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
            # 列出这个成员的客户端URL,通告给集群中的其他成员
            - ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:12379
            # 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
            - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
            # 初始化集群状态,这里写 new 就行
            - ETCD_INITIAL_CLUSTER_STATE=new

  etcd2:
        image: "bitnami/etcd:3.5.5"
        container_name: "etcd2"
        restart: "always"
        ports:
            - 22379:22379
        environment:
            - TZ=Asia/Shanghai
            # 允许无认证访问
            - ALLOW_NONE_AUTHENTICATION=yes
             # 名称
            - ETCD_NAME=etcd2
            # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
            - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
            # 用于监听伙伴通讯的URL列表
            - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
            # 用于监听客户端通讯的URL列表
            - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:22379
            # 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
            - ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
            # 列出这个成员的客户端URL,通告给集群中的其他成员
            - ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:22379
            # 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
            - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
            # 初始化集群状态,这里写 new 就行
            - ETCD_INITIAL_CLUSTER_STATE=new

  etcd3:
        image: "bitnami/etcd:3.5.5"
        container_name: "etcd3"
        restart: "always"
        ports:
            - 32379:32379
        environment:
            - TZ=Asia/Shanghai
            # 允许无认证访问
            - ALLOW_NONE_AUTHENTICATION=yes
             # 名称
            - ETCD_NAME=etcd3
            # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
            - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
            # 用于监听伙伴通讯的URL列表
            - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
            # 用于监听客户端通讯的URL列表
            - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:32379
            # 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
            - ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
            # 列出这个成员的客户端URL,通告给集群中的其他成员
            - ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:32379
            # 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
            - ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
            # 初始化集群状态,这里写 new 就行
            - ETCD_INITIAL_CLUSTER_STATE=new  

看到这么长的配置不要怕,它们之中大部分都是重复的,你也可以先一个不看,复制下来,跑了再说。etcd 还有很多的环境配置,可以移步官方文档查看:etcd 配置手册。

我这里没有配置数据卷映射,如果想配置,参照单节点部署即可,运行 docker-compose up -d 命令,三个节点的 etcd 集群就可以启动了,三个节点的客户端端口分别是 12379、22379、32379,可以分别在浏览器使用 [http://IP:PORT/version] 查看它们的版本号。

在这里插入图片描述

使用
1. 验证集群同步数据

随便进入一台节点容器,我这里以 etcd1 进行举例子:

docker exec -it etcd1 bash

创建一个 key:

etcdctl --endpoints=localhost:12379 put  /t v

–endpoints 用于指定节点地址,我们这里在 etcd1 节点上创建了一个key。然后试试其他节点是否能获取到信息:

etcdctl --endpoints=etcd2:22379 get /t
etcdctl --endpoints=etcd3:32379 get /t

docker 同网段的容器之间可以通过别名互相访问,所以这里直接使用 etcd2/etcd3 就可以了,结果截图:

node1设置值

在这里插入图片描述

node2,node3 获取值

在这里插入图片描述
在这里插入图片描述

2-可视化工具docker部署

etcd的可视化工具非常之多,我搜了一下,一抓一大把

  1. Kstone:这是一个针对etcd的全方位运维解决方案,由腾讯云容器TKE团队发起,基于Kubernetes的云原生一站式etcd治理项目。Kstone提供集群管理(如关联已有集群、创建新集群等)、监控、备份、巡检、数据迁移、数据可视化、智能诊断等一系列功能。它支持注册现有集群和创建新的etcd集群,支持Prometheus监控,内置丰富的etcd Grafana面板图,支持多种数据备份方式和检查策略,内置web控制台和可视化查看etcd数据。
  2. etcdwp:这是一款免费且支持Macos桌面的etcd客户端桌面工具(Mac Version >= 11.0)。它支持对etcd单机版和集群版键值存储进行增删改查等操作,同时也增加了对etcd集群资源和成员的操作。
  3. Etcd Assistant:这是一个Etcd的可视化管理工具,GUI客户端。它支持多标签页,同时连接到多个集群,以漂亮的格式显示JSON、XML、MessagePack、十六进制等数据格式,支持浏览、创建、编辑、删除键,导出和导入数据,支持基于用户名和密码的基本身份验证、HTTPS客户端证书认证,支持HTTP和HTTPS连接,显示etcd集群及其节点的基本信息,管理租约、用户和角色等。
  4. Etcd-Browser:这是一款用来对etcd进行管理的图形化管理工具,在传统的etcd管理工具的功能基础上,添加了很多非常实用的新的特性。它可以监控所有Key,监控指定的前缀的Key,监控修订号在指定范围内的Key,监控版本号在变化范围的Key,监控Key在指定的Range范围内的多个维度的监控。

在此我们以etc keeper为例子进行docker-compose 的部署

evildecay/etcdkeeper v0.7.6

在上文的docker-compose.yml的基础上继续添加etc keeper的相关依赖

  docker-etcdkeeper:
    hostname: etcdkeeper
    image: evildecay/etcdkeeper:v0.7.6
    ports:
      - "8099:8080"
    networks:
      - etcd-net
networks:
 etcd-net:           # 网络
   driver: bridge    # 桥接模式

继续在docker-compose.yml所在文件夹下执行命令:docker-compose up -d 命令

然后访问配置的端口

在这里插入图片描述

点击etckeeper

在这里插入图片描述

默认的上述图中的地址是127.0.0.1,这儿一定要换成你自己的宿主机的ip地址,不要用默认的

在这里插入图片描述


至此,我们在docker中部署了etcd以及etcdkeeper

码字不易,希望大家能够一键三连🌝⭐🌟


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

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

相关文章

常见C语言基础说明二:位运算问题

一. 简介 前面一篇文章学习了 常见的 C语言基础题,文章如下: 常见C语言基础题说明一-CSDN博客 本文继续上一篇C语言基础题的学习。 二. C语言中 -> 位运算问题 1. 数据在计算机中的存储方式 当前的计算机系统使用的基本上是二进制系统&#…

设计模式之服务定位器模式

想象一下,你的Java应用是一座庞大的迷宫,里面藏着无数宝贵的服务宝藏,而你正需要一张精确的藏宝图来指引方向,迅速找到并利用这些宝藏。服务定位器模式,正是这样一张神奇的地图,它帮你动态定位并获取应用中…

前置知识储备

基本认知 什么是模式 在一定环境中解决一些问题的方案(通俗来说:特定环境中用固定的套路解决问题) 什么是设计模式 设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结 设计模式最终的目…

[windows系统安装/重装系统][step-1]U盘启动盘制作,微软官方纯净系统镜像下载

前言 U盘至少8GB吧我这刚好有个空闲的U盘8GB容量,制作启动盘且放入一个最新win10官方镜像足够 不是天天装系统,至少USB2.0 (我用的2.0的一个闲置U盘)即可,当然平时传资料什么的3.0会快些 U盘启动盘仅需要制作一次, U盘启动盘制…

[Linux][网络][TCP][五][延迟应答][捎带应答][面向字节流][TCP粘包问题][TCP的异常情况]详细讲解

目录 1.延迟应答2.捎带应答3.面向字节流4.TCP粘包问题1.什么是粘包?2.如何解决粘包问题?3.UDP是否存在粘包问题? 5.TCP的异常情况1.进程终止2.机器重启3.机器掉电/网线断开 6.TCP小结7.TCP/UDP对比8.理解listen的第二个参数0.铺垫1.理解 1.延…

标准引领 | 竹云参编《面向云计算的零信任体系》行业标准正式发布!

近日,中华人民共和国工业和信息化部公告2024年第4号文件正式发布行业标准:YD/T 4598.1-2024《面向云计算的零信任体系 第1部分:总体架构》(后简称“总体架构”),并于2024年7月1日起正式实施。 该标准汇集大…

2024.05.08作业

登陆部分代码 /登陆槽函数 void Widget::btn_clicked() {if(edit1->text()"Admin" && edit2->text()"123456"){//登陆成功对话框QMessageBox box(QMessageBox::Information,"信息对话框","登陆成功",QMessageBox::Ok,t…

SSH隧道可以做什么?

SSH隧道是SSH协议服务端提供的一种扩展功能,一般仅在linux服务器的SSH服务端中提供,其它的如交换机、防火墙等网络设备中,虽然支持SSH协议,但多数并不提供SSH隧道功能。 所以,在通过SSH协议连接远程设备时&#xff0c…

我独自升级崛起加速器推荐 我独自升级免费加速器

近期,《我独自升级》这部动画凭借爆棚的人气,在各大平台上掀起了一阵观看热潮,其影响力不容小觑。借此时机,韩国游戏巨头网石集团敏捷响应,顺势推出了同名游戏《我独自升级:ARISE》,为粉丝们搭建…

Vue3 路由入门

先安装路由 npm i vue-router //创建路由器 import { createRouter, createWebHashHistory } from vue-router//1.导入组件 import Home from /components/Home.vue import News from /components/News.vue//2.配置路由映射规则 const routes [{name: home,path: /home,compo…

【STM32】F405/407的模块总览图,记录查看

从STM32F405/407数据手册中提取,方便以后查看。主要是什么外设连接在什么总线上,时钟频率是多少。 TIM2、3、4、5、12、13、14在APB1上,最大频率84M TIM1、8、9、10、11在APB2上,最大频率168M

吴恩达机器学习笔记:第 9 周-16推荐系统(Recommender Systems) 16.5-16.6

目录 第 9 周 16、 推荐系统(Recommender Systems)16.5 向量化:低秩矩阵分解16.6 推行工作上的细节:均值归一化 第 9 周 16、 推荐系统(Recommender Systems) 16.5 向量化:低秩矩阵分解 在上几节视频中,我们谈到了协同过滤算法&…

网络层协议之 IP 协议

IP 协议格式 4 位版本:此处的取值只有两个,4(IPv4)和 6(IPv6),即指定 IP 协议的版本。 4 位首部长度:描述了 IP 报头多长,IP 报头是变长的,因为报头中的选项部…

windows驱动开发-inf文件(一)

驱动总是和inf文件相关,在WinDDK的时候,许多inf文件都需要开发工程师手动编写,不过,现在已经可以使用inx文件来生成inf文件了,它经常用于驱动的安装和卸载;不过,并不是所有的驱动都需要使用inf文…

【 npm详解:从入门到精通】

文章目录 npm详解:从入门到精通1. [npm](https://www.npmjs.com/)的安装2. npm的基础用法2.1 初始化项目2.2 安装依赖2.3 卸载依赖2.4 更新依赖 3. npm的高级用法3.1 运行脚本3.2 使用npm scope3.3 使用npm link 4. npm资源5. 使用npm进行依赖树分析和可视化6. npm进…

数据分析从入门到精通 1.numpy剑客修炼

会在某一瞬间突然明白,有些牢笼是自己给自己的 —— 24.5.5 一、数据分析秘笈介绍 1.什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律。使得数据的价值最大化 案例: 分析用户的消…

Redis 主从复制 初步认识

文章目录 定义拓扑拓扑定义单从拓扑多从拓扑树型拓扑 使用原理建立流程持续复制 定义 Redis主从复制技术的主要满足的需求是①数据恢复②负载均衡 ①数据恢复的理解:将数据同步到多个Redis服务器中,其中一个节点数据损毁,可通过复制其他节点…

Python | Leetcode Python题解之第77题组合

题目: 题解: class Solution:def combine(self, n: int, k: int) -> List[List[int]]:ans []path []def dfs(x):remain k - len(path)if not remain:ans.append(list(path))returnif n 1 - x > remain:dfs(x 1)path.append(x)dfs(x 1)path.…

【进程间通信】共享内存

文章目录 共享内存常用的接口指令利用命名管道实现同步机制总结 System V的IPC资源的生命周期都是随内核的。 共享内存 共享内存也是为了进程间进行通信的,因为进程间具有独立性,通信的本质是两个不同的进程看到同一份公共资源,所以共享内存…

MVC 过滤器

MVC 过滤器常用有4种 Action过滤器(IActionFilter) 》 行为过滤器Result过滤器 (IResultFilter)》 视图过滤器 或 结果过滤器Exception过滤器(IExceptionFilter)》 异常过滤器Authorization过滤器&#xf…