3. 多集群 Federation 架构:控制平面、集群注册与发现、跨集群资源调度
在 etcd 压测沙盘中引入 Federation 架构,是为了解决单集群资源瓶颈与地域容灾问题。Federation 层作为统一的控制入口,将多个物理 etcd 集群抽象为一个逻辑集群,压测流量可以透明地分发到不同集群,同时每个集群仍保留独立的限流策略。
3.1 Federation 控制平面架构
Federation 控制平面是整个多集群调度的核心,它由三个关键组件构成:
| 组件 | 职责 | 高可用要求 |
|---|---|---|
| Federation API Server | 提供统一的 REST/gRPC 入口,接收压测调度指令与限流策略下发 | 至少 3 副本,前端负载均衡 |
| Cluster State Store | 存储所有成员集群的元数据、健康状态、限流阈值快照 | 独立 etcd 集群或复用沙盘存储 |
| Scheduler Engine | 根据集群负载与限流水位,决策压测请求路由到哪个成员集群 | 无状态,可水平扩展 |
设计要点: 控制平面不直接参与 etcd 数据读写,仅负责策略编排与路由决策。限流策略的最终执行仍在各成员集群的 etcd 网关层完成,Federation 只做全局水位协调。
3.2 集群注册与发现机制
成员集群必须通过注册流程加入 Federation,才能接收压测调度。注册与发现采用 心跳 + 租约 模式,确保控制平面始终持有最新的集群拓扑。
注册流程(4 步)
- 集群代理部署: 在每个成员 etcd 集群侧部署
federation-agent,负责与控制平面通信。 - 元数据上报: Agent 向 Federation API Server 发送集群标识、端点列表、当前限流阈值、容量水位。
- 租约绑定: 控制平面为每个集群创建租约(TTL 默认 30s),Agent 需每 15s 续约。
- 状态持久化: 注册成功的集群元数据写入 Cluster State Store,标记为
ACTIVE。
发现机制
- 主动拉取: Scheduler Engine 定期从 State Store 拉取全量集群列表,缓存本地。
- 事件推送: 当集群状态变更(加入/退出/限流触发),State Store 通过 Watch 机制推送增量事件。
- 故障摘除: 连续 3 次心跳超时的集群自动标记为
UNREACHABLE,不再接收新请求。
压测场景建议: 在沙盘中模拟集群故障时,可以手动停止某个 etcd 集群的 agent 进程,观察 Federation 在 45s 内将其摘除,压测流量自动转移到剩余集群。
3.3 跨集群资源调度策略
跨集群调度的核心目标是在满足每个集群限流约束的前提下,最大化压测吞吐。调度策略分为三个层级:
| 调度层级 | 输入 | 输出 | 典型算法 |
|---|---|---|---|
| 全局调度 | 压测总 QPS、各集群容量上限 | 每个集群的配额比例 | 加权轮询、最小连接数 |
| 本地调度 | 集群内 etcd 节点限流状态 | 请求到具体节点的路由 | 一致性哈希、P2C |
| 限流协同 | 集群实时限流拒绝率 | 动态调整配额 | 令牌桶反馈调节 |
调度决策示例
假设沙盘中有 3 个 etcd 集群,限流阈值分别为 5000 QPS、8000 QPS、3000 QPS。全局调度器按比例分配压测流量:
总压测目标:12000 QPS
集群 A 配额:12000 × (5000 / 16000) = 3750 QPS
集群 B 配额:12000 × (8000 / 16000) = 6000 QPS
集群 C 配额:12000 × (3000 / 16000) = 2250 QPS
当集群 B 触发限流(拒绝率 > 5%)时,调度器自动将超出的 500 QPS 转移到集群 A 和 C,直到集群 B 恢复。
3.4 限流策略在 Federation 中的传播路径
限流策略的配置与生效遵循 下发 → 缓存 → 执行 → 反馈 的闭环:
- 策略下发: 运维人员通过 Federation API Server 配置全局限流策略(如:集群 A 最大 5000 QPS,集群 B 最大 8000 QPS)。
- 本地缓存: 每个成员集群的
federation-agent将策略缓存到本地内存,避免控制平面故障时策略丢失。 - 网关执行: etcd 网关层根据本地缓存的限流阈值,对压测请求进行令牌桶或漏桶限流。
- 状态上报: Agent 周期性上报当前限流拒绝率、实际吞吐量,供调度器调整配额。
关键约束: 限流策略的传播延迟应控制在 1s 以内。如果 Federation 控制平面与成员集群之间的网络延迟超过 100ms,建议在 agent 侧启用本地降级策略——当无法连接控制平面时,使用最后一次收到的策略继续执行。
3.5 沙盘中的 Federation 部署验证
在压测沙盘中,建议按以下步骤验证 Federation 架构的正确性:
| 步骤 | 操作 | 预期结果 |
|---|---|---|
| 1 | 启动 3 个 etcd 集群,每个集群 3 节点 | 所有集群通过 agent 注册到 Federation |
| 2 | 配置集群 A 限流 2000 QPS,集群 B 限流 4000 QPS | Federation 状态显示配额生效 |
| 3 | 发起 5000 QPS 压测 | 集群 A 约 1667 QPS,集群 B 约 3333 QPS |
| 4 | 手动停止集群 B 的 agent 心跳 | 45s 后集群 B 被摘除,流量全部转移到集群 A |
| 5 | 恢复集群 B agent | 集群 B 重新加入,流量分配恢复比例 |
压测指标: 在 Federation 模式下,整体压测吞吐应接近各集群限流阈值之和(允许 5% 的调度损耗)。如果实际吞吐低于理论值 90%,需要检查调度器负载均衡算法或限流策略传播延迟。