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=queue | main и worker | включает очередь |
QUEUE_BULL_REDIS_HOST | main и worker | адрес Redis в Docker network |
QUEUE_BULL_REDIS_PORT | main и worker | обычно 6379 |
N8N_ENCRYPTION_KEY | main и worker | worker должен читать credentials |
DB_POSTGRESDB_* | main и worker | оба процесса работают с одной базой |
Smoke-test queue mode ¶
- Запустите main, Redis и один worker.
- Создайте workflow: Webhook → Wait 5 seconds → Respond to Webhook.
- Активируйте workflow и отправьте POST.
- Откройте логи 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 / stalled | worker умер во время выполнения или упёрся в память | посмотреть логи worker, memory, перезапуски |
| Redis maxmemory | очередь растёт быстрее обработки | увеличить memory, добавить workers, ограничить входящий поток |
| workflow видит credentials error | у worker другой encryption key | синхронизировать N8N_ENCRYPTION_KEY |
| webhook timeout | workflow долго выполняется до ответа | быстро отвечать через Respond to Webhook, работу продолжать отдельно |
Память и retention ¶
Redis не должен быть единственным буфером для бесконечного потока. Если webhook получает тысячи событий, добавьте idempotency в PostgreSQL, ограничение rate, backoff и dead-letter workflow. Queue mode масштабирует выполнение, но не исправляет плохой контракт данных.
У PostgreSQL тоже должен быть pruning executions. Иначе даже при нормальном Redis база может разрастись из-за длинной истории executions и больших payload.
Как безопасно перезапускать Redis ¶
- Остановите входящий поток webhooks или переведите отправителя в retry.
- Дождитесь, пока активные executions завершатся, если это возможно.
- Перезапустите Redis.
- Перезапустите main и workers.
- Прогоните 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; эти показатели быстро покажут, что сценарий работает иначе, чем ожидалось.