etcd节点扩/缩容

news2024/12/19 12:22:37

etcd集群节点数量的说明

etcd 是基于 raft算法的分布式键值数据库,生来就为集群化而设计的,由于Raft算法在做决策时需要超半数节点的投票,所以etcd集群一般推荐奇数节点,如3、5或者7个节点构成一个集群。

对于具有 n 个成员的集群,仲裁为 (n/2)+1,ETCD 集群高可用允许 (N-1)/2 的节点出现临时性故障,3台etcd集群允许宕机一台;超过(N-1)/2节点,那集群将暂时不可用,直到节点个数恢复到超过 (N-1)/2.

etcd官方推荐3、5、7个节点,虽然raft算法也是半数以上投票才能有 leader,但奇数只是推荐,其实偶数也是可以的。如 2、4、8个节点。下面分情况说明:

  • 1 个节点:就是单实例,没有集群概念,不做讨论
  • 2 个节点:是集群,但没人会这么配,尽管双节点的etcd能启动,启动时也能有主,可以正常提供服务,但是一台挂掉之后,就选不出主了,因为存活的节点只能拿到1票,剩下的那台也无法提供服务,也就是双节点无容错能力,不要使用。
  • 3 节点:标准的3 节点etcd 集群只能容忍1台机器宕机,挂掉 1 台此时等于2个节点的情况,如果再挂 1 台,就和 2节点的情形一致了,一直选,一直增加任期,但就是选不出来,服务也就不可用了
  • 4 节点:最大容忍1 台 服务器宕机
  • 5 节点:最大容忍 2 台 服务器宕机
  • 6 节点:最大容忍 2 台 服务器宕机
  • 7和8个节点,最大容忍3台 服务器宕机

以此类推,9和10个节点,最大容忍4台 服务器宕机,总结以上可以得出结论:偶数节点虽然多了一台机器,但是容错能力是一样的,也就是说即便设置偶数节点,但没增加什么能力,还浪费了一台机器。同时etcd 是通过复制数据给所有节点来达到一致性,因此偶数的多一台机器增加不了性能,反而会拉低写入速度。

etcd集群节点数越多越好吗?

etcd 集群是一个 Raft Group,没有 shared。所以它的极限有两部分,一是单机的容量限制,内存和磁盘;二是网络开销,每次 Raft 操作需要所有节点参与,每一次写操作需要集群中大多数节点将日志落盘成功后,Leader 节点才能修改内部状态机,并将结果返回给客户端。因此节点越多性能越低,并且出错的概率会直线上升,并且是呈现线性的性能下降,所以扩展很多 etcd 节点是没有意义的,其次,如果etcd集群超过7个达到十几个几十个,那么,对运维来说也是一个不小的压力了,并且集群的配置什么的也会更加的复杂,而不是简单易用了。因此,etcd集群的数量一般是 3、5、7, 3 个是最低标准,7个也就是最高了。

扩容

1、新增节点部署etcd

部署新节点配置需要包含集群节点信息。

$ wget https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz
$ tar xvf etcd-v3.4.27-linux-amd64.tar.gz
$ mv etcd-v3.4.27-linux-amd64/etcd* /usr/local/bin/ ##复制etcd命令文件
$ mkdir -p /var/lib/etcd/   ##创建数据存放目录
$ mkdir -p /etc/etcd ##创建配置文件存放目录

配置:

$ cat /etc/etcd/etcd.conf
ETCD_NAME=etcd-4
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.19.128:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://10.0.19.128:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.220.43.206:2380"
ETCD_INITIAL_CLUSTER="etcd-2=https://10.0.19.129:2380,etcd-4=https://10.0.19.128:2380,etcd-1=https://10.0.19.127:2380,etcd-3=https://10.0.19.130:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.19.128:2379"

2、集群添加新节点

#add 增加新节点
[root@k8s-master1 etcd]# ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://10.0.19.127:2379" member add etcd-4 --peer-urls=https://10.0.19.128:2380
Member 1e1a799fc9c59a7b added to cluster 983f3fe4681bf439

#list  查看节点状态
[root@k8s-master1 etcd]#  ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://10.0.19.127:2379" member list --write-out=table
+------------------+-----------+--------+--------------------------+--------------------------+
|        ID        |  STATUS   |  NAME  |        PEER ADDRS        |       CLIENT ADDRS       |
+------------------+-----------+--------+--------------------------+--------------------------+
|   db5a2c24a8bf7a |   started | etcd-2 | https://10.0.19.129:2380 | https://10.0.19.129:2379 |
| 1e1a799fc9c59a7b |   started |        | https://10.0.19.128:2380 |                          |
| 318ff80236db7a1e |   started | etcd-1 | https://10.0.19.127:2380 | https://10.0.19.127:2379 |
| ee6138446f578296 |   started | etcd-3 | https://10.0.19.130:2380 | https://10.0.19.130:2379 |
+------------------+-----------+--------+--------------------------+--------------------------+

3、修改所有etcd配置并重启

[root@k8s-master1 etcd]# cat /etc/etcd/etcd.conf|grep ETCD_INITIAL_CLUSTER
ETCD_INITIAL_CLUSTER="etcd-2=https://10.0.19.129:2380,etcd-4=https://10.0.19.128:2380,etcd-1=https://10.0.19.127:2380,etcd-3=https://10.0.19.130:2380"
[root@k8s-master1 etcd]#  systemctl restart etcd
[root@k8s-master1 ~]# etcdctl  endpoint health
member db5a2c24a8bf7a is healthy: got healthy result from https://10.0.19.129:2379
member 1e1a799fc9c59a7b is healthy: got healthy result from https://10.0.19.128:2379
member 318ff80236db7a1e is healthy: got healthy result from https://10.0.19.127:2379
member ee6138446f578296 is healthy: got healthy result from https://10.0.19.130:2379

缩容

1、故障节点停服

在故障节点上停止etcd服务,以防止数据写入。

systemctl stop etcd

2 移除故障或不需要的成员

首先需要确定要移除的etcd成员的ID。可以通过以下命令查看集群成员列表:

etcdctl --endpoints=${existing-advertise-peer-urls} member list

然后,使用member remove命令移除指定的成员:

etcdctl --endpoints=${existing-advertise-peer-urls} member remove ${cluster_id}

这里的${cluster_id}是要移除的成员的ID。

3 确认成员已被移除

再次使用member list命令确认成员已被成功移除:

etcdctl --endpoints=${existing-advertise-peer-urls} member list

注意事项

  • 在进行缩容操作之前,确保已经备份了etcd集群的数据,以防数据丢失。
  • 缩容操作可能会影响集群的稳定性和性能,建议在业务低峰期进行。
  • 缩容后,需要确保集群中剩余的etcd成员能够正常通信,并且集群能够正常工作。

以上步骤提供了一个基本的etcd集群缩容流程。请根据具体环境和需求调整步骤和命令。

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

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

相关文章

蜂窝结构机械超材料

本研究设计了两种蜂窝结构机械超材料,具有可变的、依赖于拉伸或压缩的正负泊松比,并通过NOKOV度量动作捕捉验证了超材料的形变特性。 研究人员以《Mechanical Metamaterials with Discontinuous and Tension/Compression-Dependent Positive/Negative Po…

JAVA入门:使用IDE开发

JAVA入门:使用IDE开发 什么是IDE IDE(Integrated Development Environment,集成开发环境)是一种软件应用程序,它为程序开发、软件设计、项目管理等提供全面的设施。 简单来说就是简化开发过程,让编程更加方便。 IDEA 业界公认最好用的JAVA IDE 安装IDEA 打开IDEA官…

opencv # Sobel算子、Laplacian算子、Canny边缘检测、findContours、drawContours绘制轮廓、外接矩形

一、Sobel算子 案例图片 cv2.Sobel(src, ddepth, dx, dy, ksize3, scale1, delta0, borderTypeNone) 功能:用于计算图像梯度(gradient)的函数 参数: src: 输入图像,它应该是灰度图像。 ddepth: 输出图像的所需深度&am…

CEF127 编译指南 MacOS 篇 - 拉取 CEF 源码(五)

1. 引言 在完成了所有必要工具的安装和配置后,我们进入到获取 CEF 源码的阶段。对于 macOS 平台,CEF 的源码获取过程需要特别注意不同芯片架构(Intel 和 Apple Silicon)的区别以及版本管理。本文将详细介绍如何在 macOS 系统上获…

C# OpenCV机器视觉:图像平滑

在一个寒冷的冬日,阿强窝在家里的沙发上,裹着厚厚的毛毯,手里捧着一杯热巧克力。他的朋友们约他一起去滑雪,但阿强却更喜欢待在温暖的家中,享受这份宁静。突然,他的手机响了,是朋友们发来的滑雪…

基于quasar,只选择年度与月份的组件

为什么要做 quasar是个基于vue的强大的UI开发库,它提供了非常多的组件,比如日期选择。但是有些时候只需要选择到月份就可以了,quasar中没有,所以自己动手写了一个。因为对界面编程我不熟悉,所以,如果你有更…

02-3.python入门基础一操作符与表达式

接上章 : 02-2.python入门语法一变量与数据类型2 本文将深入介绍Python中的各种操作符,包括算术操作符、比较操作符、逻辑操作符等,并详细讲解如何使用这些操作符构建表达式。通过丰富的示例与详细的讲解,帮助读者全面掌握这一重要的基础知识…

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等

【自动化】Python SeleniumUtil 工具 【Python】使用Selenium 操作浏览器 自动化测试 记录-CSDN博客文章浏览阅读58次。文章浏览阅读42次。【附件】Selenium chromedriver 驱动及浏览器下载。【附件】Selenium chromedriver 驱动及浏览器下载-CSDN博客。3.安装Chrome浏览器驱动…

COMSOL快捷键及内置函数

文章目录 COMSOL快捷键使用COMSOL算子求最大值和最小值COMSOL内置函数3.1 解析函数3.2 插值函数3.3 分段函数3.4 高斯脉冲函数3.5 斜坡函数3.6 矩形函数3.7 波形函数3.8 随机函数3.9 Matlab函数3.10 SWITCH函数 COMSOL快捷键 Ctrl+/ 可快速打开预定义的物理量列表。…

QT绘制同心扇形

void ChartForm::paintEvent(QPaintEvent *) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置抗锯齿painter.save();// 设置无边框(不需要设置QPen,因为默认是不绘制边框的)QPen pen(Qt::NoPen);// QPen pen…

最大质因子序列

最大质因子序列 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 任意输入两个正整数m, n (1 < m < n < 5000)&#xff0c;依次输出m到n之间每个数的最大质因子&#xff08;包括m和n&#xff1b;…

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

AI芯片常见概念

文章目录 AI芯片常见概念前言常见概念AI芯片分类按照芯片的技术架构分GPU半定制化的 FPGA全定制化 ASIC神经拟态芯片 按应用场景分训练卡推理卡 按部署位置分国产AI卡资料汇总 封装相关Chiplet技术3DIC三星多芯片集成联盟&#xff08;Samsung Multi-Die Integration Alliance&a…

Fiddler(抓包测试工具)下载安装步骤

目录 介绍 主要功能&#xff1a; 使用场景&#xff1a; 一、下载 二、安装 ​编辑三、测试 介绍 Fiddler 是一个强大的网络调试工具&#xff0c;用于捕获和分析 HTTP/HTTPS 请求与响应。它通过代理服务器捕获流量&#xff0c;帮助开发者调试 Web 应用、API&#xff0c;进…

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…

gorm源码解析(四):事务,预编译

文章目录 前言事务自己控制事务用 Transaction方法包装事务 预编译事务结合预编译总结 前言 前几篇文章介绍gorm的整体设计&#xff0c;增删改查的具体实现流程。本文将聚焦与事务和预编译部分 事务 自己控制事务 用gorm框架&#xff0c;可以自己控制事务的Begin&#xff0…

什么是双声道立体声环绕声全景声 | 一文讲清楚沉浸式声音基本设定

目录 一、 沉浸式声音基本概念1. 声学上的沉浸式2. 空间音频技术3. 声源位置4. 人耳声音定位&#xff08;水平&垂直方向&#xff09;5. 人耳对声源距离定位的影响因素6. 头部相关传递函数7. 三维声技术8. “双耳”与“立体声”9. 耳机重放与扬声器重放10. 环绕声11. 高度声…

使用C语言库函数格式化输入时格式类型与数据类型不匹配导致程序异常

问题 使用两次sscanf()库函数从两个字符串中按照指定的格式读取数据&#xff0c;执行完毕后发现第一个正常读取的数据被篡改。项目在Ubuntu上使用CMake和Ninja构建项目&#xff0c;编译时没有错误和警告。 复现 为方便调试&#xff0c;在keil中编译stm32工程代替&#xff0c…

车牌识别之三:检测+识别的onnx部署(免费下载高精度onnx模型)

依赖 paddle2onnx1.3.1 onnxruntime-gpu1.14.0 ultralytics8.3.38背景 在车牌识别之一&#xff1a;车牌检测(包含全部免费的数据集、源码和模型下载&#xff09;我们得到了车牌检测模型&#xff1b; 在车牌识别之二&#xff1a;车牌OCR识别(包含全部免费的数据集、源码和模型…

WPF ControlTemplate 控件模板

区别于 DataTemplate 数据模板&#xff0c;ControlTemplate 是控件模板&#xff0c;是为自定义控件的 Template 属性服务的&#xff0c;Template 属性类型就是 ControlTemplate。 演示&#xff0c; 自定义一个控件 MyControl&#xff0c;包含一个字符串类型的依赖属性。 pub…