Skip to content

参考:Raft 术语速查与 etcd 命令清单

基于 etcd 3.5 · 核于 2026-08

速查

  • etcd 定义:CNCF 开源的分布式强一致 KV 存储,Raft 共识,CP 型,是 K8s 唯一状态存储。
  • Raft 核心:Leader 唯一写 + 过半提交。三角色 Leader/Follower/Candidate,term 任期号,奇数节点。
  • 三大机制:MVCC(多版本 revision)、Watch(流式持续监听)、Lease(带 TTL 租约,做存活/选举/锁)。
  • 一致性级别:Linearizable(默认,读走 Leader 强一致)/ Serializable(本地读,快但可能旧值)。
  • K8s 底座:所有资源是 /registry/<kind>/<ns>/<name> 的 KV,resourceVersion = revision,Watch 驱动控制循环。
  • vs ZooKeeper:Raft 易理解 vs ZAB 不透明,Go 轻量 vs JVM 重型,流式 Watch vs 一次性(3.6 前)。
  • vs Consul/Nacos:纯 KV 底座(要自拼发现)vs 业务服务发现开箱即用。

一、Raft 术语速查

术语含义
term任期号,单调递增的逻辑时钟,每次选举自增
Leader唯一,处理所有写,发心跳维持地位
Follower被动接收 Leader 日志与心跳
CandidateFollower 超时未收心跳,转为发起选举
election timeout触发选举的超时(随机 150-300ms,防同时竞选)
log entry日志条目(term + index + cmd),按顺序复制
committed日志被过半节点复制,不可撤销
appliedcommitted 后应用到状态机(KV 真正写入)
majority(过半)N/2+1,3 节点=2,5 节点=3

二、etcd 三大机制速查

机制作用关键
MVCC每次写产生新 revision,保留历史版本按 revision 读旧值;compact 清理旧版
Watch监听 key/prefix 变化,流式推送基于 revision,断线重连续看,不丢事件
Lease带 TTL 的租约,绑定 key,到期自动删keep-alive 续约;过期自动删 key(存活/选举/锁)
TXN事务,if 条件 then 操作 else 操作compare-and-swap,原子,乐观锁

三、一致性级别对比

级别原理一致性延迟适用
Linearizable(默认)读走 Leader,ReadIndex 确认 Leader 身份强一致(最新已提交)较高不能容忍旧值
Serializable(--consistency=s读本地副本可能 stale(旧值)容忍旧值(配置/监控)

四、常用命令速查

bash
# —— 集群管理 ——
etcd                                 # 启动单节点(默认 2379 客户端 / 2380 对等)
etcd --name=node-1 \
  --initial-cluster=node-1=http://10.0.0.1:2380,node-2=http://10.0.0.2:2380,node-3=http://10.0.0.3:2380 \
  --initial-cluster-state=new \
  --initial-cluster-token=my-etcd    # 集群启动
etcdctl member list                  # 集群成员
etcdctl endpoint status              # 节点状态(含 Leader 标识)
etcdctl endpoint health              # 健康检查
etcdctl snapshot save backup.db      # 备份(必做)
etcdctl snapshot restore backup.db   # 恢复
etcdctl compact <rev>                # 压缩历史 revision(释放空间)
etcdctl defrag                       # 碎片整理(压缩后)

# —— KV 操作 ——
etcdctl put /config/db/host 10.0.0.100
etcdctl get /config/db/host          # 单 key
etcdctl get /config/ --prefix        # 前缀查询
etcdctl get /config/ --prefix --keys-only  # 只看 key
etcdctl del /config/db/host
etcdctl del /config/ --prefix        # 批量删

# —— Lease 租约 ——
LEASE=$(etcdctl lease grant 30 | awk '{print $2}')  # 创建 30s 租约
etcdctl put /leader node-1 --lease=$LEASE           # 绑定租约
etcdctl lease keep-alive $LEASE                     # 续约
etcdctl lease revoke $LEASE                         # 主动释放

# —— Watch ——
etcdctl watch /config/db/host                      # 单 key
etcdctl watch --prefix /config/                    # 前缀
etcdctl watch /x --rev=100                         # 从 rev=100 开始

# —— 事务(CAS)——
etcdctl txn <<EOF
mod_revision("/leader") = 0
put /leader node-1 --lease=$LEASE
EOF

# —— 选举 / 锁 ——
etcdctl elect /services/leader node-1              # 领导选举(阻塞,持有时是 leader)
etcdctl lock /my-lock -- echo "hold lock"          # 分布式锁

五、关键 API(gRPC,HTTP 网关)

方法路径用途
PUT/v3/kv/put写 key(可带 lease)
RANGE/v3/kv/range读(单 key / prefix)
DELETE/v3/kv/deleterange
TXN/v3/kv/txn事务(if-then-else)
WATCH/v3/watchWatch(gRPC stream)
LEASE GRANT/v3/lease/grant创建租约
LEASE KEEPALIVE/v3/lease/keepalive续约
MEMBER LIST/v3/cluster/member/list集群成员
STATUS/v3/maintenance/status节点状态(含 leader)

六、易错点清单

  • 「etcd 是注册中心」:错。etcd 是纯 KV 底座,没有服务发现/健康检查/DNS 语义。业务注册中心(开箱即用)选 Consul/Nacos,etcd 要自拼或做 K8s 底座。
  • 「etcd 能存大量数据」:错。etcd 设计目标是「小而精」(官方建议 2-8GB),存大量业务数据要上专门数据库。K8s 也限制单对象 1.5MB。
  • 「偶数节点更好」:错。Raft 要奇数节点(3/5/7)——偶数节点不提升容错(4 节点仍只容忍 1 故障,多数派 3),反而增加运维成本。
  • 「读一定读到最新值」:错。默认 Linearizable 读才强一致;Serializable(--consistency=s)可能读到旧值。
  • 「3 节点容忍 2 个故障」:错。3 节点多数派是 2,容忍 1 个故障(挂 2 个凑不齐多数派无法写)。容忍 2 个故障要 5 节点。
  • 「etcd 适合跨 DC 大集群」:错。写要过半 ack,跨 DC 延迟显著拖慢写。跨 DC 要用集群联邦或 LVM。
  • 「ZooKeeper 用 Raft」:错。ZK 用 ZAB(Zookeeper Atomic Broadcast),etcd/Consul 才用 Raft。两者都是过半提交但协议不同。
  • 「etcd 挂了 K8s 所有 Pod 都停」:错。etcd 挂了 apiserver 无法读写,但已运行的 Pod 不受影响(kubelet 本地缓存),只是无法新建/删除/调度。
  • 「Watch 会丢事件」:错。Watch 基于 revision,断线重连从上次 revision 续看,不丢不重。但 revision 太旧(已被 compact)会报错,需重新 list。
  • 「K8s 的 resourceVersion 是版本号自增」:错。它是 etcd 的 revision(全局 KV 修订号),不是资源自己的自增版本。

七、进阶方向(链接其他叶)

  • Consul —— 同样用 Raft,但提供业务服务发现语义(注册/健康检查/DNS),对比纯 KV 底座
  • Nacos —— 业务服务发现的另一种选择(中国 Spring Cloud)
  • Istio —— 服务网格,运行在 K8s 之上(K8s 底座正是 etcd)

权威链接