【ETCD】【实操篇(四)】etcd常见问题快问快答FAQ

devtools/2024/12/23 10:44:07/

原文:https://etcd.io/docs/v3.5/faq/

目录

        • etcd, 一般问题
        • 配置相关
        • 部署相关
        • 操作相关
        • 性能相关
        • 其他问题

etcd__3">etcd, 一般问题

什么是 etcd
etcd 是一个一致性的分布式键值存储。它主要作为分布式系统中的独立协调服务,设计用于存储可以完全放入内存的小量数据。

如何发音 etcd
etcd 的发音是 /ˈɛtsiːdiː/,意思是“分布式 etc 目录”。

客户端必须发送请求到 etcd 领导者吗?
Raft 是基于领导者的;领导者处理所有需要集群共识的客户端请求。然而,客户端不需要知道哪个节点是领导者。任何需要共识的请求发送到跟随者时,都会自动转发到领导者。那些不需要共识的请求(例如序列化读取)可以由集群中的任何成员处理。

配置相关

listen-<client,peer>-urls、advertise-client-urls 或 initial-advertise-peer-urls 之间有什么区别?

  • listen-client-urlslisten-peer-urls 指定 etcd 服务器绑定的本地地址,用于接受传入连接。若要监听所有接口上的端口,请指定 0.0.0.0 作为监听的 IP 地址。
  • advertise-client-urlsinitial-advertise-peer-urls 指定 etcd 客户端或其他 etcd 成员应使用的地址来联系 etcd 服务器。广播地址必须可以从远程机器访问。不要在生产环境中使用 localhost 或 0.0.0.0 作为广告地址,因为这些地址无法从远程机器访问。

为什么更改 --listen-peer-urls 或 --initial-advertise-peer-urls 不会更新 etcdctl member list 中的广告 peer URLs?
成员的advertise peer URLs 来自于集群启动时的 --initial-advertise-peer-urls。在启动后更改监听的 peer URLs 或初始的advertisepeer 地址不会影响已导出的advertise peer URLs,因为更改必须通过仲裁(quorum)以避免成员配置的分裂。可以使用 etcdctl member update 来更新成员的 peer URLs。

部署相关

系统要求
由于 etcd 会将数据写入磁盘,因此其性能高度依赖磁盘性能。建议使用 SSD。可以通过工具(如 fio)进行磁盘性能基准测试来评估磁盘是否足够快。为了防止性能下降或意外地过载键值存储,etcd 强制使用配置的存储大小配额,默认值为 2GB。为了避免交换或内存不足,机器应该至少拥有足够的内存来覆盖配额。建议在正常环境下使用 8GB 内存,并且如果配置的值超过 8GB,etcd 会在启动时发出警告。

为什么集群成员数量必须是奇数?
etcd 集群需要多数节点来达成共识(即仲裁)。对于具有 n 个成员的集群,仲裁要求 (n/2)+1 个成员同意。对于奇数大小的集群,添加一个节点总是会增加达成共识所需的节点数。虽然增加一个节点可以让集群拥有更多的机器,但故障容忍度可能会变差,因为可以失败的节点数增多,可能会导致集群无法恢复。如果集群无法容忍更多故障,在移除节点之前添加新节点是危险的,因为如果新节点未能成功注册集群(例如地址配置错误),则会永久丧失仲裁。

最大集群大小是多少?
理论上没有硬性限制。然而,etcd 集群应该最好不超过七个节点。Google 的 Chubby 锁服务类似于 etcd,在 Google 内广泛部署多年,建议使用五个节点。一个五成员的 etcd 集群可以容忍两个成员的失败,这对于大多数情况来说足够了。虽然更大的集群可以提供更好的故障容忍度,但写入性能会因为数据必须在更多的机器之间复制而下降。

etcd 在跨区域或跨数据中心部署中是否有效?
跨区域部署 etcd 可以提高其故障容忍度,因为成员处于不同的故障域中。缺点是跨越数据中心的共识请求延迟较高。由于 etcd 依赖于成员的仲裁来达成共识,跨数据中心的延迟可能会比较明显,因为至少大多数集群成员必须响应共识请求。此外,集群数据必须在所有对等节点之间复制,因此也会有带宽成本。

操作相关

如何备份 etcd 集群?
etcdctl 提供了一个 snapshot 命令来创建备份。更多细节可以参考备份文档。

在移除不健康的成员之前,我应该添加一个新成员吗?
当替换 etcd 节点时,重要的是先移除成员,然后再添加替换节点。

etcd 使用基于仲裁模型的分布式共识;(n/2)+1 个成员(即多数)必须同意提案才能提交到集群。这些提案包括键值更新和成员更改。这个模型完全避免了脑裂不一致的可能性。然而,永久性丧失仲裁会导致灾难性的后果。

性能相关

如何基准测试 etcd
可以尝试使用基准测试工具。当前的基准测试结果可以进行比较。

etcd 警告“apply entries took too long”是什么意思?
在大多数 etcd 成员同意提交请求后,每个 etcd 服务器将请求应用到其数据存储并将结果持久化到磁盘。即使使用慢速机械硬盘或虚拟化网络磁盘(例如 Amazon EBS 或 Google 的 PD),应用请求的时间应该通常少于 50 毫秒。如果平均应用时长超过 100 毫秒,etcd 将警告“应用条目花费的时间太长”。

这个问题通常是由于磁盘慢导致的。磁盘可能正在经历 etdc 和其他应用程序之间的竞争,或者磁盘本身就很慢。通过监控 backend_commit_duration_seconds(p99 持续时间应少于 25 毫秒),可以确认磁盘是否足够快。如果磁盘太慢,为 etcd 分配一个专用磁盘或使用更快的磁盘通常可以解决问题。

etcd 警告“failed to send out heartbeat on time”是什么意思?
etcd 使用基于领导者的共识协议来保持数据复制和日志执行一致。集群成员选举出一个领导者,其他成员成为跟随者。选举出的领导者必须定期发送心跳信号给跟随者,以维持其领导地位。如果领导者未能按时发送心跳,跟随者将触发选举。通常,心跳超时会由慢速磁盘或 CPU 饥饿引起。如果磁盘较慢,可以使用工具(如 fio)进行基准测试来确认磁盘性能是否足够。如果 CPU 使用率过高,考虑将 etcd 移动到专用的机器上,增加进程资源隔离。

其他问题

etcd 警告“mvcc: database space exceeded”是什么意思?
etcd 的多版本并发控制(MVCC)数据模型会保存键空间的历史记录。如果不定期压缩这些历史记录(例如,设置 --auto-compaction),etcd 最终会耗尽存储空间。若 etcd 存储空间不足,它会触发配额警告以保护集群不被进一步写入。


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

相关文章

[JAVA备忘录] Lambda 表达式简单介绍

目录 前言 函数式接口 Lambda 表达式使用实例 简单示例 1. 无参数&#xff0c;无返回值 2. 有参数&#xff0c;无返回值 3. 无参数&#xff0c;有返回值 4. 有参数&#xff0c;有返回值 解释&#xff1a; 集合框架 1.forEach&#xff1a;遍历集合 2.排序&#xff1…

借助Aspose.Cells ,删除 Excel 中的空白行和列

删除 Excel 中的空白行和空白列对于维护干净有序的数据至关重要。这项任务在从金融到数据分析的各个行业中都起着至关重要的作用。通过删除不必要的空格&#xff0c;用户可以增强可读性并改善数据处理。在这篇博文中&#xff0c;我们将探讨如何使用 C# 删除 Excel 中的空白行和…

STM32-笔记4-按键点亮led

1、复制03项目流水灯&#xff0c;重命名改成05项目&#xff0c;05-按键控制翻转灯的状态 在BSP文件夹里新建key文件夹&#xff0c;在该文件夹里面&#xff0c;新建两个key.c和key.h文件 2、打开工程文件-加载文件 在品和魔术棒里面把刚才新建的key文件夹里面的.c 和.h文件加载…

故障诊断 | 一个小创新:特征提取+KAN分类

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…

apache的常见报错

文章目录 一、httpd -k install -n Apache输入后&#xff0c;提示拒绝访问怎么办解决方案 二、命令行输入&#xff1a;httpd -t 报错解决方案 三、httpd -k install -n Apache输入后&#xff0c;另外一种报错解决方案测试是否成功 四、路径问题引起报错解决方案 一、httpd -k i…

vue-element-admin npm install 安装失败,tui-editor更名导致

导语&#xff1a; 本失败原因是由于tui-editor&#xff08;富文本编辑器插件&#xff09;更名造成的&#xff0c;现在已经更名为toast-ui/editor&#xff1b; 在一个是一直以为是我的git问题 报错代码&#xff1a;code 128 ..........&#xff0c;困扰了我好长时间&#xff…

小程序中使用 Vue2 + Vuex 实现数据存储与获取

在小程序开发中&#xff0c;数据的存储与获取是一个非常重要的环节。本文将介绍如何在小程序中使用 Vue2 和 Vuex 实现数据的存储与获取。我们将通过一个具体的例子来展示如何在 Vuex 中管理用户信息和机构信息&#xff0c;并在组件中使用这些数据。 项目结构 首先&#xff0…

Android学习(六)-Kotlin编程语言-数据类与单例类

假设我们要创建一个表示书籍的数据类 Book&#xff0c;包含书名和作者两个字段。在 Java 中&#xff0c;代码如下&#xff1a; public class Book { String title; String author; public Book(String title, String author) { this.title title; this.author author; } Ove…