etcd集群成员管理:如何高效地添加、删除与更新节点
创作时间:
作者:
@小白创作中心
etcd集群成员管理:如何高效地添加、删除与更新节点
引用
CSDN
1.
https://blog.csdn.net/zhangshenglu1/article/details/144721946
etcd是一个高可用的分布式键值存储,广泛应用于存储服务发现、配置管理等场景。为了确保集群的稳定性和可扩展性,管理成员节点的添加、删除和更新变得尤为重要。本文将指导您如何在etcd集群中处理成员管理,帮助您高效地维护集群节点。
etcd集群成员管理概述
etcd集群由多个节点组成,每个节点都可以通过一个peer URL与其他节点通信。当您需要对集群中的节点进行动态扩展或维护时,etcd 提供了丰富的命令来添加、删除和更新节点的成员身份。通过这些操作,您可以实现集群的高可用性和扩展性。
准备工作(如果有对应的ETCD集群则跳过该步骤)
在操作集群之前,我们需要确保有一个正在运行的etcd集群。如果没有,您可以参考以下命令启动一个3节点的etcd集群:
Windows环境
@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.etcd3
REM 启动第一个 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 debug
REM 启动第二个 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 debug
REM 启动第三个 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 debug
echo All etcd instances started with debug logging. Press any key to exit...
pause
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实例已启动,正在运行中..."
获取集群成员信息
在对成员进行操作之前,首先需要获取当前集群成员的列表。使用以下命令:
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。
删除集群成员
如果某个节点需要从集群中移除,可以通过以下步骤进行操作:
- 获取需要删除的节点ID(如上一步获取成员列表时看到的)。
- 使用
member remove命令将其移除。
例如,删除节点ID为8231876619f7abe6的成员:
etcdctl --endpoints=http://127.0.0.1:2379,http://127.0.0.1:2383,http://127.0.0.1:2384 member remove 8231876619f7abe6
添加新成员
如果您希望向集群中添加一个新的节点(例如节点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。
启动新节点
在新节点添加到集群后,需要启动该节点。注意,此时需要使用--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
注意事项
- 节点数据清理:在将节点移除后,如果您计划重新使用该节点,确保清理节点的旧数据,以避免出现不一致的状态。
- 集群状态:启动新节点时,
--initial-cluster-state existing标志至关重要,确保新节点不会初始化一个新的集群,而是加入到现有集群。 - 高可用性:在生产环境中操作节点时,务必确保操作不会影响集群的高可用性,可以考虑在操作之前进行备份。
总结
通过以上步骤,您可以轻松地管理etcd集群中的节点成员,无论是添加、删除还是更新。etcd提供了强大的命令行工具,可以帮助我们维护一个高效且稳定的集群。希望本文能够帮助您更好地理解etcd集群成员管理的基本操作。
热门推荐
保罗-乔治遗憾拒绝与科比训练,却在精神传承中找到动力
数学,永远不会是冰冷的公式,它是一场游戏,一首尚未写完的诗
水下机器人:海洋探索的未来趋势与应用前景
电脑网络适配器感叹号:原因与解决方案
我的世界手机版服务器建立及管理完全指南
【男性脱发原因】改善脱发问题,需从日常护理入手
从极越汽车崩盘看行业发展 稳扎稳打才能迎来全新发展机遇
世界帕金森病日:帕金森病人自我管理的小窍门
2024年抗HIV药物头号企业市场格局分析:吉利德、GSK
电子行业景气复苏 半导体自主可控初现成效
一文看懂反坦克地雷(全解析)
朊病毒知识全解析:症状、防治与日常生活对策
短视频工作室必读:日更千条原创视频批量生产方案
打造更高能级“向西开放”平台——中欧班列西安集结中心建设观察
CUDA C++ 编程指南
捷达VS5油耗实测:加95号油,油耗表现如何?
直系亲属的范围及其法律意义
调理肠胃,从中医智慧开始——肠胃炎的中医治疗与养生之道
揭秘肾积水:原因、治疗方法及日常护理
环境科学与无人船技术的融合——以海洋生态保护为例
左姓的渊源:从春秋官职到家族姓氏
哈姆雷特的独白:生存、毁灭与悲剧艺术
如何驾驶手动挡汽车
免疫力下降致面瘫,中医治疗、康复、预防有妙招
敦煌——丝路艺术的现代见证人|纪念常书鸿诞辰120周年
什么是“九族”?什么是“五服”?都有哪些人?来,一起涨知识了
驱动电机液冷冷却系统详解
vPC技术详解:概念、优势与部署场景
欧洲顶级俱乐部转会策略深度解析:从市场洞察到品牌效应
解决鼠标失灵问题的实用技巧与步骤指南