[Docker] 도커 스웜 모드

2020. 7. 22. 09:08Cloud

왜 스웜이 필요한가?

하나의 호스트 머신 또는 가상머신에서 도커 엔진을 구동하여 컨테이너를 운영할 때, 하드웨어 자원이 부족한 경우가 있다. 여러 대의 서버 클러스터링하여 필요에 따라 자원을 스케일 아웃, 병렬 확장하는 방식으로 이를 해결한다.

스웜은 여러 대의 도커 서버를 하나의 풀, 즉 클러스터로 묶어 컨테이너 생성 및 관리하는 데 용이하다.


스웜 2가지 유형

도커 스웜/ 스웜 클래식 스웜 모드
MSA 컨테이너 대상으로 클러스터링 목적 여러 대의 도커 서버를 단일 지점에서 사용
분산 코디네이터에이전트와 같은 클러스터링 '툴' 필요 도커 엔진 자체 내장
에이전트 컨테이너로 각 컨테이너 생성 및 관리  동시에 여러 개 컨테이너 생성 및 관리(수 조절), 로드밸런싱

도커 스웜 모드 구조

[ 매니저 노드 + 워커 노드 ]

※ 권장 사항

  • 스웜 매니저 노드는 1개 이상
  • 스웜 매니저 노드 개수는 홀수로 구성 → 스웜 서비스 장애로 중단되었을 때 데이터 일관성 유지 가능

다음 명령어는 'Docker Quickstart Terminal'에서 작성한다.

도커 스웜 모드 활성화

도커 엔진 자체에 스웜 모드가 내장되어 있으므로, 활성화 여부를 확인해야 한다.

docker info | grep Swarm
// Swarm: inactive

여기서 총 3개의 virtualbox 기반 VM, 노드(default, my-node1, my-node2)가 생성되어 있다는 전제로 한다.

docker-machine create --driver virtualbox default
docker-machine create --driver virtualbox my-node1
docker-machine create --driver virtualbox my-node2

Docker 호스트를 확인해서 생성여부를 확인한다.

docker-machine ls

스웜 모드로 구조화

  • 스웜 매니저 노드: default

  • 스웜 워커 노드: my-node1, my-node2

1. 스웜 매니저 노드로 지정할 host, 즉 default를 active해준다. '$ docker-machine env default'는 호스트 default의 환경변수를 출력한다. 명령어 eval로 출력된 환경 변수로 현재 도커의 환경 변수로 지정해 준다.

eval $(docker-machine env default)

'$ docker-machine ls'로 활성화 확인

docker-machine ls

2. 매니저 노드 ip를 이용하여 swarm의 leader로 지정한다.

docker swarm init --advertise-addr 192.16.99.100

해당 명령어 입력 후, 출력되는 docker 명령어를 메모장에 저장한다. 이 명령어는 스웜에 워커노드를 추가할 때 사용된다.

docker swarm join --token [발급된 토큰] 192.168.99.100:2377 

활성화된 매니저 노드, 즉 default 노드에서 스웜 클러스터의 상태를 확인해본다.

docker node ls