1. etcd 基础概念

1.1 etcd 是什么

etcd 是一个分布式、可靠的键值存储系统,用于存储分布式系统中的关键数据。它由 CoreOS 团队开发,采用 Go 语言编写,是云原生计算基金会(CNCF)的毕业项目。etcd 在 Kubernetes 等容器编排平台中扮演着核心角色,负责存储集群状态、配置信息和元数据。

核心定位:etcd 是分布式系统的“协调者”和“状态仓库”,提供强一致性的数据存储与订阅通知能力。

1.2 核心特性

特性 说明 关键价值
强一致性 所有节点在同一时刻看到相同的数据视图,写入成功后所有读操作都能读到最新值 避免数据冲突,保障决策正确性
高可用 基于 Raft 协议实现自动领导者选举,容忍少数节点故障(N 节点集群容忍 (N-1)/2 节点故障) 服务不中断,数据不丢失
键值存储 支持分层键空间(类似文件系统路径),每个键关联一个值 灵活组织配置与状态数据
Watch 机制 客户端可以监听键的变化,实现实时事件通知 服务发现、配置变更实时响应
租约(Lease) 支持 TTL 自动过期清理,用于心跳检测和临时数据管理 节点故障自动摘除
事务与 CAS 支持比较-交换(CAS)和多键事务操作 分布式锁、资源竞争控制

1.3 Raft 协议简介

Raft 是一种易于理解的分布式共识协议,etcd 使用它来保证集群中数据的一致性。Raft 将节点分为三种角色:领导者(Leader)、候选者(Candidate)和跟随者(Follower)。

  1. 领导者选举:当跟随者超时未收到领导者心跳,转为候选者并发起选举投票,获得多数票的节点成为新领导者。
  2. 日志复制:所有写请求必须经过领导者,领导者将日志条目复制到多数跟随者后,才提交并返回成功。
  3. 安全性:Raft 保证已提交的日志条目不会被覆盖,领导者拥有所有已提交日志。
关键数字:etcd 集群通常部署 3 或 5 节点。3 节点集群可容忍 1 节点故障,5 节点集群可容忍 2 节点故障。奇数节点配置可避免选举平局。
Raft 协议核心流程 Leader 领导者 Follower 跟随者 Follower 跟随者 心跳/日志复制 心跳/日志复制 Candidate 候选者 超时 → 发起选举 请求投票 关键规则: ① 多数派提交:日志复制到多数节点后才提交 ② 领导者唯一:任一任期只有一个有效领导者

1.4 典型应用场景

场景 实现方式 典型示例
服务发现 服务启动时在 etcd 注册自身地址,客户端通过 Watch 获取可用服务列表 Kubernetes 中 Pod 与 Service 的注册与发现
配置中心 将配置项存储在 etcd 键值对中,应用通过 Watch 实时感知配置变更 微服务架构中的动态配置下发
分布式锁 利用 etcd 的 CAS 操作和租约机制实现互斥锁,支持锁续期和自动释放 分布式任务调度中的资源抢占
集群元数据存储 存储集群节点信息、调度状态、资源配额等关键元数据 Kubernetes 集群状态(Pod、Service、Namespace 等)
领导者选举 多个候选节点竞争写入同一个键,成功写入者成为领导者,配合租约实现心跳保活 数据库主从切换、网关主节点选举
重要提示:etcd 存储的是集群的“源数据”,一旦损坏或丢失,整个分布式系统将无法恢复。因此,etcd 的备份与恢复策略是运维工作的重中之重,也是本课程后续章节的核心内容。
etcd 典型应用场景架构 etcd 集群 强一致性 · 高可用 服务发现 注册/发现 配置中心 动态配置 分布式锁 互斥控制 Kubernetes 核心依赖 所有场景均基于 Watch 机制