Перейти к содержанию

Redis для queue mode n8n: настройка, память, stalled jobs и восстановление очереди

Обновлено: 2026-05-29

Открыть мой план

Redis в n8n queue mode — это не “кэш для ускорения”, а транспорт для очереди задач между main instance и workers. Если Redis недоступен, workers перестают получать jobs, executions застревают, а webhooks могут отвечать нестабильно. Поэтому Redis надо настраивать как часть production-инфраструктуры, а не как случайный контейнер без volume и лимитов.

Эта инструкция разбирает практическую настройку Redis для Docker Compose, переменные n8n, мониторинг памяти, типовые ошибки и безопасное восстановление после сбоя.

Минимальная архитектура queue mode

external service → n8n main/webhook → Redis queue → n8n worker → PostgreSQL/external API

Main принимает запросы, планирует executions и кладёт jobs в очередь. Worker забирает jobs и выполняет workflow. PostgreSQL хранит workflows, credentials metadata и execution state. Redis не заменяет PostgreSQL.

Docker Compose для Redis

services:
  redis:
    image: redis:7-alpine
    command: >
      redis-server
      --appendonly yes
      --maxmemory 512mb
      --maxmemory-policy noeviction
    volumes:
      - redis_data:/data
    restart: unless-stopped

  n8n:
    image: n8nio/n8n:1.99.1
    environment:
      EXECUTIONS_MODE: queue
      QUEUE_BULL_REDIS_HOST: redis
      QUEUE_BULL_REDIS_PORT: 6379

  n8n-worker:
    image: n8nio/n8n:1.99.1
    command: worker
    environment:
      EXECUTIONS_MODE: queue
      QUEUE_BULL_REDIS_HOST: redis
      QUEUE_BULL_REDIS_PORT: 6379

volumes:
  redis_data:

Политика noeviction лучше, чем внезапное вытеснение данных очереди. Если Redis упирается в память, надо уменьшать нагрузку, добавлять workers или менять архитектуру, а не позволять Redis молча выкидывать ключи.

Env-переменные, которые часто забывают

ПеременнаяГде должна бытьЗачем
EXECUTIONS_MODE=queuemain и workerвключает очередь
QUEUE_BULL_REDIS_HOSTmain и workerадрес Redis в Docker network
QUEUE_BULL_REDIS_PORTmain и workerобычно 6379
N8N_ENCRYPTION_KEYmain и workerworker должен читать credentials
DB_POSTGRESDB_*main и workerоба процесса работают с одной базой

Smoke-test queue mode

  1. Запустите main, Redis и один worker.
  2. Создайте workflow: Webhook → Wait 5 seconds → Respond to Webhook.
  3. Активируйте workflow и отправьте POST.
  4. Откройте логи worker: он должен получить job.
docker compose logs -f --tail=100 n8n-worker
redis-cli -h redis INFO memory
redis-cli -h redis PING

Если execution создаётся, но worker ничего не делает, проверьте, что worker подключён к той же Docker network и использует тот же Redis host.

Типовые симптомы и исправления

СимптомПричинаДействие
ECONNREFUSED redis:6379неверный host, Redis не в сети, контейнер не стартовалпроверить compose network и docker compose ps
jobs stuck / stalledworker умер во время выполнения или упёрся в памятьпосмотреть логи worker, memory, перезапуски
Redis maxmemoryочередь растёт быстрее обработкиувеличить memory, добавить workers, ограничить входящий поток
workflow видит credentials errorу worker другой encryption keyсинхронизировать N8N_ENCRYPTION_KEY
webhook timeoutworkflow долго выполняется до ответабыстро отвечать через Respond to Webhook, работу продолжать отдельно

Память и retention

Redis не должен быть единственным буфером для бесконечного потока. Если webhook получает тысячи событий, добавьте idempotency в PostgreSQL, ограничение rate, backoff и dead-letter workflow. Queue mode масштабирует выполнение, но не исправляет плохой контракт данных.

У PostgreSQL тоже должен быть pruning executions. Иначе даже при нормальном Redis база может разрастись из-за длинной истории executions и больших payload.

Как безопасно перезапускать Redis

  1. Остановите входящий поток webhooks или переведите отправителя в retry.
  2. Дождитесь, пока активные executions завершатся, если это возможно.
  3. Перезапустите Redis.
  4. Перезапустите main и workers.
  5. Прогоните smoke-test queue mode.

Не удаляйте Redis volume без понимания последствий. Если jobs были в очереди, они могут потеряться или остаться в несогласованном состоянии относительно executions.

Операционный runbook для self-hosted

Для темы «Redis для queue mode n8n» важно разделять настройку и эксплуатацию. Настройка отвечает на вопрос “запустилось ли”, эксплуатация — “сможем ли мы восстановиться, обновиться и расследовать инцидент без потери credentials и execution history”.

Перед изменениями проверьте бэкап базы, значение N8N_ENCRYPTION_KEY, состояние volume, логи web-процесса и worker-процесса. Главный риск — сделать неидемпотентную запись, поймать lock/timeout или незаметно нарушить схему данных.

СлойЧто зафиксироватьЗачем
Входзапись из базы или SQL-операция с уникальным ключом, timestamp и результатом транзакциипозволяет повторить проблему без доступа к production-секретам
Контрольquery_duration, conflict_count, transaction_failures, row_count_delta, lock_waitпоказывает деградацию раньше, чем пользователи начинают писать в поддержку
Безопасностьсделать неидемпотентную запись, поймать lock/timeout или незаметно нарушить схему данныхснижает риск скрытых дублей, утечки данных и неконтролируемых write-действий
Готовностьесть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «Redis для queue mode n8n»делает статью пригодной для runbook, а не только для чтения

Пример безопасного входного контракта

docker compose ps
docker compose logs --tail=200 n8n
docker compose logs --tail=200 n8n-worker
printenv | grep -E 'N8N_|WEBHOOK_|DB_|QUEUE_'
# перед изменениями: backup базы + проверка N8N_ENCRYPTION_KEY

Критерий готовности

  • есть свежий backup базы и проверено значение N8N_ENCRYPTION_KEY
  • web, worker, queue и database используют согласованные переменные окружения
  • после изменения проверены логи, healthcheck и запуск критичных workflow
  • записан rollback-план с командами и ответственным

Практический контекст для внедрения

Эта страница полезна не как абстрактная справка, а как рабочая инструкция под эксплуатацию self-hosted n8n по теме «Redis для queue mode n8n: настройка, память, stalled jobs и восстановление очереди | Nodbot»: окружение, секреты, обновления, backup и мониторинг. Перед изменением workflow зафиксируйте источник события: self-hosted окружение, Docker, очередь и воркеры n8n. Так проще отделить ошибку данных от ошибки настройки n8n и не превратить исправление в набор случайных правок.

Минимальная проверка перед публикацией workflow: один happy path, один пустой payload, один повтор события и одна ошибка внешнего сервиса. Для мониторинга используйте worker concurrency, queue depth, restart count, memory usage, failed executions; эти показатели быстро покажут, что сценарий работает иначе, чем ожидалось.

Связанные материалы