Skip to content

PostgreSQL 与 Redis 运维

应用可以快速重建,PostgreSQL 和 Redis 的容量与恢复能力决定平台能否长期运行。

PostgreSQL 职责

PostgreSQL 保存用户、凭证、账号、分组、订阅、订单、用量和运维数据。它是最重要的持久化事实来源。

版本与扩展

项目要求 PostgreSQL 15+,官方 Compose 当前使用较新版本。使用托管 PostgreSQL 时确认:

  • 支持所需 JSONB、partial index、advisory lock。
  • pg_dump 客户端版本与服务端兼容。
  • 时区和 SSL mode 正确。
  • 可以创建索引和执行迁移。

连接池

应用每个副本都有独立池:

dotenv
DATABASE_MAX_OPEN_CONNS=100
DATABASE_MAX_IDLE_CONNS=25
DATABASE_CONN_MAX_LIFETIME_MINUTES=30
DATABASE_CONN_MAX_IDLE_TIME_MINUTES=5

如果数据库连接频繁达到上限:

  1. 查看慢 SQL 和锁,而不是先无限增加连接。
  2. 检查长时间范围仪表盘查询。
  3. 确认聚合任务正常。
  4. 检查 worker 是否瞬间放大写入。
  5. 多副本按总连接计算。

迁移

服务启动时应用未执行迁移,并把文件名与 checksum 写入 schema_migrations

安全流程:

  1. 阅读新版本迁移。
  2. 对生产备份副本演练。
  3. 评估表锁、回填和索引时间。
  4. 创建升级前逻辑备份。
  5. 低峰发布。
  6. 检查 migration log 和表结构。

不要修改已经在生产执行过的迁移文件内容,否则 checksum 可能不一致。

usage_logs 增长

原始用量通常是增长最快的表。关注:

  • 表和索引大小。
  • 按时间/用户/账号查询的索引命中。
  • dashboard aggregation watermark。
  • usage cleanup 任务。
  • autovacuum 和 dead tuples。

先保证小时/日聚合正确,再缩短原始数据保留期。

PostgreSQL 监控

至少监控:

  • 连接 active/idle/waiting。
  • CPU、内存、磁盘、IOPS。
  • WAL 增长和复制延迟。
  • 慢查询与 lock wait。
  • autovacuum 延迟。
  • 数据库、最大表和索引大小。
  • backup 成功与可恢复性。

Redis 职责

Redis 承担:

  • 并发槽位和等待队列。
  • 鉴权、余额、订阅和平台配额缓存。
  • 粘性会话和调度快照。
  • 账号临时限流与冷却。
  • token refresh 和后台任务锁。
  • 部分异步队列。

不能用无持久化、随时清空的共享开发 Redis 作为正式生产依赖。

Redis 持久化

官方 Compose 使用 RDB + AOF everysec。根据业务选择:

  • 只使用普通网关:部分临时状态可重建,但重启会造成会话和限流丢失。
  • 启用批量任务:队列和 inflight 更重要,必须测试恢复。
  • 托管 Redis:确认持久化、故障转移和备份策略。

Redis 内存

主要消耗:

  • API Key 与订阅快照。
  • 用户平台 quota entry。
  • 大量账号调度状态。
  • 并发 ZSET 和等待计数。
  • sticky/previous response keys。
  • batch queue。

监控 used_memory、key count、evicted_keys 和 big keys。随意启用 LRU 淘汰可能删除并发、锁或队列 key。

Redis 超时

dotenv
REDIS_DIAL_TIMEOUT_SECONDS=5
REDIS_READ_TIMEOUT_SECONDS=3
REDIS_WRITE_TIMEOUT_SECONDS=3

超时过长会让所有请求堆积;过短会在网络抖动时大量误判失败。应用与 Redis 跨地域部署通常不是好选择。

Redis 高可用

使用 Sentinel、Cluster 或托管 Redis 前确认客户端配置是否与项目当前 Redis 初始化方式兼容。不是所有 Redis HA 形态都能只通过 host/port 无缝接入。

如果项目只配置单 endpoint,优先使用提供稳定主 endpoint 的托管服务或前置代理。

备份与恢复演练

至少每季度执行:

  1. 把 PostgreSQL 备份恢复到隔离实例。
  2. 使用相同版本应用连接恢复库。
  3. 验证管理员登录、账号、分组和 Key。
  4. 查询历史用量和余额。
  5. 对 Redis 做故障重启,确认网关恢复策略。
  6. 如启用批量任务,验证队列恢复。

只看到备份文件生成不代表备份可恢复。

本文档用于帮助你理解、部署和运维 Sub2API。使用前请确认上游服务条款与当地法律要求。