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

devtools/2024/12/27 4:38:36/

在这里插入图片描述

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集群成员管理的基本操作。


http://www.ppmy.cn/devtools/145714.html

相关文章

从零开始C++棋牌游戏开发之第三篇:游戏的界面布局设计

在游戏开发的旅途中,界面布局设计是一个充满创意和挑战的环节。对于棋牌类游戏而言,界面不仅仅是功能的载体,更是玩家与游戏互动的桥梁。一个清晰、直观且美观的界面可以显著提升游戏的用户体验。 在这篇文章中,我们将从功能需求…

游戏引擎学习第56天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们正在设计一个从零开始开发的游戏引擎,目标是不使用任何现成的库或引擎。在当前阶段,我们正专注于如何管理游戏世界中的实体布局,优化系统以便能够处理不同频率的实体更新。…

VUE前端实现防抖节流 Lodash

方法一:采用Lodash工具库 Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。 (1)采用终端导入Lodash库 $ npm i -g npm $ npm i --save lodash (2)应用 示例:搜索框输入防抖 在这个示例…

HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别

在智能手机、平板和其他智能设备日益智能化的今天,视觉识别技术成为提升用户体验和智能交互的重要手段。HarmonyOS NEXT通过基础视觉服务(HMS Core Vision)提供了一套强大的视觉识别功能,其中多目标识别作为其关键技术之一&#x…

【C++】qt编写烧录bin文件与纯C++烧录软件的区别和优缺

Qt 编写串口烧录 BIN 文件 和 纯 C 编写串口烧录 BIN 文件 的主要区别在于它们使用的 开发框架、功能特性 和 开发效率 的不同。以下从多个维度进行对比分析: 1. 开发效率和简洁性 维度Qt 编写串口烧录纯 C 编写串口烧录开发效率- 提供高层次封装(如 QS…

汽车配套行业的软件许可证资源管理实践与技术解析

行业背景 汽车配套行业的重要性及特点:涵盖零部件研发、制造和供应,涉及复杂的产业链和技术应用。 软件在汽车配套行业中的作用:从设计到制造,软件贯穿整个业务流程。 行业面临的挑战 高昂的软件许可成本:研发和生产…

AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python

支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用,今天我们用它来进行一次文本情感分析训练。 一、概念温习 支持向量机(SVM)是一种监督学习算法,广泛用于分类和回归问题。 它的核心思想是通过…

springboot 中添加TCP连接服务端

创建一个单独的Spring Bean来管理TCP服务器的生命周期。这样做的好处是将TCP服务器的逻辑与Spring Boot应用的启动逻辑分离,使得代码更加模块化和可维护。 以下是一个示例,展示了如何在Spring Boot应用中创建一个单独的TCP服务器Bean: 创建一…