修复Redis MISCONF导致Celery写入失败

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
2026-05-03 11:32:06 +08:00
parent b402b77b06
commit 7b79e12254
5 changed files with 52 additions and 3 deletions
+4
View File
@@ -59,6 +59,10 @@ MINIO_IMAGE=minio/minio:latest
MINIO_MC_IMAGE=minio/mc:latest
REDIS_IMAGE=docker.m.daocloud.io/library/redis:7-alpine
REDIS_PORT=6379
# Redis 持久化策略:
# - 启用 AOFappendonly yes
# - 关闭 RDB 快照(save ""
# - 即使 RDB 失败也不阻断写请求(stop-writes-on-bgsave-error no
MINIO_API_PORT=9000
MINIO_CONSOLE_PORT=9001
PIP_INDEX_URL=https://pypi.org/simple
+8
View File
@@ -1078,3 +1078,11 @@
- XHR 上传沿用 `withCredentials + Authorization: Bearer <token>`
- 401 时触发一次 `refreshAccessToken` 并重试上传,保持与现有鉴权刷新机制一致。
- AuthContext 对外新增 `getAccessToken()`,用于在异步重试场景读取最新 token,避免闭包持有旧值。
## Redis 持久化容错口径(2026-05-03
- `deploy/dev-deploy/compose.yml``deploy/pro-deploy/compose.yml``redis` 统一采用:
- `appendonly yes`
- `save ""`
- `stop-writes-on-bgsave-error no`
- 目的:规避 RDB 快照失败触发 `MISCONF` 后 Redis 全局拒写,保障 Celery broker/result backend 可持续写入。
+8 -1
View File
@@ -20,7 +20,14 @@ services:
- "${REDIS_PORT}:6379"
volumes:
- ./data/redis:/data
command: redis-server --appendonly yes
command:
- redis-server
- --appendonly
- "yes"
- --save
- ""
- --stop-writes-on-bgsave-error
- "no"
restart: unless-stopped
minio:
+8 -1
View File
@@ -16,7 +16,14 @@ services:
redis:
image: ${REDIS_IMAGE}
container_name: ${COMPOSE_PROJECT_NAME}-redis
command: redis-server --appendonly yes
command:
- redis-server
- --appendonly
- "yes"
- --save
- ""
- --stop-writes-on-bgsave-error
- "no"
ports:
- "${REDIS_PORT}:6379"
volumes:
+24 -1
View File
@@ -146,7 +146,6 @@
- 风险与影响:
- 删除数据集会同时删除其关联的回填任务记录(仅记录,不会回滚已写入杆塔的高程值)。
- 若数据集存在运行中任务,接口会拒绝删除并提示先等待任务结束。
## Work Log - 高程数据管理支持批量导入(2026-05-03)
- 背景:
@@ -217,3 +216,27 @@
- 风险与影响:
- 影响范围:仅 Flower 代理鉴权配置注入,不改业务代码与数据。
- 若部署环境仍存在多层 env 覆盖(例如 `.images.env`),需确保最终生效值在 `api``flower` 一致。
## Work Log - 修复 Redis MISCONF 导致 Celery 写入失败(2026-05-03
- 背景:
- Issue `FL-181` 报错:`redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk`
- 该错误会触发 Redis 写保护,导致 Celery 控制命令与任务相关写入失败。
- 根因:
- 部署配置使用 `redis-server --appendonly yes`,默认仍启用 RDB 快照。
- 当宿主磁盘/权限导致 RDB 持久化失败时,Redis 默认 `stop-writes-on-bgsave-error=yes` 会拒绝写请求,连带 Celery 报 `kombu.exceptions.OperationalError`
- 本次改动(最小闭环):
- 文件:`deploy/dev-deploy/compose.yml`
- 文件:`deploy/pro-deploy/compose.yml`
- 将 Redis 启动参数调整为:
- `appendonly yes`(保留 AOF 持久化)
- `save ""`(关闭 RDB 快照)
- `stop-writes-on-bgsave-error no`(避免快照异常触发全局写阻断)
- 文件:`.env.example`
- 补充 Redis 持久化策略说明,明确上述运行口径。
- 风险与影响:
- 影响面:仅 Redis 容器启动参数与部署说明。
- 风险:关闭 RDB 后,Redis 数据恢复主要依赖 AOF;当前场景下可避免 Celery 因 RDB 异常整体不可写。