# 集群部署 本文档提供了 New API 集群部署的详细配置步骤和最佳实践,帮助您构建高可用、负载均衡的分布式系统。 ## 前置要求 * 多台服务器(至少两台,一主多从架构) * 已安装 Docker 和 Docker Compose * 共享的 MySQL 数据库(主从节点需访问同一数据库) * 共享的 Redis 服务(用于节点间数据同步和缓存) * 可选:负载均衡器(如 Nginx、HAProxy 或云服务商提供的负载均衡服务) ## 集群架构概述 New API 集群采用主从架构设计: 1. **主节点**:负责处理所有写操作和部分读操作 2. **从节点**:主要负责处理读操作,提高系统整体吞吐量 集群架构 ## 集群部署关键配置 集群部署的关键在于所有节点必须: 1. **共享相同的数据库**:所有节点访问同一 MySQL 数据库 2. **共享相同的 Redis**:用于缓存和节点间通信 3. **使用相同的密钥**:`SESSION_SECRET` 和 `CRYPTO_SECRET` 必须在所有节点上相同 4. **正确配置节点类型**:主节点为 `master`,从节点为 `slave` ## 部署步骤 ### 步骤一:准备共享数据库和 Redis 首先,您需要准备共享的 MySQL 数据库和 Redis 服务。这可以是: * 单独部署的高可用 MySQL 和 Redis 服务 * 云服务商提供的托管数据库和缓存服务 * 独立的服务器上运行的 MySQL 和 Redis 对于 MySQL 数据库,您可以选择以下架构方案: | 架构类型 | 组件构成 | 工作方式 | 应用配置方式 | | ----------- | ---------------------------------------- | ----------------------------------------- | ------------------- | | **主从复制架构** | 1个主库`
`N个从库 | 主库处理写入`
`从库处理读取`
`主从数据自动同步 | 配置主库地址作为 `SQL_DSN` | | **数据库集群架构** | 多个对等节点`
`代理层(ProxySQL/MySQL Router) | 所有节点都可读写`
`通过代理层实现负载均衡`
`自动故障转移 | 配置代理层地址作为 `SQL_DSN` | 无论选择哪种架构,应用程序的 `SQL_DSN` 配置都只需要一个统一入口地址。 确保这些服务能够被所有节点访问,并具有足够的性能和可靠性。 ### 步骤二:配置主节点 在主节点服务器上创建 `docker-compose.yml` 文件: ```yaml services: new-api-master: image: calciumion/new-api:latest container_name: new-api-master restart: always ports: - '3000:3000' environment: - SQL_DSN=root:password@tcp(your-db-host:3306)/new-api - REDIS_CONN_STRING=redis://default:password@your-redis-host:6379 - SESSION_SECRET=your_unique_session_secret - CRYPTO_SECRET=your_unique_crypto_secret - TZ=Asia/Shanghai # 以下是可选配置 - SYNC_FREQUENCY=60 # 同步频率,单位秒 # - FRONTEND_BASE_URL=https:// # 前端基础 URL,用于邮件通知等功能 volumes: - ./data:/data - ./logs:/app/logs ``` 请使用强密码和随机生成的密钥字符串替换上述配置中的示例值。 启动主节点: ```bash docker compose up -d ``` ### 步骤三:配置从节点 在每个从节点服务器上创建 `docker-compose.yml` 文件: ```yaml services: new-api-slave: image: calciumion/new-api:latest container_name: new-api-slave restart: always ports: - '3000:3000' # 可以与主节点使用相同端口,因为它们在不同服务器上 environment: - SQL_DSN=root:password@tcp(your-db-host:3306)/new-api # 与主节点相同 - REDIS_CONN_STRING=redis://default:password@your-redis-host:6379 # 与主节点相同 - SESSION_SECRET=your_unique_session_secret # 必须与主节点相同 - CRYPTO_SECRET=your_unique_crypto_secret # 必须与主节点相同 - NODE_TYPE=slave # 关键配置,指定为从节点 - SYNC_FREQUENCY=60 # 从节点与主节点同步频率,单位秒 - TZ=Asia/Shanghai # 以下是可选配置 # - FRONTEND_BASE_URL=https:// # 需与主节点相同 volumes: - ./data:/data - ./logs:/app/logs ``` 启动从节点: ```bash docker compose up -d ``` 对每台从节点服务器重复此步骤。 ### 步骤四:配置负载均衡 为了实现流量的均衡分配,您需要设置负载均衡器。以下是使用 Nginx 作为负载均衡器的配置示例: ```nginx upstream new_api_cluster { server master-node-ip:3000 weight=3; server slave-node1-ip:3000 weight=5; server slave-node2-ip:3000 weight=5; # 可添加更多从节点 } server { listen 80; server_name ; location / { proxy_pass http://new_api_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; } } ``` 此配置将主节点权重设置为 3,从节点权重设置为 5,这意味着从节点将处理更多的请求。您可以根据实际需求调整这些权重。 ## 高级配置选项 ### 数据同步设置 集群节点间的数据同步依赖于以下环境变量: | 环境变量 | 说明 | 推荐值 | | ----------------------- | --------- | ------ | | `SYNC_FREQUENCY` | 节点同步频率(秒) | `60` | | `BATCH_UPDATE_ENABLED` | 启用批量更新 | `true` | | `BATCH_UPDATE_INTERVAL` | 批量更新间隔(秒) | `5` | ### Redis 高可用配置 为提高 Redis 的可用性,可以配置 Redis 集群或哨兵模式: ```yaml environment: - REDIS_CONN_STRING=redis://your-redis-host:6379 - REDIS_PASSWORD=your_redis_password - REDIS_MASTER_NAME=mymaster # 哨兵模式下的主节点名称 - REDIS_CONN_POOL_SIZE=10 # Redis 连接池大小 ``` ### 会话安全配置 确保集群中所有节点使用相同的会话和加密密钥: ```yaml environment: - SESSION_SECRET=your_unique_session_secret # 所有节点必须相同 - CRYPTO_SECRET=your_unique_crypto_secret # 所有节点必须相同 ``` ## 监控与维护 ### 健康检查 配置定期健康检查以监控节点状态: ```yaml healthcheck: test: [ 'CMD-SHELL', "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $$2}'", ] interval: 30s timeout: 10s retries: 3 ``` ### 日志管理 对于大规模集群,建议使用集中式日志管理系统: ```yaml environment: - LOG_SQL_DSN=root:password@tcp(log-db-host:3306)/new_api_logs # 独立的日志数据库 ``` ## 扩容指南 随着业务增长,您可能需要扩展集群规模。扩容步骤如下: 1. **准备新服务器**:安装 Docker 和 Docker Compose 2. **配置从节点**:按照"步骤三:配置从节点"的说明配置新的从节点 3. **更新负载均衡器配置**:将新节点添加到负载均衡器配置中 4. **测试新节点**:确保新节点能正常工作并参与负载均衡 ## 最佳实践 1. **定期备份数据库**:即使在集群环境中,也应定期备份数据库 2. **监控资源使用情况**:密切关注 CPU、内存和磁盘使用情况 3. **采用滚动更新策略**:更新时,先更新从节点,确认稳定后再更新主节点 4. **配置告警系统**:监控节点状态,在问题发生时及时通知管理员 5. **地理分布部署**:如果可能,将节点部署在不同地理位置,提高可用性 ## 故障排除 ### 节点无法同步数据 * 检查 Redis 连接是否正常 * 确认 SESSION\_SECRET 和 CRYPTO\_SECRET 在所有节点上是否相同 * 验证数据库连接配置是否正确 ### 负载不均衡 * 检查负载均衡器配置和权重设置 * 监控各节点的资源使用情况,确保没有节点过载 * 可能需要调整节点权重或增加更多节点 ### 会话丢失问题 * 确保所有节点使用相同的 SESSION\_SECRET * 验证 Redis 配置正确且可访问 * 检查客户端是否正确处理 cookie ## 相关文档 * [环境变量配置指南](/zh/docs/installation/config-maintenance/environment-variables) - 包含多节点部署的所有相关环境变量 * [系统更新指南](/zh/docs/installation/config-maintenance/system-update) - 多节点环境下的系统更新策略 * [Docker Compose 配置说明](/zh/docs/installation/config-maintenance/docker-compose-yml) - 用于编写集群节点配置文件