Перейти к содержимому

Масштабирование

Queue mode, workers и горизонтальное масштабирование n8n

Для высоких нагрузок n8n поддерживает queue mode с отдельными workers.

┌─────────────┐
│ Load │
│ Balancer │
└──────┬──────┘
┌──────────────┼──────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ Main 1 │ │ Main 2 │ │ Main 3 │
│ (web) │ │ (web) │ │ (web) │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└──────────────┼──────────────┘
┌──────▼──────┐
│ Redis │
│ (queue) │
└──────┬──────┘
┌──────────────┼──────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│Worker 1 │ │Worker 2 │ │Worker 3 │
└─────────┘ └─────────┘ └─────────┘
┌──────▼──────┐
│ PostgreSQL │
└─────────────┘
КомпонентРоль
MainWeb UI, API, управление workflows
WorkersВыполнение workflows
RedisОчередь задач
PostgreSQLХранение данных
version: '3.8'
services:
# Main instance (web UI)
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
- redis
# Worker instance
n8n-worker:
image: n8nio/n8n
restart: always
command: worker
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
- redis
- n8n
postgres:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7
restart: always
volumes:
- redis_data:/data
volumes:
n8n_data:
postgres_data:
redis_data:
Окно терминала
# Запустить 3 worker'а
docker-compose up -d --scale n8n-worker=3
ПеременнаяОписание
EXECUTIONS_MODEqueue
QUEUE_BULL_REDIS_HOSTRedis hostname
QUEUE_BULL_REDIS_PORTRedis port (default: 6379)
QUEUE_BULL_REDIS_PASSWORDRedis password
QUEUE_BULL_REDIS_DBRedis DB number
QUEUE_HEALTH_CHECK_ACTIVEHealth check enabled
QUEUE_WORKER_TIMEOUTTimeout для jobs (ms)
Окно терминала
# Количество параллельных executions на worker
N8N_CONCURRENCY_PRODUCTION_LIMIT=10

В настройках каждого workflow:

  • Concurrency Limit — макс параллельных выполнений
services:
n8n-webhook:
image: n8nio/n8n
restart: always
command: webhook
ports:
- "5679:5678"
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
# ... остальные настройки
Окно терминала
# Web UI
N8N_HOST=n8n.example.com
# Webhooks
WEBHOOK_URL=https://webhooks.example.com/
Окно терминала
curl http://localhost:5678/healthz
n8n-worker:
healthcheck:
test: ["CMD", "n8n", "queue:status"]
interval: 30s
timeout: 10s
retries: 3
redis:
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
Окно терминала
N8N_METRICS=true
N8N_METRICS_PREFIX=n8n_

Endpoint: http://localhost:5678/metrics

Метрики включают:

  • n8n_executions_total
  • n8n_workflow_active_count
  • n8n_queue_jobs_waiting
  • n8n_queue_jobs_active
✅ Отдельные контейнеры для main, worker, postgres, redis
❌ Всё в одном контейнере
Окно терминала
# Worker с большими данными
deploy:
resources:
limits:
memory: 4G

Следите за:

  • Waiting jobs — не должны расти постоянно
  • Failed jobs — исследуйте причины
  • Processing time — оптимизируйте долгие workflow
n8n-worker:
stop_grace_period: 30s

В workflow settings:

  • Retry On Fail — количество повторов
  • Wait Between Tries — пауза между попытками
apiVersion: apps/v1
kind: Deployment
metadata:
name: n8n-worker
spec:
replicas: 3
selector:
matchLabels:
app: n8n-worker
template:
metadata:
labels:
app: n8n-worker
spec:
containers:
- name: n8n-worker
image: n8nio/n8n
command: ["n8n", "worker"]
env:
- name: EXECUTIONS_MODE
value: "queue"
# ... остальные переменные
resources:
limits:
memory: "2Gi"
cpu: "1000m"
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: n8n-worker-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: n8n-worker
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80