etcd节点扩/缩容

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.mzph.cn/news/889614.shtml

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

相关文章

谷粒商城—分布式高级①.md

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…

系统性能优化

一、概述 性能优化的目标:是提高系统或应用程序的响应时间、吞吐量、cpu、内存、磁盘IO、网络、流量、JVM、Tomcat、DB等方面的性能指标。 性能优化需要有一些技巧:对于整个产品或项目而言,比如可以从前端优化、后端优化、架构优化、高并发…

基于STM32设计的粮食仓库(粮仓)环境监测系统

一、前言 当前项目使用的相关软件工具、传感器源代码工程已经上传到网盘(实时更新项目内容):https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?fromfrom_copylink 1.1 项目开发背景 随着现代农业的发展和粮食储存规模的…

基于STM32的智能导盲/智能拐杖系统

基于STM32的智能导盲/智能拐杖系统 持续更新,欢迎关注!!! ** 基于STM32的智能导盲/智能拐杖系统 ** 据统计,全球视障人士的数量已经超过2.5亿,其中大部分人需要一种有效的辅助器具来帮助他们感知周围环境,安全行走。 近年来&am…

关于idea-Java-servlet-Tomcat-Web开发中出现404NOT FOUND问题的解决

在做web项目时,第一次使用servlet开发链接前端和后端的操作,果不其然,遇到了诸多问题,而遇到最多的就是运行项目打开页面时出现404NOT FOUND的情况。因为这个问题我也是鼓捣了好久,上网查了许多资料才最终解决&#xf…

【数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现链栈的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈…

在 Vue 2 中隐藏页面元素的方法

目录 在 Vue 2 中隐藏页面元素的方法 引言 1. 使用 v-if 指令 2. 使用 v-show 指令 3. 使用自定义类名与 v-bind:class 4. 使用内联样式与 v-bind:style 5. 使用组件的 keep-alive 和条件渲染 在 Vue 2 中隐藏页面元素的方法 引言 在开发 Web 应用时,我们经…

与 Cursor AI 对话编程:2小时开发报修维修微信小程序

本文记录了如何通过与 Cursor AI 对话,全程不写一行代码的情况下,完成一个完整的报修小程序。整个过程展示了 AI 如何帮助我们: 生成代码 、解决问题、优化实现、完善细节。 先看一下效果图: 一、项目配置 首先我是这样和 AI 对…

基于windows环境使用nvm安装多版本nodejs

目录 前言 一、卸载node 二、nvm是什么? 三、nvm安装 1.官网下载 nvm 包 2. 安装nvm-setup.exe 3. 配置路径和下载镜像 4. 检查安装是否完成 四、 使用nvm安装node 五、修改npm默认镜像源为淘宝镜像 六、环境变量配置 1. 新建目录 2. 设置环境变量 七…

clipboard----封装复制组件

Clipboard.js 是一个轻量级的 JavaScript 库,旨在帮助开发者轻松地实现将文本复制到剪贴板的功能。它不依赖 Flash 或其他外部库,并且提供了一种简单的方式来响应用户的复制行为。Clipboard.js 支持绑定到任何元素(如按钮、图片等&#xff09…

MVP模式的理解和实践

MVP(Model-View-Presenter)模式是一种用于组织代码的架构模式,主要用于用户界面的开发。它通过将应用程序的三个主要组件分开,提高了应用的可维护性和可测试性。本文将详细介绍MVP模式的理解和实践,并通过Java语言提供…

从工标网网站解析行业标准

#运行前,先删除data.csv文件 import requests from bs4 import BeautifulSoup import time import pandas as pd 创建data_list空列表,用于存储网站解析出来的标准信息 data_list [] 从工标网网站http://www.csres.com/sort/industry.jsp查询不同行业…

玩转Python中的JSON:从基础到进阶

在Python中处理JSON数据是日常开发中的常见任务之一。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在Web开发、数据存储等多个领域得到了广泛应用。本文将详细介绍如何在Python中处理JSON对象,包括基础操作、数据…

在Liunx中安装JDK、Tomcat、mysql、lrzsz、Nginx

一.软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 二.安装JDK 上述我们介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发 布包)形式来安装JDK。 在/下创建soft目录&…

神经网络基础-初识神经网络

人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经…

Python中PyTorch详解

文章目录 Python中PyTorch详解一、引言二、PyTorch核心概念1、张量(Tensor)1.1、创建张量1.2、张量操作 2、自动求导(Autograd)2.1、自动求导示例 三、构建神经网络1、使用nn模块2、优化器(Optimizer) 四、…

云服务器挖矿程序占用资源处理

云服务器挖矿程序占用资源处理 文章目录 云服务器挖矿程序占用资源处理top查看服务器后台运行情况关闭病毒删除病毒文件top 云服务器通过手机短信发送了多次预警,疑似出现挖矿程序,登录口令可能已经被暴力破解。处理方法是立即更改口令,然后处…

电脑文件夹打不开了,能打开但是会闪退,提示“找不到iUtils.dll”是什么原因?

电脑运行时常见问题解析:文件夹打不开、闪退及“找不到iUtils.dll”报错 在使用电脑的过程中,我们可能会遇到文件夹打不开、软件闪退或系统报错等问题,特别是提示“找不到iUtils.dll”的报错,更是让人困惑不已。今天我将为大家详…

【教程】让Jupyter支持打开CSV和Excel(xlsx)文件

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 支持CSV JupyterLab本身支持直接打开CSV文件,因此只需要在JupyterLab的文件浏览器中找到CSV文件并双击它,就可以在JupyterLab的…

在SQL Server中使用hash join来提高表连接的性能

在SQL Server中使用hash join来提高表连接性能时,需要考虑数据集的大小、索引情况以及查询的具体需求。 在SQL Server中使用hash join来提高表连接性能的情况主要包括以下几种: • 两个表都没有合适的索引:Hash join通常适合当两个表都没有索…