Масштабирование
Queue mode, workers и горизонтальное масштабирование n8n
Queue Mode
Заголовок раздела «Queue Mode»Для высоких нагрузок n8n поддерживает queue mode с отдельными workers.
Архитектура
Заголовок раздела «Архитектура» ┌─────────────┐ │ Load │ │ Balancer │ └──────┬──────┘ │ ┌──────────────┼──────────────┐ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │ Main 1 │ │ Main 2 │ │ Main 3 │ │ (web) │ │ (web) │ │ (web) │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ └──────────────┼──────────────┘ │ ┌──────▼──────┐ │ Redis │ │ (queue) │ └──────┬──────┘ │ ┌──────────────┼──────────────┐ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │Worker 1 │ │Worker 2 │ │Worker 3 │ └─────────┘ └─────────┘ └─────────┘ │ ┌──────▼──────┐ │ PostgreSQL │ └─────────────┘Компоненты
Заголовок раздела «Компоненты»| Компонент | Роль |
|---|---|
| Main | Web UI, API, управление workflows |
| Workers | Выполнение workflows |
| Redis | Очередь задач |
| PostgreSQL | Хранение данных |
Настройка Queue Mode
Заголовок раздела «Настройка Queue Mode»Docker Compose
Заголовок раздела «Docker Compose»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:Масштабирование Workers
Заголовок раздела «Масштабирование Workers»# Запустить 3 worker'аdocker-compose up -d --scale n8n-worker=3Переменные для Queue Mode
Заголовок раздела «Переменные для Queue Mode»| Переменная | Описание |
|---|---|
EXECUTIONS_MODE | queue |
QUEUE_BULL_REDIS_HOST | Redis hostname |
QUEUE_BULL_REDIS_PORT | Redis port (default: 6379) |
QUEUE_BULL_REDIS_PASSWORD | Redis password |
QUEUE_BULL_REDIS_DB | Redis DB number |
QUEUE_HEALTH_CHECK_ACTIVE | Health check enabled |
QUEUE_WORKER_TIMEOUT | Timeout для jobs (ms) |
Concurrency
Заголовок раздела «Concurrency»Worker Concurrency
Заголовок раздела «Worker Concurrency»# Количество параллельных executions на workerN8N_CONCURRENCY_PRODUCTION_LIMIT=10Workflow Settings
Заголовок раздела «Workflow Settings»В настройках каждого workflow:
- Concurrency Limit — макс параллельных выполнений
Webhooks в Queue Mode
Заголовок раздела «Webhooks в Queue Mode»Отдельный Webhook Process
Заголовок раздела «Отдельный Webhook Process»services: n8n-webhook: image: n8nio/n8n restart: always command: webhook ports: - "5679:5678" environment: - EXECUTIONS_MODE=queue - QUEUE_BULL_REDIS_HOST=redis # ... остальные настройкиРазделение URL
Заголовок раздела «Разделение URL»# Web UIN8N_HOST=n8n.example.com
# WebhooksWEBHOOK_URL=https://webhooks.example.com/Health Checks
Заголовок раздела «Health Checks»Main Instance
Заголовок раздела «Main Instance»curl http://localhost:5678/healthzn8n-worker: healthcheck: test: ["CMD", "n8n", "queue:status"] interval: 30s timeout: 10s retries: 3redis: healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5sМониторинг
Заголовок раздела «Мониторинг»Prometheus Metrics
Заголовок раздела «Prometheus Metrics»N8N_METRICS=trueN8N_METRICS_PREFIX=n8n_Endpoint: http://localhost:5678/metrics
Grafana Dashboard
Заголовок раздела «Grafana Dashboard»Метрики включают:
n8n_executions_totaln8n_workflow_active_countn8n_queue_jobs_waitingn8n_queue_jobs_active
Best Practices
Заголовок раздела «Best Practices»1. Изолируйте компоненты
Заголовок раздела «1. Изолируйте компоненты»✅ Отдельные контейнеры для main, worker, postgres, redis❌ Всё в одном контейнере2. Достаточно памяти
Заголовок раздела «2. Достаточно памяти»# Worker с большими даннымиdeploy: resources: limits: memory: 4G3. Мониторинг очереди
Заголовок раздела «3. Мониторинг очереди»Следите за:
- Waiting jobs — не должны расти постоянно
- Failed jobs — исследуйте причины
- Processing time — оптимизируйте долгие workflow
4. Graceful Shutdown
Заголовок раздела «4. Graceful Shutdown»n8n-worker: stop_grace_period: 30s5. Retry Strategy
Заголовок раздела «5. Retry Strategy»В workflow settings:
- Retry On Fail — количество повторов
- Wait Between Tries — пауза между попытками
Kubernetes
Заголовок раздела «Kubernetes»Deployment Example
Заголовок раздела «Deployment Example»apiVersion: apps/v1kind: Deploymentmetadata: name: n8n-workerspec: 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"HPA (Horizontal Pod Autoscaler)
Заголовок раздела «HPA (Horizontal Pod Autoscaler)»apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: n8n-worker-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: n8n-worker minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80Следующие шаги
Заголовок раздела «Следующие шаги»- Безопасность — SSL, auth
- Docker — базовая настройка
- Переменные окружения — полный список