대기열 모드#
필요에 따라 n8n을 다양한 모드에서 실행할 수 있습니다. 대기열 모드는 최고의 확장성을 제공합니다.
이진 데이터 저장소
n8n은 파일 시스템에서 이진 데이터 저장소와 함께 대기열 모드를 지원하지 않습니다. 워크플로우에서 대기열 모드에서 이진 데이터를 지속적으로 사용하는 경우 S3 외부 스토리지를 사용할 수 있습니다.
작동 방식#
대기열 모드로 실행할 때 여러 개의 n8n 인스턴스가 설정되어 있으며, 하나의 주요 인스턴스가 워크플로우 정보(예: 트리거)를 수신하고, 작업자 인스턴스가 실행을 수행합니다.
각 작업자는 자체 Node.js 인스턴스로 main
모드에서 실행되지만, 높은 IOPS(초당 입력-출력 작업) 덕분에 동시에 여러 워크플로우 실행을 처리할 수 있습니다.
작업자 인스턴스를 사용하고 대기열 모드로 실행함으로써 n8n을 필요에 따라 확장(작업자 추가)하거나 축소(작업자 제거)하여 작업 부하를 처리할 수 있습니다.
프로세스 흐름은 다음과 같습니다:
- 주요 n8n 인스턴스가 타이머 및 웹후크 호출을 처리하여(하지만 실행하지는 않음) 워크플로우 실행을 생성합니다.
- 실행 ID를 메시지 브로커인 Redis로 전달하며, Redis는 대기 중인 실행의 대기열을 유지하고 다음 사용 가능한 작업자가 이를 수집할 수 있도록 합니다.
- 풀 내의 작업자가 Redis에서 메시지를 수집합니다.
- 작업자는 실행 ID를 사용하여 데이터베이스에서 워크플로우 정보를 가져옵니다.
- 워크플로우 실행을 완료한 후, 작업자는:
- 결과를 데이터베이스에 기록합니다.
- 실행이 완료되었다고 Redis에 게시합니다.
- Redis가 주요 인스턴스에 알립니다.
작업자 구성#
작업자는 실제 작업을 수행하는 n8n 인스턴스입니다. 이들은 실행해야 할 워크플로우에 대한 정보를 주요 n8n 프로세스에서 수신하고, 워크플로우를 실행하며, 각 실행이 완료된 후 상태를 업데이트합니다.
암호화 키 설정#
n8n은 처음 시작할 때 자동으로 암호화 키를 생성합니다. 원할 경우 환경 변수를 사용하여 사용자 정의 키를 제공할 수도 있습니다.
주요 n8n 인스턴스의 암호화 키는 모든 작업자 및 웹후크 프로세서 노드와 공유되어야 합니다. 이렇게 하면 이러한 작업자 노드가 데이터베이스에 저장된 자격 증명에 접근할 수 있습니다.
각 작업자 노드의 암호화 키를 구성 파일에서 설정하거나 해당 환경 변수를 설정하여 다음과 같이 설정합니다:
1 |
|
실행 모드 설정#
데이터베이스 고려 사항
n8n은 Postgres 13 이상을 사용하는 것을 권장합니다. SQLite 데이터베이스와 함께 queue
로 설정하여 n8n을 실행하는 것은 권장되지 않습니다.
환경 변수 EXECUTIONS_MODE
를 queue
로 설정하려면 다음 명령을 사용합니다.
1 |
|
또는 구성 파일에서 executions.mode
를 queue
로 설정할 수 있습니다.
Redis 시작#
별도의 머신에서 Redis 실행
별도의 머신에서 Redis를 실행할 수 있으며, n8n 인스턴스에서 접근할 수 있도록 해야 합니다.
Docker 컨테이너에서 Redis를 실행하려면 아래 지침을 따르십시오:
다음 명령을 실행하여 Redis 인스턴스를 시작합니다:
1 |
|
기본적으로 Redis는 비밀번호 없이 localhost
의 포트 6379
에서 실행됩니다. Redis 구성에 따라, 주요 n8n 프로세스에서 다음 설정을 지정합니다. 이렇게 하면 n8n이 Redis와 상호작용할 수 있습니다.
구성 파일 사용 | 환경 변수 사용 | 설명 |
---|---|---|
queue.bull.redis.host:localhost |
QUEUE_BULL_REDIS_HOST=localhost |
기본적으로 Redis는 localhost 에서 실행됩니다. |
queue.bull.redis.port:6379 |
QUEUE_BULL_REDIS_PORT=6379 |
기본 포트는 6379 입니다. Redis가 다른 포트에서 실행 중인 경우 값을 구성합니다. |
다음 선택적 구성을 설정할 수도 있습니다:
구성 파일 사용 | 환경 변수 사용 | 설명 |
---|---|---|
queue.bull.redis.username:USERNAME |
QUEUE_BULL_REDIS_USERNAME |
기본적으로 Redis는 사용자 이름이 필요하지 않습니다. 특정 사용자를 사용하는 경우 해당 변수를 구성합니다. |
queue.bull.redis.password:PASSWORD |
QUEUE_BULL_REDIS_PASSWORD |
기본적으로 Redis는 비밀번호가 필요하지 않습니다. 비밀번호를 사용하는 경우 해당 변수를 구성합니다. |
queue.bull.redis.db:0 |
QUEUE_BULL_REDIS_DB |
기본값은 0 입니다. 이 값을 변경하는 경우 구성을 업데이트합니다. |
queue.bull.redis.timeoutThreshold:10000ms |
QUEUE_BULL_REDIS_TIMEOUT_THRESHOLD |
Redis가 사용 불가능할 경우 종료하기 전에 n8n이 얼마나 기다려야 하는지를 지정합니다. 기본값은 10000 (ms)입니다. |
queue.bull.gracefulShutdownTimeout:30 |
N8N_GRACEFUL_SHUTDOWN_TIMEOUT |
프로세스를 종료하기 전에 작업자가 작업을 완료할 수 있도록 하여 정상적으로 종료할 수 있는 타임아웃입니다. 기본값은 30 초입니다. |
이제 n8n 인스턴스를 시작할 수 있으며, Redis 인스턴스에 연결됩니다.
워커 시작#
워크플로우를 실행하기 위해 워커 프로세스를 시작해야 합니다. 별도의 머신에서 워커를 호스팅하려면 해당 머신에 n8n을 설치하고 Redis 인스턴스 및 n8n 데이터베이스에 연결되어 있는지 확인하세요.
루트 디렉토리에서 다음 명령어를 실행하여 워커 프로세스를 시작합니다:
1 |
|
Docker를 사용하는 경우 다음 명령어를 사용하세요:
1 |
|
여러 개의 워커 프로세스를 설정할 수 있습니다. 모든 워커 프로세스가 Redis와 n8n 데이터베이스에 접근할 수 있는지 확인하세요.
워커 서버#
각 워커 프로세스는 선택적 엔드포인트를 노출하는 서버를 실행합니다:
/healthz
:QUEUE_HEALTH_CHECK_ACTIVE
환경 변수를 활성화하면 워커가 작동 중인지 반환합니다./healthz/readiness
:QUEUE_HEALTH_CHECK_ACTIVE
환경 변수를 활성화하면 워커의 DB와 Redis 연결이 준비되었는지 반환합니다.- 자격 증명 덮어쓰기 엔드포인트
/metrics
실행 중인 워커 보기#
기능 가용성
- 셀프 호스팅 엔터프라이즈 플랜에서 사용할 수 있습니다.
- 클라우드 엔터프라이즈에서 이 기능에 대한 액세스를 원하시면 n8n에 문의하세요.
n8n에서 설정 > 워커를 선택하면 실행 중인 워커와 성능 지표를 볼 수 있습니다.
큐와 함께 n8n 실행하기#
큐와 함께 n8n을 실행하면 모든 프로덕션 워크플로우 실행이 워커 프로세스에 의해 처리됩니다. 즉, 웹후크 호출조차 워커 프로세스에 위임되어 오버헤드와 추가 지연이 발생할 수 있습니다.
Redis는 메시지 브로커 역할을 하며, 데이터베이스는 데이터를 지속적으로 저장하므로 둘 다에 대한 접근이 필요합니다. 이 설정으로 SQLite를 사용하는 분산 시스템 실행은 지원되지 않습니다.
데이터 마이그레이션
하나의 데이터베이스에서 다른 데이터베이스로 데이터를 마이그레이션하려면 내보내기 및 가져오기 명령을 사용할 수 있습니다. 이러한 명령을 사용하는 방법에 대한 자세한 내용은 n8n을 위한 CLI 명령 문서를 참조하십시오.
웹후크 프로세서#
유의 사항
웹후크 프로세스는 Redis에도 의존합니다. 웹후크 프로세서 노드를 설정하려면 위의 워커 구성 섹션을 따르세요.
웹후크 프로세서는 n8n의 또 다른 확장 레이어입니다. 웹후크 프로세서 구성은 선택 사항이며, 수신 웹후크 요청을 확장할 수 있습니다.
이 방법은 n8n이 많은 수의 병렬 요청을 처리할 수 있게 해 줍니다. 웹후크 프로세스와 워커를 각각 더 추가하기만 하면 됩니다. 웹후크 프로세스는 동일한 포트(기본값: 5678
)에서 요청을 수신합니다. 이러한 프로세스를 컨테이너나 별도의 머신에서 실행하고 요청을 적절히 라우팅하기 위해 로드 밸런싱 시스템을 갖추세요.
n8n은 주요 프로세스를 로드 밸런서 풀에 추가하는 것을 권장하지 않습니다. 주요 프로세스를 풀에 추가하면 요청을 수신하고 무거운 부하를 받을 수 있습니다. 이로 인해 n8n UI의 편집, 보기 및 상호작용 성능이 저하될 수 있습니다.
루트 디렉토리에서 다음 명령어를 실행하여 웹후크 프로세서를 시작할 수 있습니다:
1 |
|
Docker를 사용하는 경우 다음 명령어를 사용하세요:
1 |
|
웹훅 URL 구성#
웹훅 URL을 구성하려면, 메인 n8n 인스턴스가 실행되고 있는 기계에서 다음 명령어를 실행하세요:
1 |
|
이 값을 구성 파일에 설정할 수도 있습니다.
로드 밸런서 구성#
여러 웹훅 프로세스를 사용하는 경우 요청을 라우팅하기 위해 로드 밸런서가 필요합니다. n8n 인스턴스와 웹훅에 동일한 도메인 이름을 사용하는 경우, 요청을 다음과 같이 라우팅하도록 로드 밸런서를 설정할 수 있습니다:
/webhook/*
와 일치하는 모든 요청을 웹훅 서버 풀로 리다이렉트- 기타 모든 경로(n8n 내부 API, 편집기용 정적 파일 등)는 메인 프로세스로 라우팅해야 합니다.
참고: 수동 워크플로 실행을 위한 기본 URL은 /webhook-test/*
입니다. 이러한 URL이 메인 프로세스로 라우팅되는지 확인하세요.
이 경로는 구성 파일 endpoints.webhook
에서 변경하거나 N8N_ENDPOINT_WEBHOOK
환경 변수를 사용하여 변경할 수 있습니다. 이러한 사항을 변경하면 로드 밸런서를 accordingly 업데이트하세요.
메인 프로세스에서 웹훅 처리 비활성화 (선택 사항)#
워크플로를 실행하기 위해 웹훅 프로세서가 있습니다. 메인 프로세스에서 웹훅 처리를 비활성화할 수 있습니다. 이렇게 하면 모든 웹훅 실행이 웹훅 프로세서에서 실행됩니다. 구성 파일에서 endpoints.disableProductionWebhooksOnMainProcess
를 true
로 설정하여 n8n이 메인 프로세스에서 웹훅 요청을 처리하지 않도록 합니다.
대안으로, 다음 명령어를 사용할 수 있습니다:
1 |
|
메인 프로세스에서 웹훅 프로세스를 비활성화할 때는 메인 프로세스를 실행하고 로드 밸런서의 웹훅 풀에 추가하지 마세요.
워커 동시성 구성#
concurrency
플래그를 사용하여 워커가 병렬로 실행할 수 있는 작업 수를 정의할 수 있습니다. 기본값은 10
입니다. 이를 변경하려면:
1 |
|
동시성 및 스케일링 권장 사항#
n8n은 워커 인스턴스의 동시성을 5 이상으로 설정할 것을 권장합니다. 많은 수의 워커에 대해 동시성 값을 낮게 설정하면 데이터베이스의 연결 풀이 소진되어 처리 지연 및 실패로 이어질 수 있습니다.
멀티 메인 설정#
기능 가용성
- 자가 호스팅된 엔터프라이즈 플랜에서 사용 가능합니다.
- 클라우드 엔터프라이즈에서 이 기능에 액세스하려면 n8n에 문의하세요.
큐 모드에서 높은 가용성을 위해 여러 main
프로세스를 실행할 수 있습니다.
단일 모드 설정에서 main
프로세스는 두 가지 작업 집합을 수행합니다:
- 정규 작업, API 실행, UI 제공, 웹훅 수신 등
- 최대 한 번 작업, 비 HTTP 트리거(타이머, 폴러, RabbitMQ 및 IMAP과 같은 영구 연결) 실행, 실행 및 바이너리 데이터 정리 등
멀티 메인 설정에서는 두 가지 종류의 main
프로세스가 있습니다:
- 추종자, 정규 작업을 실행하고,
- 리더, 정규 작업과 최대 한 번 작업을 모두 실행합니다.
리더 지정#
멀티 메인 설정에서 모든 메인 인스턴스는 사용자에게 투명하게 리더십 프로세스를 처리합니다. 현재 리더가 사용할 수 없게 될 경우(예: 충돌하거나 이벤트 루프가 너무 바쁘게 되면), 다른 추종자가 인계받을 수 있습니다. 이전 리더가 다시 반응하게 되면, 추종자가 됩니다.
다중 메인 설정 구성#
n8n을 다중 메인 설정으로 배포하려면 다음을 확인해야 합니다:
- 모든
main
프로세스가 큐 모드에서 실행되고 있으며 Postgres 및 Redis에 연결되어 있습니다. - 모든
main
및worker
프로세스가 동일한 버전의 n8n을 실행하고 있습니다. - 모든
main
프로세스가 환경 변수N8N_MULTI_MAIN_SETUP_ENABLED
를true
로 설정했습니다. - 모든
main
프로세스가 세션 지속성(스티키 세션)이 활성화된 로드 밸런서 뒤에서 실행되고 있습니다.
필요한 경우 리더 키 옵션을 조정할 수 있습니다:
구성 파일 사용 | 환경 변수 사용 | 설명 |
---|---|---|
multiMainSetup.ttl:10 |
N8N_MULTI_MAIN_SETUP_KEY_TTL=10 |
다중 메인 설정에서 리더 키의 TTL(초 단위)입니다. |
multiMainSetup.interval:3 |
N8N_MULTI_MAIN_SETUP_CHECK_INTERVAL=3 |
다중 메인 설정에서 리더 체크 간격(초 단위)입니다. |
유의 사항
다중 메인 설정에서는 모든 main
프로세스가 웹후크를 수신하므로 webhook
프로세스와 동일한 역할을 수행합니다. 다중 메인 설정에서 webhook
프로세스를 실행하는 것은 필요하지 않으며 허용되지 않습니다.