Redis unavailable в n8n: runbook для queue mode ¶
Обновлено: 2026-05-29
Intent: runbook Redis unavailable: что делать, если n8n queue mode не видит Redis, workers не забирают jobs, executions зависают
H1: Redis unavailable в n8n: runbook для queue mode и workers
Schema: TechArticle, HowTo, FAQPage, BreadcrumbList
Old word count: 655
New word count: 864
Короткий ответ ¶
Если Redis недоступен, n8n в queue mode перестаёт нормально передавать production executions в workers: новые задания могут зависать, webhook-процессы отвечают нестабильно, а очередь не уменьшается. Сначала подтвердите, что проблема именно в Redis, затем проверьте сеть Docker, имя сервиса, пароль, переменные QUEUE_BULL_REDIS_*, режим EXECUTIONS_MODE=queue и состояние workers. Не перезапускайте всё подряд без фиксации симптомов: можно потерять контекст инцидента и не понять, какие executions нужно переиграть.
Когда применять этот runbook ¶
Используйте страницу, если n8n уже работает в queue mode или вы готовите self-hosted production с отдельными workers. В regular mode Redis обычно не является обязательной точкой отказа, поэтому симптомы будут другими. В queue mode Redis становится брокером очереди: main instance принимает запуск, кладёт job в очередь, worker забирает job и выполняет workflow.
Типичные сигналы:
- webhook принял событие, но downstream-действия не происходят;
- executions долго висят в состоянии waiting/running;
- workers запущены, но не берут задания;
- в логах есть
ECONNREFUSED,ETIMEDOUT,NOAUTH,READONLYилиRedis connection failed; - после деплоя часть контейнеров видит Redis, а часть — нет;
- очередь растёт быстрее, чем обрабатывается.
1. Быстро определить масштаб инцидента ¶
Сначала разделите проблему на три зоны: Redis полностью недоступен, доступен только части контейнеров или доступен, но очередь не обрабатывается.
| Признак | Вероятная зона | Первое действие |
|---|---|---|
| Все workers ругаются на Redis | Redis/service/network | проверить контейнер Redis и DNS-имя |
| Только один worker не работает | env конкретного worker | сравнить .env и compose-сервис |
| Redis доступен, но jobs не уходят | worker/concurrency | проверить workers, лимиты и ошибки workflow |
| Webhooks падают сразу | main/webhook processor | проверить main instance и EXECUTIONS_MODE |
Ошибка NOAUTH |
пароль/секрет | сравнить пароль Redis во всех сервисах |
Зафиксируйте время начала, affected workflows, количество waiting/running executions и последние изменения: деплой, обновление Docker Compose, смена паролей, миграция сервера, рестарт Redis.
2. Проверить состояние контейнеров ¶
Для Docker Compose начните с базовой картины:
docker compose ps
docker compose logs --tail=100 redis
docker compose logs --tail=100 n8n
docker compose logs --tail=100 n8n-worker
Если Redis контейнер перезапускается, не лечите n8n. Сначала выясните, почему падает Redis: нет места на диске, неверная команда запуска, corrupted volume, memory limit, пароль, permissions.
Проверьте доступ из сети, где живут n8n и worker:
docker compose exec n8n sh -lc 'nc -vz redis 6379 || true'
docker compose exec n8n-worker sh -lc 'nc -vz redis 6379 || true'
Если redis не резолвится, чаще всего причина в имени сервиса, разных Docker networks или попытке использовать localhost. Внутри контейнера localhost — это сам контейнер, а не соседний Redis.
3. Сверить переменные окружения ¶
Самый частый production-баг — main instance и workers запущены с разными Redis-настройками. Проверьте не только наличие переменных, но и одинаковость значений.
Минимальный набор для queue mode обычно включает:
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
QUEUE_BULL_REDIS_PASSWORD=...
N8N_ENCRYPTION_KEY=...
Важно: N8N_ENCRYPTION_KEY должен совпадать у main и workers. Иначе worker может получить execution, но не сможет корректно расшифровать credentials.
Проверьте:
EXECUTIONS_MODE=queueзадан в main и worker;- Redis host — это имя сервиса или реальный endpoint, а не
localhost; - пароль одинаковый в Redis и в n8n-сервисах;
- workers не используют старый
.envпосле деплоя; - переменные не переопределяются в CI/CD или systemd;
- staging и production не смотрят в один Redis.
4. Восстановить обработку без хаоса ¶
Если Redis недоступен из-за упавшего контейнера, восстановите Redis и только затем перезапускайте workers. Если Redis доступен, но workers зависли, перезапуск workers может быть безопаснее, чем перезапуск main instance.
Рекомендуемый порядок:
- Остановить источник лавины, если он создаёт тысячи событий: временно отключить внешний webhook, cron или провайдера.
- Поднять Redis и убедиться, что он отвечает из main и worker.
- Перезапустить workers, а не весь стек сразу.
- Проверить, уменьшается ли очередь.
- Проверить failed executions и понять, какие нужно replay.
- Вернуть входящий трафик.
Не очищайте Redis руками, если не понимаете, какие jobs там лежат. Для части бизнес-процессов потеря job хуже, чем задержка.
5. Что записать в incident log ¶
После восстановления зафиксируйте:
- точное время начала и окончания;
- affected workflows и внешние системы;
- количество зависших, failed и переигранных executions;
- root cause: сеть, пароль, resource limit, deploy, Redis crash;
- что было сделано для восстановления;
- какие алерты сработали или не сработали;
- какие проверки добавить в readiness checklist.
Хороший инцидентный отчёт помогает не спорить через месяц, почему Redis снова стал единственной точкой отказа.
Профилактика ¶
- Запустить отдельный Redis для production n8n, не общий с тестами.
- Мониторить доступность Redis, память, рестарты и latency.
- Добавить alert на рост waiting executions.
- Проверять queue mode после каждого деплоя smoke-тестом.
- Хранить
.envкак production-конфигурацию, а не как черновик. - Документировать, где лежит пароль Redis и кто может его менять.
FAQ ¶
Можно ли запускать queue mode без Redis?
Нет, для queue mode Redis нужен как брокер очереди. Если Redis недоступен, production executions не будут стабильно попадать к workers.
Почему main instance работает, а workers ничего не выполняют?
Часто main и worker видят разные Redis-настройки, используют разные .env или worker не имеет правильного N8N_ENCRYPTION_KEY.
Нужно ли сразу перезапускать весь Docker Compose?
Не всегда. Сначала проверьте Redis и сеть. Иногда достаточно перезапустить workers после восстановления Redis.
Что делать с events, которые пришли во время сбоя?
Сверьте внешние источники: payment provider, CRM, очередь сообщений, logs webhook. Для критичных событий нужен replay по event_id или ручная сверка.
Как применять playbook в команде ¶
Playbook «Redis unavailable в n8n» должен быть понятен человеку, который не писал workflow. Поэтому в нём нужны входной сигнал, частота запуска, критерий тревоги, ответственный и ожидаемое действие после срабатывания.
Используйте этот материал как операционную инструкцию: что проверить, где посмотреть логи, как понять масштаб проблемы и когда эскалировать.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | нормализованный prompt, контекст, список источников, версия промпта и ожидаемый JSON-ответ | позволяет повторить проблему без доступа к production-секретам |
| Контроль | validation_error_rate, token_cost, fallback_usage, human_review_rate, source_coverage | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | получить уверенный, но непроверенный ответ модели, сломанный JSON или дорогой цикл retry | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «Redis unavailable в n8n» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
{
"request_id": "req_demo_001",
"prompt_version": "2026-05-29",
"input": "краткое нормализованное сообщение пользователя",
"allowed_actions": ["read", "draft", "classify"],
"forbidden_actions": ["send_without_review", "change_payment"],
"expected_output": {
"intent": "technical|support|sales|unknown",
"confidence": 0.0,
"needs_human_review": true,
"sources": []
}
}
Критерий готовности ¶
- есть понятный вход, выход и владелец процесса
- проверены пустой input, повтор события и ошибка внешнего сервиса
- результат логируется без секретов и персональных данных
- страница связана с соседними рецептами, ошибками или playbook по теме