etcd详解

article/2025/6/18 19:37:34

      • 一、核心特性
      • 二、架构原理
      • 三、应用场景
      • 四、运维实践
      • 五、常见问题与解决方案
      • 六、与 ZooKeeper 和 Consul 的对比
      • 总结


etcd 是一个高可用的分布式键值存储系统,广泛应用于云原生领域,尤其作为 Kubernetes 的核心组件,用于存储集群的配置、状态和元数据。


一、核心特性

  1. 强一致性

    • 基于 Raft 共识算法,确保数据在集群中的强一致性。通过 Leader 选举、日志复制和心跳机制,保证即使部分节点故障,数据仍能保持一致。
    • 适用于需要严格数据一致性的场景(如 Kubernetes 集群状态管理)。
  2. 高可用性

    • 支持多节点集群(通常为奇数个节点,如 3、5、7 个),容忍部分节点故障。
    • 默认情况下,3 节点集群可容忍 1 个节点故障,5 节点集群可容忍 2 个节点故障。
  3. 键值存储与 Watch 机制

    • 数据以键值对形式存储,支持层级化键(如 /config/app1)。
    • Watch 机制 允许客户端监听键的变化,实时推送更新,适用于动态配置和服务发现。
  4. 租约(Lease)机制

    • 为键设置自动过期时间,常用于健康检查、临时服务和资源清理。例如,服务注册时可绑定租约,若服务未续约则自动注销。
  5. 事务操作

    • 支持原子性事务(如 CAS,Compare-And-Swap),确保多个操作的原子执行,避免竞争条件。
  6. 版本控制与历史记录

    • 记录键的修改历史,支持版本回滚和审计。每个键的修改会生成唯一的修订版本(revision)。

二、架构原理

  1. 集群角色

    • Leader:处理所有写请求,并将日志复制到 Follower。
    • Follower:接收 Leader 的日志并应用,参与 Leader 选举。
    • Candidate:Follower 在选举过程中临时扮演的角色。
  2. 数据存储

    • BoltDB:用于内存中的键值存储,支持事务。
    • WAL(Write-Ahead Log):预写式日志,确保数据持久化。
    • Snapshot:定期生成快照,减少 WAL 文件的大小,加速节点恢复。
  3. 通信协议

    • 使用 gRPC 作为通信协议,支持 HTTP/2 和 Protobuf,性能优于传统的 HTTP/JSON。

三、应用场景

  1. 服务发现

    • 微服务架构中,服务实例启动时向 etcd 注册自身地址,客户端通过监听 etcd 获取服务列表。
    • 结合租约机制,实现服务的自动注销和故障转移。
  2. 配置管理

    • 集中存储分布式系统的配置,支持动态更新和实时推送。例如,Kubernetes 的 ConfigMap 和 Secret 存储在 etcd 中。
  3. 分布式锁

    • 通过事务和租约机制实现分布式锁,避免多个进程同时操作共享资源。
  4. Leader 选举

    • 在分布式系统中选举主节点,确保只有一个实例执行特定任务(如定时任务调度)。
  5. 集群元数据存储

    • Kubernetes 使用 etcd 存储集群状态、Pod 信息、网络配置等核心数据。

四、运维实践

  1. 部署与配置

    • 通过静态配置或服务发现(如 DNS)启动集群。
    • 关键配置参数:
      • --initial-cluster:定义集群初始节点。
      • --heartbeat-interval--election-timeout:控制 Raft 算法的心跳和选举超时。
      • --quota-backend-bytes:限制 etcd 数据存储大小。
  2. 备份与恢复

    • 快照备份:定期生成快照(etcdctl snapshot save),并存储到远程位置。
    • WAL 日志:结合快照和 WAL 日志,实现增量备份。
    • 恢复流程:从快照恢复数据,并重放 WAL 日志。
  3. 性能优化

    • 磁盘 I/O:使用 SSD 存储 etcd 数据,避免高延迟磁盘。
    • 网络带宽:确保集群节点间网络带宽充足,减少选举和日志复制延迟。
    • 资源限制:通过 --quota-backend-bytes 限制数据存储大小,避免磁盘耗尽。
  4. 监控与告警

    • 监控指标:
      • Leader 选举频率:频繁选举可能表明网络不稳定或节点故障。
      • WAL 同步延迟:延迟过高可能影响数据一致性。
      • 磁盘使用率:接近上限时需及时扩容或清理数据。
    • 工具:集成 Prometheus 和 Grafana,实时监控 etcd 状态。

五、常见问题与解决方案

  1. 集群不健康

    • 原因:网络分区、节点故障、磁盘空间不足。
    • 解决:检查节点日志,修复网络问题,清理磁盘空间,必要时重新初始化集群。
  2. 性能瓶颈

    • 原因:高并发写入、大键值存储、慢磁盘。
    • 解决:优化键设计,使用 SSD,增加节点数量分散负载。
  3. 数据不一致

    • 原因:部分节点未正确复制日志。
    • 解决:检查 Raft 日志,修复故障节点,必要时从快照恢复。

六、与 ZooKeeper 和 Consul 的对比

特性etcdZooKeeperConsul
一致性算法RaftZABRaft(基于 Serf)
API 设计简洁的 gRPC/HTTP API复杂的 Java API友好的 HTTP/DNS API
使用场景Kubernetes、云原生Hadoop、Kafka服务发现、健康检查
扩展性适合中小规模集群适合大规模集群适合动态服务发现

总结

etcd 以其强一致性、高可用性和简洁的设计,成为云原生生态中不可或缺的组件。无论是 Kubernetes 的集群管理,还是微服务架构中的服务发现,etcd 都提供了可靠的解决方案。在实际应用中,需重点关注集群的部署、监控和备份,以确保系统的稳定性和数据的安全性。


在这里插入图片描述


http://www.hkcw.cn/article/iUlhxvuOkR.shtml

相关文章

CTFHub-RCE 命令注入-综合练习

观察源代码 代码里面可以发现过滤了运算符、目录分隔符、分号、空格还有一些关键字也被过滤了 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 用换行符的url值(%0a)代替分号注意:在url中输入 ?ip127.0.0.1%0a#…

网络编程1_网络编程引入

为什么需要网络编程? 用户再在浏览器中,打开在线视频资源等等,实质上说通过网络,获取到从网络上传输过来的一个资源。 与打开本地的文件类似,只是这个文件的来源是网络。相比本地资源来说,网络提供了更为…

性能优化 - 理论篇:性能优化的七类技术手段

文章目录 Pre引言性能优化的七类技术手段性能优化策略一览表1. 复用优化2. 计算优化2.1 并行执行2.2 变同步为异步2.3 惰性加载 3. 结果集优化3.1 数据格式与协议选择3.2 字段精简与按需返回3.3 批量处理与分页3.4 索引与位图加速 4. 资源冲突优化4.1 锁的分类与特点4.2 无锁与…

Android之ListView

1:简单列表(ArrayAdapter) 1:运行的结果: 2:首先在MyListView里面创建一个按钮,点击的时候进行跳转。 这里让我吃惊的是,Button里面可以直接设置onClick .java里面的方法。 也即是点击这个按钮之后就会去…

Unity程序集

对于Unity的程序集,具体内容可以参考Unity官方文档,程序集定义 - 预定义程序集 比如Unity的默认程序集,Assembly-CSharp.dll,还有其他的比如 Assembly-CSharp-Editor.dll,Assembly-CSharp-firstpass.dll 没有指定或…

【算法】递归与分治策略

一、算法整体思想 一般情况下,问题的规模越大,解题所需的计算时间越长,并且解题的难度可能会变得很大。 问题的规模越小,解题所需的计算时间往往越短,也比较容易处理。 当直接解决一个较大的问题时,有时是…

NVIDIA Mellanox BlueField-2 DPU(Data Processing Unit)智能网卡的调试和使用

专有名词 OOB: BMC: BFB: EMMC: 关键词解释eMMCEmbedded Multi-Media Card——把 NAND 闪存颗粒与控制器封装在一起的板载存储件,类似手机里的“内置储存” .deb:文件是​​Debian软件包格式​​的专…

(LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)

题目&#xff1a;909. 蛇梯棋 思路&#xff1a;广度优先搜索bfs队列&#xff0c;时间复杂度0(6*n^2)。 细节看注释 C版本&#xff1a; class Solution { public:int snakesAndLadders(vector<vector<int>>& board) {int nboard.size();// vis[i]&#xff1a;…

医疗多模态共情推理与学习一体化网络构成初探

1 引言:多模态共情推理的概念内涵与技术背景 在当今医疗人工智能领域,多模态共情推理正逐步成为突破临床决策支持系统瓶颈的关键范式。这一技术通过融合认知共情与情感共情的双重机制,模拟人类医生的综合诊断思维过程,实现对患者全方位健康状态的深度理解。医疗环境中的共…

RFID技术深度剖析:从原理、协议到S50卡与FM17550读写

知识点1【RFID的概述】 学习目标是学习对这个卡片的读写 用已有的手册实现对卡片内数据的读写操作 RFID&#xff1a;&#xff08;Radio Frequency Identification&#xff09;无线射频识别 通过无线识别目标&#xff0c;并读写相关数据&#xff0c;而无需接触 位于感知层&…

4-香豆酸:CoA连接酶晶体-文献精读138

Crystal structures of a Populus tomentosa 4-coumarate:CoA ligase shed light on its enzymatic mechanisms 杨树&#xff08;Populus tomentosa&#xff09;4-香豆酸&#xff1a;CoA连接酶的晶体结构揭示了其酶促机制 摘要 4-香豆酸&#xff1a;CoA连接酶&#xff08;4CL…

VTK|实现类似CloundCompare的测量功能

文章目录 CloundCompare在点、线、面三种模式下的显示内容✅ 图1&#xff1a;点模式✅ 图2&#xff1a;线模式✅ 图3&#xff1a;面模式 增加控制菜单栏实现测量功能类如何调用项目git链接 CloundCompare在点、线、面三种模式下的显示内容 点 线 面 三张图展示了 CloudComp…

Android15 userdebug版本不能remount

背景描述&#xff1a; 最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中&#xff0c;执行adb root没提示错误&#xff0c;但是没有获取到root权限。 Android设备运行的系统版本有三种情况&#xff1a;user版本、userdebug版本和eng版本…

伊朗外长:将适当回应美方核谈判提案

△伊朗外交部长阿拉格齐(资料图)当地时间5月31日,伊朗外交部长阿拉格齐在社交平台表示,当天阿曼外交大臣巴德尔访问伊朗并向其介绍了美方有关核谈判的提案。阿拉格齐表示,伊朗将根据原则、国家利益和伊朗人民的权利对此作出适当的回应。白宫新闻秘书莱维特当地时间31日表示…

27 C 语言编程核心:main 主函数(基本形式、返回值、参数、命令行传参)、多文件编程实践

1 main 主函数 1.1 主函数的作用 在 C 语言中&#xff0c;main 主函数是程序的入口函数&#xff0c;所有 C 程序必须包含一个名为 main 的函数。程序总是从该函数开始执行&#xff0c;没有它程序就无法启动。 主函数可以调用其他函数。其他函数不能调用主函数。主函数不能调用…

GIS常见数据及主要应用综述:类型解析、应用案例与未来趋势全景解读

&#x1f30f; GIS常见数据及主要应用综述&#xff1a;类型解析、应用案例与未来趋势全景解读 地理信息系统&#xff08;GIS&#xff09;是支撑空间决策、资源管理、城市治理的重要技术体系。本文从常见数据类型入手&#xff0c;结合中国及国际资源&#xff0c;梳理典型GIS应用…

系统性学习C语言-第十二讲-深入理解指针(2)

系统性学习C语言-第十二讲-深入理解指针&#xff08;2&#xff09; 1. const 修饰指针1.1 const 修饰变量1.2 const 修饰指针变量 2. 野指针2.1 野指针成因2.2 如何规避野指针2.2.1 指针初始化2.2.2 小心指针越界2.2.3 指针变量不再使用时&#xff0c;及时置 NULL &…

Linux安装redis

Linux redis路径 https://download.redis.io/releases/解压安装Redis 解压 tar -zvxf redis-6.0.5.tar.gz 由于redis是c语言编写的&#xff0c;所以我们需要先安装gcc&#xff0c;安装的命令如下&#xff1a; yum install gcc-c安装 输入命令&#xff1a; make PREFIX/usr/…

NumPy 数组计算:广播机制

文章目录 NumPy 数组计算&#xff1a;广播机制一、广播机制简介二、广播机制的规则1. 广播机制示例 12. 广播机制示例 23. 广播机制示例 3 三、广播机制实战1. 数组的中心化2. 绘制二维函数 NumPy 数组计算&#xff1a;广播机制 我们在NumPy数组的计算&#xff1a;通用函数中看…

Codesys FOR 循环之轴控

关于多伺服的轴控,不管怎么写都会很复杂,要么编程的时候代码行数多,要么是后期检查时非常麻烦,目前还未找到一个两全其美的方法,今天介绍的是通过FOR循环的轴控,就属于后者,代码行数较少,控制的轴数也没有限制,不需要一个轴一个的复制FB块,但是想在调试的时候实时查看…