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 只做全局水位协调。
Federation 控制平面架构 Federation API Server Cluster State Store Scheduler Engine etcd 集群 A etcd 集群 B etcd 集群 C 说明 控制平面通过 Cluster State Store 维护全局集群视图,Scheduler Engine 根据限流水位 与健康状态,将压测请求路由到最优成员集群。

3.2 集群注册与发现机制

成员集群必须通过注册流程加入 Federation,才能接收压测调度。注册与发现采用 心跳 + 租约 模式,确保控制平面始终持有最新的集群拓扑。

注册流程(4 步)

  1. 集群代理部署: 在每个成员 etcd 集群侧部署 federation-agent,负责与控制平面通信。
  2. 元数据上报: Agent 向 Federation API Server 发送集群标识、端点列表、当前限流阈值、容量水位。
  3. 租约绑定: 控制平面为每个集群创建租约(TTL 默认 30s),Agent 需每 15s 续约。
  4. 状态持久化: 注册成功的集群元数据写入 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 恢复。

跨集群调度决策流程 压测请求入口 全局调度器 集群 A (3750 QPS) 集群 B (6000 QPS) 集群 C (2250 QPS) 限流反馈调节

3.4 限流策略在 Federation 中的传播路径

限流策略的配置与生效遵循 下发 → 缓存 → 执行 → 反馈 的闭环:

  1. 策略下发: 运维人员通过 Federation API Server 配置全局限流策略(如:集群 A 最大 5000 QPS,集群 B 最大 8000 QPS)。
  2. 本地缓存: 每个成员集群的 federation-agent 将策略缓存到本地内存,避免控制平面故障时策略丢失。
  3. 网关执行: etcd 网关层根据本地缓存的限流阈值,对压测请求进行令牌桶或漏桶限流。
  4. 状态上报: 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%,需要检查调度器负载均衡算法或限流策略传播延迟。