노드(Node)는 어떻게 동작하나요?

노드(Node)는 어떻게 동작하나요?

Swarm 모드에서는 하나 이상의 Docker Engine을 묶어서 클러스터를 만들 수 있는데, 이걸 스웜(swarm)이라고 해요. 스웜은 하나 이상의 노드(node)로 구성되며, 노드는 Docker Engine이 실행되는 물리적 또는 가상 머신을 뜻해요. 노드에는 관리자(manager)와 작업자(worker) 두 가지 유형이 있어요. 아직 Swarm 모드 개요와 핵심 개념을 읽지 않으셨다면 먼저 읽어보시는 걸 추천할게요.

출처: 공식문서

본문

관리자 노드

관리자 노드는 클러스터 관리 작업을 담당해요:

Raft 구현을 사용해서 관리자들은 전체 스웜과 그 위에서 실행되는 모든 서비스의 내부 상태를 일관되게 유지해요. 테스트 목적으로는 관리자 하나만으로 스웜을 운영해도 괜찮아요. 관리자가 하나뿐인 스웜에서 그 관리자가 실패하면 서비스는 계속 실행되지만, 복구하려면 새 클러스터를 만들어야 해요.

Swarm 모드의 내결함성(fault-tolerance) 기능을 활용하려면 조직의 고가용성 요구사항에 따라 홀수 개의 노드를 구성하는 걸 권장해요. 관리자가 여러 대 있으면 관리자 노드 하나가 실패해도 다운타임 없이 복구할 수 있어요.

  • 관리자 3대 스웜은 최대 1대의 관리자 손실을 허용해요.
  • 관리자 5대 스웜은 최대 2대의 관리자 노드가 동시에 손실돼도 견뎌요.
  • 클러스터에 관리자 노드가 홀수 N개 있으면 최대 (N-1)/2대의 관리자 손실을 허용해요.

Docker는 스웜에 최대 7대의 관리자 노드를 권장해요.

중요

관리자를 더 추가한다고 확장성이나 성능이 좋아지는 건 아니에요. 일반적으로는 오히려 반대예요.

작업자 노드

작업자 노드도 Docker Engine 인스턴스이지만, 컨테이너를 실행하는 것이 유일한 목적이에요. 작업자 노드는 Raft 분산 상태에 참여하지 않고, 스케줄링 결정을 내리지도 않으며, Swarm 모드 HTTP API도 제공하지 않아요.

관리자 노드 하나만으로 스웜을 만들 수 있지만, 관리자 노드가 최소 하나는 있어야 작업자 노드를 가질 수 있어요. 기본적으로 모든 관리자는 작업자이기도 해요. 관리자 노드 하나만 있는 클러스터에서는 docker service create 같은 명령을 실행할 수 있고, 스케줄러가 모든 태스크를 로컬 엔진에 배치해요.

멀티 노드 스웜에서 관리자 노드에 태스크를 배치하지 않으려면 해당 관리자 노드의 availability를 Drain으로 설정하면 돼요. 스케줄러는 Drain 모드의 노드에서 실행 중인 태스크를 정상적으로 중지하고, Active 노드에 그 태스크를 스케줄링해요. Drain 상태인 노드에는 새 태스크를 할당하지 않아요.

노드 availability를 변경하는 방법은 docker node update 명령줄 참조를 확인하세요.

역할 변경

docker node promote 명령으로 작업자 노드를 관리자로 승격할 수 있어요. 예를 들어 관리자 노드를 유지보수로 오프라인으로 전환해야 할 때 작업자 노드를 승격하고 싶을 수 있겠죠. node promote를 참고하세요.

관리자 노드를 작업자 노드로 강등할 수도 있어요. node demote를 참고하세요.

더 알아보기 (Learn more)

  • Swarm 모드 서비스가 어떻게 동작하는지 읽어보세요.
  • Swarm 모드에서 PKI가 어떻게 동작하는지 알아보세요.