2. 沙盘环境规划:压测沙盘拓扑设计、节点角色划分与网络延迟模拟方案

2.1 压测沙盘拓扑设计

Federation 压测沙盘采用 3 集群 × 3 节点 的星型拓扑结构,模拟跨数据中心部署场景。每个集群内部署 3 个 etcd 节点,形成独立 Raft 组;集群之间通过 Federation 层进行元数据同步与请求转发。

设计目标: 在可控的沙盘环境中复现生产级 Federation 网络拓扑,支持对 Leader 选举、跨集群读写延迟、Learner 数据追赶等场景的压测与瓶颈定位。
Federation 压测沙盘拓扑结构 集群 A(数据中心-1) Leader Follower Follower Learner 集群 B(数据中心-2) Leader Follower Follower Learner 集群 C(数据中心-3) Leader Follower Follower Learner Federation 元数据同步层(gRPC + Watch) 压测入口:分布式压测引擎(JMeter / k6) 网络延迟模拟层(tc-netem / Toxiproxy)

2.2 节点角色划分与职责

每个集群内部严格遵循 etcd 原生角色体系,同时 Federation 层引入跨集群角色标识,用于区分请求路由策略。

角色 集群内职责 Federation 层职责 压测关注点
Leader 处理所有写请求;发起 Raft 日志复制;心跳检测 作为集群写入口,向 Federation 层广播元数据变更 Leader 写吞吐上限;心跳超时对 Federation 同步的影响
Follower 接收 Raft 日志;处理读请求(可配置线性一致性) 转发跨集群读请求到本集群 Leader;缓存 Federation 元数据 Follower 读延迟;缓存一致性对跨集群读的影响
Learner 仅接收 Raft 日志快照;不参与投票 作为 Federation 层的数据订阅节点,异步拉取跨集群变更 Learner 数据追赶延迟;快照传输对网络带宽的消耗
角色分配策略: 沙盘中每个集群固定 1 个 Leader、1 个 Follower、1 个 Learner。Learner 节点专门用于 Federation 层的数据订阅,避免影响集群内 Raft 投票与写入性能。

2.3 网络延迟模拟方案

为模拟跨数据中心真实网络环境,沙盘引入 tc-netem 与 Toxiproxy 两层延迟注入机制,覆盖集群间与集群内两种网络场景。

2.3.1 延迟模拟层级

  • 集群间延迟(跨数据中心): 模拟 10ms–100ms 单向延迟,随机丢包率 0.1%–1%。
  • 集群内延迟(同数据中心): 模拟 0.5ms–5ms 单向延迟,无丢包。
  • Learner 专用延迟: 对 Learner 节点额外注入 20ms–50ms 延迟,模拟异步订阅场景。

2.3.2 tc-netem 配置示例

# 集群间延迟:模拟跨数据中心 50ms ± 10ms 延迟,0.5% 丢包
tc qdisc add dev eth0 root netem delay 50ms 10ms distribution normal loss 0.5%

# 集群内延迟:模拟同数据中心 2ms 延迟
tc qdisc add dev eth1 root netem delay 2ms

# Learner 专用延迟:在 Learner 节点上额外注入 30ms 延迟
tc qdisc add dev eth2 root netem delay 30ms

2.3.3 Toxiproxy 代理配置示例

# 启动 Toxiproxy 代理,监听 2379 端口,转发到后端 etcd 2379
toxiproxy-cli create etcd_federation -l 0.0.0.0:2379 -u 127.0.0.1:12379

# 注入延迟毒性:50ms 延迟,抖动 10ms
toxiproxy-cli toxic add etcd_federation -t latency -a latency=50 -a jitter=10

# 注入带宽限制毒性:限制带宽为 10Mbps
toxiproxy-cli toxic add etcd_federation -t bandwidth -a rate=10
注意: tc-netem 作用于网络接口层,适合模拟整机延迟;Toxiproxy 作用于应用层代理,适合精细化控制单个 etcd 客户端的延迟特征。沙盘中两者配合使用,tc-netem 负责集群间基础延迟,Toxiproxy 负责 Federation 层特定链路的延迟注入。

2.4 延迟场景矩阵

以下矩阵定义了沙盘中 6 种典型网络延迟场景,覆盖正常、高延迟、分区、抖动等压测需求。

场景编号 场景名称 集群间延迟 集群内延迟 丢包率 压测目标
S1 正常跨数据中心 20ms ± 5ms 1ms 0.1% 基准性能
S2 高延迟跨数据中心 80ms ± 20ms 2ms 0.5% Leader 选举超时
S3 Learner 追赶压力 50ms ± 10ms 1ms 0.2% Learner 快照同步
S4 网络抖动 30ms ± 30ms 2ms ± 2ms 1% Federation 重试机制
S5 集群间分区 1000ms(模拟断开) 1ms 100% Federation 降级与恢复
S6 混合负载 40ms ± 15ms 1ms 0.3% 读写混合压测
网络延迟注入链路示意 分布式压测引擎 Toxiproxy 代理层 tc-netem 网络接口层 etcd 集群节点 延迟注入说明 1. Toxiproxy:应用层 延迟/带宽/重连 2. tc-netem:网络层 延迟/抖动/丢包

2.5 沙盘环境配置清单

以下为沙盘环境的基础配置参数,所有节点均运行在 Docker 容器中,通过 docker-compose 统一编排。

组件 配置项 值 说明
etcd 节点 CPU 2 核 限制容器 CPU
etcd 节点 内存 4 GB 限制容器内存
etcd 节点 磁盘 I/O SSD 模拟(200 MB/s) 通过 blkio 限制
etcd 节点 etcd 版本 v3.5.9 支持 Learner 与 Federation
网络模拟 tc-netem 延迟/抖动/丢包 作用于容器网络接口
网络模拟 Toxiproxy 延迟/带宽/重连 作用于应用层代理
压测工具 JMeter / k6 分布式模式 支持 gRPC 协议
沙盘环境验证: 在启动压测前,需通过 ping 与 mtr 验证集群间延迟是否符合预期;通过 etcdctl endpoint status 确认 Leader/Follower/Learner 角色分配正确。