# 1. etcd 的 Raft 一致性协议与 MVCC 多版本 A 客户端每次修改键都会覆盖旧值,不保留历史版本 B MVCC 通过全局递增的 revision 保留键的历史版本 ✓ 正确答案 C Raft 中所有节点都能直接接收写请求并各自提交 D MVCC 与 Watch 无关,Watch 不使用 revision
# 2. etcd 的分布式锁(txn + lease)实现 A 加锁通过 txn 原子比较与写入,配合 lease 实现崩溃自动释放 ✓ 正确答案 B txn 只做写入,不做任何比较,无法判断是否已加锁 C 续期通过反复删除重建锁 key 实现 D 锁不需要 lease,客户端崩溃后锁永久持有
# 3. etcd 与 ZooKeeper 的性能与适用场景差异 A etcd 的 Watch 是一次性事件,需手动重注册 B ZooKeeper 使用 gRPC 接口,支持前缀监听 C etcd 使用 gRPC 接口,支持流式 Watch 与 MVCC ✓ 正确答案 D 两者都使用 Raft 协议
# 4. etcd 的 MVCC 版本管理(key revision/mod_revision)与业务层乐观并发控制 A mod_revision 表示键被修改的次数,与全局无关 B MVCC 不保留历史版本,无法读取旧数据 C 通过 txn 的 Compare(mod_revision) 实现版本判断与写入的原子 CAS ✓ 正确答案 D version 字段是全局递增的 revision
# 5. etcd 的 Raft 实现,MVCC、Watch 机制与租约(Lease)如何设计? A Watch 不依赖 revision,采用全量拉取 B MVCC 的 revision 与 Raft 提交、Watch 推送、Lease 过期都关联 ✓ 正确答案 C Raft 负责存储数据,MVCC 负责日志复制 D Lease 过期时直接删除键但不触发 Watch
# 6. etcd 在 Kubernetes 中作为元数据存储的角色 A etcd 存储 K8s 所有 API 对象,通过 watch 支持控制器协调 ✓ 正确答案 B etcd 只存储 Pod 日志,不存储集群状态 C K8s 的 API Server 不依赖 etcd,可独立运行 D etcd 在 K8s 中仅用于节点调度
# 7. etcd 的 lease(租约)与 key 自动过期机制 A lease 创建后无需续期,TTL 永远有效 B lease 到期后,etcd 会自动删除所有关联到该 lease 的 key ✓ 正确答案 C 撤销 lease 不会删除关联的 key D 一个 key 只能绑定一个 lease,且不随 lease 过期
# 8. etcd 的 watch 流式监听与前缀监听 A watch 是一次性通知,收到后需重新注册 B 前缀监听只能监听单个键,不能监听一组键 C watch 不支持长连接,只能短连接轮询 D 支持前缀监听和从指定 revision 续传,可避免丢事件 ✓ 正确答案
# 9. etcd 的 compact 与历史版本清理 A compact 删除指定 revision 之前的旧历史版本,但不会立即释放磁盘空间 ✓ 正确答案 B compact 会删除所有数据,包括最新版本 C compact 后 Watch 可以从任意旧的 revision 续传 D compact 后磁盘空间立即释放,无需 defrag
# 10. etcd 的租约与 KeepAlive,分布式锁与领导选举如何依赖租约续期? A 客户端续期失败后仍可假设锁已在自己手里 B lease 只要创建一次就永久有效,无需续期 C KeepAlive 与 lease 无关,KeepAlive 只用于网络保活 D 客户端停止续期后,lease 到期会删除锁定 key,自动释放 Leader 身份 ✓ 正确答案
# 11. etcd 的存储配额(quota)与告警(alarm)、碎片整理(defrag)的运维 A defrag 可以就地整理,无需 compact 配合 B compact 会直接释放物理磁盘空间,无需 defrag C quota 只影响读,不影响写 D 达到 quota 后 etcd 触发 NOSPACE 告警并拒绝写入 ✓ 正确答案
# 12. etcd 的 TLS 客户端认证与集群成员变更(learner)流程 A learner 成员参与投票,但被排除在选举之外 B 成员变更无需 Raft 共识,直接生效 C learner 成员永远不会成为正式成员 D learner 成员只同步数据不参与投票,数据追平后再提升为正式成员 ✓ 正确答案
# 13. etcd 的 watch 与 MVCC,历史版本保留与压缩(compact)的工程配置如何? A compact 越频繁越好,不影响任何客户端 B compact 删除的 revision 之后,客户端从该 revision 续传会报 Compacted 错误 ✓ 正确答案 C 客户端无需记录 revision,可任意续传 D 历史版本保留与 compact 无关,不会相互影响
# 14. etcd 的 gRPC 接口与 Java 客户端(jetcd) A jetcd 只能同步调用,不支持异步 B etcd 的 Watch 通过短连接一次性拉取 C etcd 用 gRPC+protobuf 提供 KV、Watch、Lease 等接口 ✓ 正确答案 D jetcd 无法进行租约(Lease)管理
# 15. etcd vs ZooKeeper,一致性模型、接口(gRPC vs ZK API)与运维差异如何? A 两者都使用 gRPC 接口和树形数据模型 B etcd 的监控指标不如 ZK 丰富 C etcd 用 gRPC 接口,Watch 支持流式;ZK 用自定义协议,Watch 一次性 ✓ 正确答案 D ZK 部署比 etcd 更简单,更适合容器化
# 16. etcd 的集群运维,快照备份、成员变更与数据恢复(灾备)如何? A 快照无法用于从故障恢复 B 通过 snapshot 生成一致性快照,定期备份并异地存储以实现灾备 ✓ 正确答案 C 恢复只需重启,无需依赖快照 D 成员变更不需要快照,直接删除即可
# 17. etcd 的存储引擎,boltdb/bbolt 的 B+tree 与 WAL 的持久化如何? A etcd 使用纯内存存储,不落盘 B etcd 使用 bbolt 的 B+tree 存储,配合 WAL 保证持久性 ✓ 正确答案 C WAL 在崩溃后无用,无法恢复数据 D bbolt 不支持范围查询,无法支撑前缀监听
# 18. etcd 的线性一致读,ReadIndex/LeaseRead 的实现差异如何? A LeaseRead 需要向多数节点确认后才读,延迟高 B ReadIndex 直接本地读,无需确认,性能高 C LeaseRead 依赖时钟同步,在租约内直接本地读,性能更高 ✓ 正确答案 D 线性一致读不保证读到最新已提交数据
# 19. etcd 在分布式任务调度选主中的租约(lease)与 watch 组合 A lease 提供崩溃自动让位,watch 实时感知主节点变化并触发重新竞选 ✓ 正确答案 B 主节点失效后,其他节点无法感知,只能等待超时 C lease 只用于键过期,与选主无关 D watch 负责维持 lease,无需客户端续期