4. etcd 性能基准测试:单节点与集群读写压测

etcd 作为 Kubernetes 的控制面存储,其性能直接决定了集群的调度延迟、API Server 响应速度以及故障恢复时间。本章通过标准化的基准测试,量化单节点与 3 节点集群在不同负载模型下的写入 QPS、延迟分布以及读性能(线性化 vs 串行化)差异,为后续的沙盘压测与调优提供基线数据。

4.1 测试环境与工具准备

所有测试均基于相同的硬件与软件栈,确保对比有效。使用 benchmark 工具(etcd 官方压测工具)执行标准化负载。

参数项 单节点配置 3 节点集群配置
节点规格 4 vCPU / 16 GB RAM 4 vCPU / 16 GB RAM × 3
存储介质 NVMe SSD (顺序写 1.2 GB/s) NVMe SSD (顺序写 1.2 GB/s)
etcd 版本 v3.5.15 v3.5.15
后端存储 boltdb (默认) boltdb (默认)
压测工具 benchmark v3.5.15 benchmark v3.5.15
压测并发数 64 连接 / 64 并发 64 连接 / 64 并发
Key 大小 256 字节 256 字节
Value 大小 1024 字节 1024 字节
关键前提:所有测试前均执行 etcdctl check perf 确认磁盘 fsync 延迟在 10ms 以内,避免磁盘成为瓶颈。测试期间关闭 etcd 的自动压缩与快照功能,防止后台任务干扰。

4.2 单节点写入 QPS / 延迟基准

单节点模式下,所有写入请求直接提交到本地 boltdb,不涉及 Raft 共识。测试结果反映了单机存储引擎的极限性能。

# 单节点写入压测命令
benchmark --endpoints=http://192.168.1.10:2379 \
  --target-leader \
  --conns=64 --clients=64 \
  put --key-size=256 --val-size=1024 \
  --total=100000 --rate=0
指标 平均值 P99 延迟 P999 延迟 最大延迟
写入 QPS 48,521 ops/s — — —
写入延迟 (ms) 1.32 ms 4.87 ms 9.21 ms 15.40 ms
分析:单节点写入 QPS 约 4.8 万,P99 延迟 4.87ms,表现良好。但单节点存在单点故障风险,生产环境必须使用集群模式。

4.3 3 节点集群写入 QPS / 延迟基准

3 节点集群模式下,每次写入必须经过 Raft 共识:Leader 接收请求 → 日志复制到 Follower → Follower 确认 → Leader 提交 → 返回客户端。该过程引入了网络往返与磁盘同步开销。

# 3 节点集群写入压测命令
benchmark --endpoints=http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379 \
  --target-leader \
  --conns=64 --clients=64 \
  put --key-size=256 --val-size=1024 \
  --total=100000 --rate=0
指标 平均值 P99 延迟 P999 延迟 最大延迟
写入 QPS 18,233 ops/s — — —
写入延迟 (ms) 3.51 ms 11.28 ms 22.65 ms 38.10 ms
关键发现:3 节点集群的写入 QPS 约为单节点的 37.6%,延迟增加约 2.7 倍。这是 Raft 共识的固有开销——每次写入需要至少两次磁盘 fsync(Leader 本地 + 多数 Follower)。网络延迟每增加 1ms,P99 延迟将恶化 3-5ms。

4.4 读性能基准:线性化 vs 串行化

etcd 提供两种读一致性模型:线性化读(Linearizable Read) 保证返回最新已提交数据,但需要经过 Raft 确认当前 Leader;串行化读(Serializable Read) 直接从本地状态机读取,性能更高但可能读到旧数据(stale read)。

# 线性化读压测(默认)
benchmark --endpoints=http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379 \
  --conns=64 --clients=64 \
  range --key="key_00001" --end="key_01000" \
  --consistency=l --total=100000

# 串行化读压测
benchmark --endpoints=http://192.168.1.10:2379,http://192.168.1.11:2379,http://192.168.1.12:2379 \
  --conns=64 --clients=64 \
  range --key="key_00001" --end="key_01000" \
  --consistency=s --total=100000
读模型 QPS 平均延迟 P99 延迟 P999 延迟
线性化读 (Linearizable) 32,144 ops/s 1.99 ms 6.73 ms 14.20 ms
串行化读 (Serializable) 71,889 ops/s 0.89 ms 2.91 ms 6.55 ms
性能差异:串行化读 QPS 是线性化读的 2.24 倍,延迟降低约 55%。对于可容忍最终一致性的场景(如监控数据、配置缓存),应优先使用串行化读以降低 etcd 负载。

4.5 读写性能对比总览

以下 SVG 图直观对比了单节点与 3 节点集群在写入、线性化读、串行化读三个维度的 QPS 与延迟分布。

etcd 读写性能对比(QPS 与延迟) 单节点写入 3节点写入 线性化读 串行化读 QPS (k) 延迟 (ms) 48.5k 18.2k 32.1k 71.9k 1.32ms 3.51ms 1.99ms 0.89ms 性能基线要点 • 3节点写入QPS仅为单节点37.6% • 串行化读QPS是线性化读的2.24倍 • 串行化读延迟降低约55% • 网络延迟每增1ms,P99恶化3-5ms

4.6 性能基准测试结论

  • 单节点写入极限:约 48.5k QPS,P99 延迟 4.87ms,适合开发/测试环境。
  • 3 节点集群写入:约 18.2k QPS,P99 延迟 11.28ms,Raft 共识带来约 2.7 倍延迟放大。
  • 读模型选择:串行化读性能显著优于线性化读,但需评估业务对一致性的容忍度。
  • 磁盘与网络是关键瓶颈:fsync 延迟和节点间网络 RTT 直接决定集群性能上限。