From 7b79e12254c8df43f2982289e05e45806e6e7474 Mon Sep 17 00:00:00 2001 From: chengkml Date: Sun, 3 May 2026 11:32:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DRedis=20MISCONF=E5=AF=BC?= =?UTF-8?q?=E8=87=B4Celery=E5=86=99=E5=85=A5=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: multica-agent --- .env.example | 4 ++++ MEMORY.md | 8 ++++++++ deploy/dev-deploy/compose.yml | 9 ++++++++- deploy/pro-deploy/compose.yml | 9 ++++++++- memory/2026-05-03.md | 25 ++++++++++++++++++++++++- 5 files changed, 52 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 09dc5ca..2b72098 100644 --- a/.env.example +++ b/.env.example @@ -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 持久化策略: +# - 启用 AOF(appendonly 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 diff --git a/MEMORY.md b/MEMORY.md index a778737..f7a9718 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -1078,3 +1078,11 @@ - XHR 上传沿用 `withCredentials + Authorization: Bearer `; - 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 可持续写入。 diff --git a/deploy/dev-deploy/compose.yml b/deploy/dev-deploy/compose.yml index e3a21bd..1c8f523 100644 --- a/deploy/dev-deploy/compose.yml +++ b/deploy/dev-deploy/compose.yml @@ -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: diff --git a/deploy/pro-deploy/compose.yml b/deploy/pro-deploy/compose.yml index fb9f419..1dcb93d 100644 --- a/deploy/pro-deploy/compose.yml +++ b/deploy/pro-deploy/compose.yml @@ -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: diff --git a/memory/2026-05-03.md b/memory/2026-05-03.md index ffc6cdb..47322f5 100644 --- a/memory/2026-05-03.md +++ b/memory/2026-05-03.md @@ -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 异常整体不可写。