当前位置: 首页 > news >正文

【ETCD】【实操篇(十五)】etcd集群成员管理:如何高效地添加、删除与更新节点

在这里插入图片描述

etcd 是一个高可用的分布式键值存储,广泛应用于存储服务发现、配置管理等场景。为了确保集群的稳定性和可扩展性,管理成员节点的添加、删除和更新变得尤为重要。本文将指导您如何在etcd集群中处理成员管理,帮助您高效地维护集群节点。

目录

        • 1. etcc集群成员管理概述
        • 2. 准备工作(如果有对应的ETCD集群则跳过该步骤)
        • 3. 获取集群成员信息
        • 4. 删除集群成员
        • 5. 添加新成员
        • 6. 启动新节点
        • 7. 注意事项
        • 8. 总结

1. etcc集群成员管理概述

etcd集群由多个节点组成,每个节点都可以通过一个peer URL与其他节点通信。当您需要对集群中的节点进行动态扩展或维护时,etcd 提供了丰富的命令来添加、删除和更新节点的成员身份。通过这些操作,您可以实现集群的高可用性和扩展性。

2. 准备工作(如果有对应的ETCD集群则跳过该步骤)

在操作集群之前,我们需要确保有一个正在运行的etcd集群。如果没有,您可以参考以下命令启动一个3节点的etcd集群:

@echo off
REM 设置通用参数
set TOKEN=token-01
set CLUSTER_STATE=new
set NAME_1=machine-1
set NAME_2=machine-2
set NAME_3=machine-3
set HOST_1=127.0.0.1
set HOST_2=127.0.0.1
set HOST_3=127.0.0.1
set PEER_PORT_1=2380
set PEER_PORT_2=2381
set PEER_PORT_3=2382
set CLIENT_PORT_1=2379
set CLIENT_PORT_2=2383
set CLIENT_PORT_3=2384
set CLUSTER=%NAME_1%=http://%HOST_1%:%PEER_PORT_1%,%NAME_2%=http://%HOST_2%:%PEER_PORT_2%,%NAME_3%=http://%HOST_3%:%PEER_PORT_3%REM 创建目录存储 etcd 数据
mkdir data.etcd1
mkdir data.etcd2
mkdir data.etcd3REM 启动第一个 etcd 实例
start etcd.exe --data-dir=data.etcd1 --name %NAME_1% ^--initial-advertise-peer-urls http://%HOST_1%:%PEER_PORT_1% --listen-peer-urls http://%HOST_1%:%PEER_PORT_1% ^--advertise-client-urls http://%HOST_1%:%CLIENT_PORT_1% --listen-client-urls http://%HOST_1%:%CLIENT_PORT_1% ^--initial-cluster %CLUSTER% ^--initial-cluster-state %CLUSTER_STATE% --initial-cluster-token %TOKEN% ^--log-level debugREM 启动第二个 etcd 实例
start etcd.exe --data-dir=data.etcd2 --name %NAME_2% ^--initial-advertise-peer-urls http://%HOST_2%:%PEER_PORT_2% --listen-peer-urls http://%HOST_2%:%PEER_PORT_2% ^--advertise-client-urls http://%HOST_2%:%CLIENT_PORT_2% --listen-client-urls http://%HOST_2%:%CLIENT_PORT_2% ^--initial-cluster %CLUSTER% ^--initial-cluster-state %CLUSTER_STATE% --initial-cluster-token %TOKEN% ^--log-level debugREM 启动第三个 etcd 实例
start etcd.exe --data-dir=data.etcd3 --name %NAME_3% ^--initial-advertise-peer-urls http://%HOST_3%:%PEER_PORT_3% --listen-peer-urls http://%HOST_3%:%PEER_PORT_3% ^--advertise-client-urls http://%HOST_3%:%CLIENT_PORT_3% --listen-client-urls http://%HOST_3%:%CLIENT_PORT_3% ^--initial-cluster %CLUSTER% ^--initial-cluster-state %CLUSTER_STATE% --initial-cluster-token %TOKEN% ^--log-level debugecho All etcd instances started with debug logging. Press any key to exit...
pause

运行以上脚本可以创建一个新的集群。

以上命令启动了3个etcd节点,并配置了初始集群。

如果是在linux上,可以使用下面的脚本进行创建。

#!/bin/bash# 设置通用参数
TOKEN="token-01"
CLUSTER_STATE="new"
NAME_1="machine-1"
NAME_2="machine-2"
NAME_3="machine-3"
HOST_1="127.0.0.1"
HOST_2="127.0.0.1"
HOST_3="127.0.0.1"
PEER_PORT_1=2380
PEER_PORT_2=2381
PEER_PORT_3=2382
CLIENT_PORT_1=2379
CLIENT_PORT_2=2383
CLIENT_PORT_3=2384
CLUSTER="${NAME_1}=http://${HOST_1}:${PEER_PORT_1},${NAME_2}=http://${HOST_2}:${PEER_PORT_2},${NAME_3}=http://${HOST_3}:${PEER_PORT_3}"# 创建目录存储 etcd 数据
mkdir -p /data/deploy/data.etcd1
mkdir -p /data/deploy/data.etcd2
mkdir -p /data/deploy/data.etcd3# 启动第一个 etcd 实例
nohup etcd --data-dir=/data/deploy/data.etcd1 --name ${NAME_1} \--initial-advertise-peer-urls http://${HOST_1}:${PEER_PORT_1} --listen-peer-urls http://${HOST_1}:${PEER_PORT_1} \--advertise-client-urls http://${HOST_1}:${CLIENT_PORT_1} --listen-client-urls http://${HOST_1}:${CLIENT_PORT_1} \--initial-cluster ${CLUSTER} \--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN} \--log-level debug &# 启动第二个 etcd 实例
nohup etcd --data-dir=/data/deploy/data.etcd2 --name ${NAME_2} \--initial-advertise-peer-urls http://${HOST_2}:${PEER_PORT_2} --listen-peer-urls http://${HOST_2}:${PEER_PORT_2} \--advertise-client-urls http://${HOST_2}:${CLIENT_PORT_2} --listen-client-urls http://${HOST_2}:${CLIENT_PORT_2} \--initial-cluster ${CLUSTER} \--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN} \--log-level debug &# 启动第三个 etcd 实例
nohup etcd --data-dir=/data/deploy/data.etcd3 --name ${NAME_3} \--initial-advertise-peer-urls http://${HOST_3}:${PEER_PORT_3} --listen-peer-urls http://${HOST_3}:${PEER_PORT_3} \--advertise-client-urls http://${HOST_3}:${CLIENT_PORT_3} --listen-client-urls http://${HOST_3}:${CLIENT_PORT_3} \--initial-cluster ${CLUSTER} \--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN} \--log-level debug &echo "所有etcd实例已启动,正在运行中..."
3. 获取集群成员信息

在对成员进行操作之前,首先需要获取当前集群成员的列表。使用以下命令:

etcdctl endpoint status --cluster -w table --endpoints=http://127.0.0.1:2379,http://127.0.0.1:2383,http://127.0.0.1:2384

这个命令会列出集群中所有成员的详细信息,包括每个节点的ID。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 删除集群成员

如果某个节点需要从集群中移除,可以通过以下步骤进行操作:

  1. 获取需要删除的节点ID(如上一步获取成员列表时看到的)。
  2. 使用member remove命令将其移除。

例如,删除节点ID为 bf9071f4639c75cc的成员:

etcdctl --endpoints=http://127.0.0.1:2379,http://127.0.0.1:2383,http://127.0.0.1:2384  member remove  8231876619f7abe6
5. 添加新成员

如果您希望向集群中添加一个新的节点(例如节点machine-4),可以使用member add命令:

etcdctl --endpoints=http://127.0.0.1:2383,http://127.0.0.1:2384 member add machine-4 --peer-urls=http://127.0.0.1:2386

此命令会将新节点加入集群,并为其指定peer URL。

6. 启动新节点

在新节点添加到集群后,需要启动该节点。注意,此时需要使用--initial-cluster-state existing标记,因为集群状态已经存在。启动命令如下:

etcd --data-dir=data.etcd4 --name machine-4 --initial-advertise-peer-urls http://127.0.0.1:2386 --listen-peer-urls http://127.0.0.1:2386 --advertise-client-urls http://127.0.0.1:2385 --listen-client-urls http://127.0.0.1:2385 --initial-cluster machine-1=http://127.0.0.1:2380,machine-4=http://127.0.0.1:2386,machine-2=http://127.0.0.1:2381 --initial-cluster-state existing --initial-cluster-token token-01

这个命令启动了新节点,并将其加入现有的etcd集群。

检查新的集群:

etcdctl endpoint status --cluster -w table --endpoints=http://127.0.0.1:2385,http://127.0.0.1:2383,http://127.0.0.1:2379
7. 注意事项
  1. 节点数据清理: 在将节点移除后,如果您计划重新使用该节点,确保清理节点的旧数据,以避免出现不一致的状态。
  2. 集群状态: 启动新节点时,--initial-cluster-state existing标志至关重要,确保新节点不会初始化一个新的集群,而是加入到现有集群。
  3. 高可用性: 在生产环境中操作节点时,务必确保操作不会影响集群的高可用性,可以考虑在操作之前进行备份。
8. 总结

通过以上步骤,您可以轻松地管理etcd集群中的节点成员,无论是添加、删除还是更新。etcd提供了强大的命令行工具,可以帮助我们维护一个高效且稳定的集群。希望本文能够帮助您更好地理解etcd集群成员管理的基本操作。

相关文章:

【ETCD】【实操篇(十五)】etcd集群成员管理:如何高效地添加、删除与更新节点

etcd 是一个高可用的分布式键值存储,广泛应用于存储服务发现、配置管理等场景。为了确保集群的稳定性和可扩展性,管理成员节点的添加、删除和更新变得尤为重要。本文将指导您如何在etcd集群中处理成员管理,帮助您高效地维护集群节点。 目录 …...

灵当CRM uploadfile.php 文件上传致RCE漏洞复现

0x01 产品简介 灵当CRM是一款专为中小企业打造的智能客户关系管理工具,由上海灵当信息科技有限公司开发并运营。广泛应用于金融、教育、医疗、IT服务、房地产等多个行业领域,帮助企业实现客户个性化管理需求,提升企业竞争力。无论是新客户开拓、老客户维护,还是销售过程管…...

Linux下Java通过JNI调用C++

以下为Demo流程 1.创建Java文件 public class HelloWord {// 声明本地方法public native void sayHello();static {// 加载本地库System.loadLibrary("hello");}public static void main(String[] args) {new HelloWord().sayHello();} } 2.编译生成.h头文件 在H…...

解决:excel鼠标滚动幅度太大如何调节?

在excel里为什么滚动一次跳过很多行呢?很不方便。。。 1. 问题: 一开始单元格从第1行开始: 鼠标轻轻滚动一下后,直接跳到第4行: 鼠标在word和浏览器里都是好好的。在excel里为什么不是滚动一次跳过一行呢&#xff…...

Git和SVN有什么区别?

Git和SVN是两种流行的版本控制系统,它们在实现方式、使用场景和特性上存在一些关键区别: 分布式 vs 集中式: Git:是分布式的版本控制系统。每个开发者都有一个完整的仓库副本,可以离线工作,并在本地进行所有…...

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。

【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。 文章目录 【深度学习基础|pip安装】pip 安装深度学习库常见错误及解决方案,附案例。1. 错…...

【ES6复习笔记】解构赋值(2)

介绍 解构赋值是一种非常方便的语法,可以让我们更简洁地从数组和对象中提取值,并且可以应用于很多实际开发场景中。 1. 数组的解构赋值 数组的解构赋值是按照一定模式从数组中提取值,然后对变量进行赋值。下面是一个例子: con…...

Dockerfile的用法

Dockerfile的用法 示例 `Dockerfile`使用 `Dockerfile` 创建 Docker 镜像`Dockerfile` 指令详解其他常用指令总结Dockerfile 是一个文本文件,包含了用于创建 Docker 镜像的一系列指令。这些指令描述了镜像的基础、所安装的软件、文件的复制、环境变量的设置以及其他配置。下面…...

Docker 安装mysql ,redis,nacos

一、Mysql 一、Docker安装Mysql 1、启动Docker 启动:sudo systemctl start dockerservice docker start 停止:systemctl stop docker 重启:systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 3.1.默认拉取最新版…...

Axure RP 11 详细保姆级安装教程(附安装包)

文章目录 初识:Axure RP 11 安装推荐配置 一、下载安装包 二、安装步骤 1.运行安装程序 2.安装向导,点击【Next】 3.许可协议,勾选【I accept the terms in the License Agreement】,然后点击【Next】 4.确认安装位置&…...

Java处理视频思路

1.首先实现断点续传功能。 断点续传实现思路: 前端对文件分块。前端使用多线程一块一块上传,上传前给服务端发一个消息校验该分块是否上传,如果已上传则不再上传。如果从该断点处断网了,下次上传时,前面的分块已经存在…...

攻防世界 robots

开启场景 根据提示访问/robots.txt,发现了 f1ag_1s_h3re.php 拼接访问 /f1ag_1s_h3re.php 发现了 flag cyberpeace{d8b7025ed93ed79d44f64e94f2527a17}...

DBeaver 咋手动配置sqlite 驱动

目录 1 问题2 下载 1 问题 离线安装了DBeaver 数据库软件,现在需要使用这个数据库打开sqlite 数据库,但是提示没有 驱动,那么我们就需要手动下载驱动,在这个软件里面导入 2 下载 https://repo1.maven.org/maven2/org/xerial/sql…...

RestTemplate关于https的使用详解

RestTemplate关于https的使用详解 一、restTemplate注入到bean里面。 Configuration public class RestTempleConfig {BeanPrimarypublic RestTemplate restTemplate() {return new RestTemplate();}/*** https 请求的 restTemplate* return* throws Exception*/Beanpublic R…...

消息中间件RabbitMQ和kafka

一、RabbitMQ 1、RabbitMQ如何保证消息不丢失 2、RabbitMQ如何解决重复消费的问题 3、RabbitMQ中的死信交换机 4、RabbitMQ消息堆积怎么解决 5、RabbitMQ的高可用机制 二、kafka 1、kafka如何保证消息不丢失和重复消费的问题 2、kafka如何保证消费的顺序性 3、kafka高可用机制…...

学习C++:标识符命名规则

标识符命名规则: 作用:C规定给标识符(变量、常量)命名时,有一套自己的规则 标识符不能是关键字 标识符只能由字母、数字、下划线组成 第一个字符必须为字母或下划线 标识符中字母区分大小写 (给标识符命…...

Bluetooth Spec【0】蓝牙核心架构

蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…...

AppInventor2 ClientSocketAI2Ext 拓展加强版 - 为App提供TCP客户端接入,可发送二进制数据

本文介绍App Inventor 2利用拓展实现TCP/IP协议接入功能,作为网络客户端连接TCP服务器,进行数据通信(发送/接收)。 // ClientSocketAI2Ext 拓展现状 // 原版拓展名称为:com.gmail.at.moicjarod.aix,是能用…...

Opencv之对图片的处理和运算

Opencv实现对图片的处理和修改 目录 Opencv实现对图片的处理和修改灰度图读取灰度图转换灰度图 RBG图单通道图方法一方法二 单通道图显色合并单通道图 图片截取图片打码图片组合缩放格式1格式2 图像运算图像ma[m:n,x:y]b[m1:n1,x1:y1] add加权运算 灰度图 读取灰度图 imread(‘…...

使用Excel制作通达信自定义“序列数据“

序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法:删掉没有用的数据(行与列)和股代码格式处理,是和外部数据的制作方法是相同,自己上面看历史博文。只需要判断一下,股代码跟随的…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言: 类加载器 1. …...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...