19.1.6 规模化与高可用设计

规模化与高可用设计以“控制面稳定、数据面弹性、基础组件冗余”为核心,通过分层解耦、水平扩展与自动化治理,使平台在多租户与大规模节点下稳定运行。本节给出可落地的架构草图、安装与配置示例、排错步骤与练习。

原理草图(控制面高可用 + 数据面弹性)

文章图片

规模化设计要点(配示例)
- 多集群与多租户治理:以业务域/地域拆分集群,平台统一管控视图。
- 分层解耦:控制面(API/调度)与数据面(作业/采集)分离,避免互相影响。
- 统一资源池与配额:通过配额与容量基线控制扩展节奏。
- 任务与事件水平扩展:无状态执行节点 + 队列分发。
- 数据与元信息分片:按租户或业务维度分片,配合缓存减压。

高可用设计要点(配示例)
- 多副本与跨域容灾:关键服务多副本、跨可用区部署。
- 关键组件冗余:注册中心、消息队列、数据库、缓存均高可用。
- 降级与熔断:保证核心链路可用。
- 一致性与可恢复:幂等、状态可重放。
- 自愈与故障编排:告警触发自动恢复。


示例:控制面负载均衡 + VIP 高可用#

以 HAProxy + Keepalived 构建控制面 VIP,示范安装、配置与验证。

1) 安装#

CentOS/RHEL

sudo yum -y install haproxy keepalived

Ubuntu/Debian

sudo apt-get update
sudo apt-get -y install haproxy keepalived

2) HAProxy 配置#

文件路径:/etc/haproxy/haproxy.cfg

global
  log /dev/log local0
  maxconn 20000

defaults
  mode http
  timeout connect 5s
  timeout client  30s
  timeout server  30s

frontend api_front
  bind *:8443
  default_backend api_back

backend api_back
  balance roundrobin
  option httpchk GET /healthz
  server api1 10.0.0.11:8080 check
  server api2 10.0.0.12:8080 check

说明
- frontend api_front:对外暴露 8443。
- backend api_back:后端 API 节点,httpchk 健康检查。
- balance roundrobin:均衡策略。

3) Keepalived 配置#

文件路径:/etc/keepalived/keepalived.conf

主节点(MASTER)

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.100/24
  }
}

备节点(BACKUP)

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 90
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.100/24
  }
}

说明
- virtual_ipaddress:VIP。
- priority:优先级,主高备低。

4) 启动与验证#

sudo systemctl enable --now haproxy
sudo systemctl enable --now keepalived

# 验证 VIP 是否在主节点
ip addr show eth0 | grep 10.0.0.100

# 验证后端健康
curl -I http://10.0.0.100:8443/healthz

示例:数据面水平扩展(无状态执行节点 + 队列)#

以 Kafka 为事件总线,执行节点无状态扩容。

核心思路
- 控制面只负责投递任务到队列;
- 执行节点通过消费者组扩容;
- 执行状态回写数据库。

简单命令示例

# 新增执行节点后,启动消费者服务
systemctl start worker-consumer

# 查看消费者组扩容效果
kafka-consumer-groups.sh --bootstrap-server 10.0.0.20:9092 --describe --group ops-worker

说明
- --group ops-worker:同一消费者组可水平扩容。
- --describe:查看分区分配与延迟。


排错清单(含命令)#

1) VIP 不漂移

ip addr show | grep 10.0.0.100
systemctl status keepalived
journalctl -u keepalived -n 50
  • 若未看到 VIP,检查网卡名 interface 是否正确。

2) LB 无响应

systemctl status haproxy
ss -lntp | grep 8443
curl -I http://127.0.0.1:8443/healthz
  • 若端口未监听,检查配置语法:
haproxy -c -f /etc/haproxy/haproxy.cfg

3) 后端节点异常

curl -I http://10.0.0.11:8080/healthz
curl -I http://10.0.0.12:8080/healthz

可靠性与性能指标(示例)#

  • SLO:控制面 API 可用性 ≥ 99.9%,P95 响应 ≤ 300ms。
  • 容量基线:每 1000 台节点需 2 个 API 节点 + 3 个执行节点。
  • 演练指标:故障切换 < 30s,任务重放成功率 ≥ 99.5%。

练习#

1) 按示例完成 HAProxy + Keepalived 双机高可用,并验证 VIP 漂移。
2) 模拟 API 节点下线,观察 HAProxy 健康检查自动摘除。
3) 新增 1 个执行节点,使用 kafka-consumer-groups.sh 验证消费者扩容。
4) 设计一个降级策略:当消息队列不可用时,仅允许只读操作。