集群部署
GPT-Load 高可用集群部署方案,支持主从架构和水平扩展
集群架构概览
分布式主从架构
采用一主多从的分布式架构,主节点负责管理功能,从节点专注代理服务,实现高可用和负载分散
主节点 (Master)
Web 管理界面、配置管理、统计分析
从节点 (Slave)
专注 API 代理服务,支持水平扩展
共享存储
统一的 MySQL 和 Redis 集群
部署要求
重要提示
集群部署时 数据库 和 Redis 是必需的,用于分布式协调和状态同步
基础设施要求
数据库集群
- • MySQL 8.2+ 高可用集群
- • 支持主从复制或 Galera 集群
- • 建议配置读写分离
- • 定期备份和故障恢复机制
缓存集群
- • Redis 集群或哨兵模式
- • 用于分布式锁和状态同步
- • 配置持久化和故障转移
- • 监控内存使用和性能
部署步骤
1
准备共享基础设施
部署 MySQL 集群
建议使用云数据库集群服务,或自行部署独立的 MySQL 集群。
部署 Redis 集群
建议使用 Redis Sentinel 或集群模式,确保高可用性和数据一致性。
2
节点docker-compose.yml内容参考(主从节点一致)
services:
gpt-load:
image: ghcr.io/tbphp/gpt-load:latest
container_name: gpt-load
ports:
- "${PORT:-3001}:${PORT:-3001}"
env_file:
- .env
restart: always
stop_grace_period: ${SERVER_GRACEFUL_SHUTDOWN_TIMEOUT:-10}s
healthcheck:
test: wget -q --spider -T 10 -O /dev/null http://localhost:${PORT:-3001}/health
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
使用配置区分主从节点
IS_SLAVE=true
主节点不配置,或者配置为IS_SLAVE=false。从节点配置为IS_SLAVE=true。
保证整个集群只有一个主节点。
3
配置负载均衡
使用 Nginx 或其他负载均衡器分发请求到不同的从节点
Nginx 配置示例
# nginx.conf
upstream gpt_load_cluster {
server master-node-ip:3001 weight=3;
server slave-node1-ip:3001 weight=5;
server slave-node2-ip:3001 weight=5;
# 可添加更多从节点
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://gpt_load_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 如果使用CF或其他代理服务,需要设置真实IP
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
}
}
配置管理
统一配置要求
AUTH_KEY
必须相同DATABASE_DSN
必须相同REDIS_DSN
必须相同IS_SLAVE
从节点为 true动态配置同步
- • 系统设置存储在 MySQL 中自动同步
- • 分组配置实时推送到所有节点
- • 密钥状态通过 Redis 实时共享
- • 配置变更无需重启服务
监控与运维
健康检查
节点健康状态
# 检查节点状态
curl http://node:3001/health
# 响应示例
{
"status": "healthy",
"timestamp": "2025-07-15T12:56:00Z",
"uptime": "11.822967ms"
}
集群状态监控
- • 监控各节点请求量和响应时间
- • 检查数据库和 Redis 连接状态
扩容与缩容
水平扩容
- • 按需增加从节点数量
- • 更新负载均衡器配置
- • 新节点自动同步配置
- • 无缝接入现有服务
优雅下线
- • 从负载均衡器移除节点
- • 等待现有请求处理完成
- • 发送停止信号给容器
- • 清理相关资源和日志
最佳实践
✅ 推荐做法
- • 使用容器编排工具 (Docker Swarm/K8s)
- • 配置数据库和 Redis 的高可用
- • 设置完整的监控和告警系统
- • 定期备份配置和数据
- • 使用配置管理工具统一部署
- • 实施蓝绿部署或滚动更新
❌ 避免做法
- • 单点故障的数据库或缓存
- • 节点间配置不一致
- • 忽略网络延迟和分区问题
- • 缺乏监控和日志收集
- • 手动管理大量节点配置
- • 直接修改生产环境配置