📎 配套脚本附件正文未内嵌 · 共 3 个 · 点开可在线查看
📂 查看全部 761 个脚本附件 →
⚠️ 脚本内含明文凭据(与本页正文一致),请勿在公网环境直接运行。
本周实战

作业15 · Worker 宕机 Runbook

索引卡住、ops_trace 延迟、Redis 队列判级与恢复。

作业15 · 值班 Runbook(一页)— Dify Worker 宕机 / 队列堆积

适用:Docker Compose 部署的 Dify(Celery worker + Redis)。实验仅在隔离实例;生产按本页判级处理。


0. 先判级(30 秒)

级别现象动作
P1大面积异步任务失败、索引/工作流长期卡住查 worker 容器 + Redis 队列 + 立刻恢复 worker
P2部分知识库索引慢、Langfuse 延迟看 dataset / ops_trace 队列深度,扩 worker 或修单点
P3偶发慢记录时间点,观察 15 分钟

易误判:curl /health 或 nginx 200 不代表 worker 正常 — API 与 Worker 是不同容器。

快速探测:

bash
# 换成本环境 compose 项目名
docker compose --project-name dify-hw15 ps worker
docker compose --project-name dify-hw15 logs worker --tail 30

# Redis 队列(在 redis 容器内)
docker compose --project-name dify-hw15 exec redis \
  redis-cli -a "${REDIS_PASSWORD:-difyai123456}" --no-auth-warning LLEN dataset

1. Worker 容器不在 / 反复重启

含义:Celery 消费者缺失,异步任务无人处理。

用户可见现象:

处理顺序:

  1. docker compose ps worker — 确认 Exit / Restarting
  2. docker compose logs worker --tail 100 — OOM、DB 连不上、Weaviate 不可达
  3. 立即:docker compose start worker 或 up -d worker(隔离/生产分别用对应 project)
  4. 观察 LLEN dataset 是否下降;UI 索引是否变绿
  5. 若反复崩溃:查 PG/Redis/Weaviate 健康;对照最近 .env / 镜像变更

恢复标准:worker 稳定运行 5 分钟,dataset 队列 LLEN 趋近 0,新上传文档可在合理时间内索引完成。


2. Worker 在跑但队列仍涨

含义:消费速度 < 生产速度,或 worker 假活(blocked / 死锁)。

处理顺序:

  1. 多队列:LLEN dataset、LLEN ops_trace、LLEN mail
  2. docker compose exec worker celery -A app.celery inspect active(版本不同命令可能略有差异)
  3. 降载:暂停大批量导入、暂停非核心 re-index
  4. 扩容:增加 worker 副本(官方 compose 默单 worker;生产需 orchestrator 水平扩展)
  5. 查向量库/embedding 上游是否超时(worker 任务卡住)

3. 与 API / 数据库故障的区分

组件典型现象
API 挂了页面打不开、对话 5xx、登录失败
PostgreSQL 挂了全站 5xx,worker 也连库失败
Redis 挂了异步任务无法入队/消费,缓存 miss 增多
Weaviate 挂了索引/检索报错;worker 日志含向量写入失败
仅 Worker 挂了页面正常、同步对话多数正常、异步全停

4. 隔离环境演练命令(作业15)

bash
cd /opt/dify-hw15
docker compose --project-name dify-hw15 stop worker
# …观察 UI 与 Redis…
docker compose --project-name dify-hw15 start worker

禁止在未授权的生产栈执行 stop worker。


5. 备份与恢复提醒

Worker 故障不丢数据(任务在 Redis 队列里等消费)。若需灾备,按备份清单备:

  1. PostgreSQL
  2. volumes/app/storage
  3. 向量卷(weaviate / milvus / pgvector)

见 作业15_Dify备份清单_cursor.md 或 hw15_01_备份清单.py 生成物。


6. 值班话术(可复制)

text
【Dify Worker 告警】时间:____  环境:生产 / 隔离 hw15
现象:索引卡住 / Langfuse 无 trace / 队列 LLEN=____
已做:重启 worker / 查日志 / 查 Weaviate(选填)
需要:____(扩容 worker / DBA / 回滚镜像)

7. 升级与记录