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) 设计一个降级策略:当消息队列不可用时,仅允许只读操作。