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)。
- 领导者选举:当跟随者超时未收到领导者心跳,转为候选者并发起选举投票,获得多数票的节点成为新领导者。
- 日志复制:所有写请求必须经过领导者,领导者将日志条目复制到多数跟随者后,才提交并返回成功。
- 安全性:Raft 保证已提交的日志条目不会被覆盖,领导者拥有所有已提交日志。
关键数字:etcd 集群通常部署 3 或 5 节点。3 节点集群可容忍 1 节点故障,5 节点集群可容忍 2 节点故障。奇数节点配置可避免选举平局。
1.4 典型应用场景
| 场景 | 实现方式 | 典型示例 |
|---|---|---|
| 服务发现 | 服务启动时在 etcd 注册自身地址,客户端通过 Watch 获取可用服务列表 | Kubernetes 中 Pod 与 Service 的注册与发现 |
| 配置中心 | 将配置项存储在 etcd 键值对中,应用通过 Watch 实时感知配置变更 | 微服务架构中的动态配置下发 |
| 分布式锁 | 利用 etcd 的 CAS 操作和租约机制实现互斥锁,支持锁续期和自动释放 | 分布式任务调度中的资源抢占 |
| 集群元数据存储 | 存储集群节点信息、调度状态、资源配额等关键元数据 | Kubernetes 集群状态(Pod、Service、Namespace 等) |
| 领导者选举 | 多个候选节点竞争写入同一个键,成功写入者成为领导者,配合租约实现心跳保活 | 数据库主从切换、网关主节点选举 |
重要提示:etcd 存储的是集群的“源数据”,一旦损坏或丢失,整个分布式系统将无法恢复。因此,etcd 的备份与恢复策略是运维工作的重中之重,也是本课程后续章节的核心内容。