[Docker] 도커 스웜

공혁준·2022년 5월 28일
0

Docker

목록 보기
8/9
post-thumbnail

📌 도커 스웜에 대해 다룹니다.

도커 스웜을 사용하는 이유

하나의 호스트 머신에서 도커 엔진을 구동하다가 CPU, 메모리, 디스크 용량이 부족해지면 어떡할까?
👉 더 좋은 성능의 서버를 새로 산다 or 서버를 병렬적으로 확장한다

그러나 여러 대의 서버를 하나의 자원 풀로 만드는 것은 쉬운 작업이 아니다!

이러한 문제를 해결하는 것이 바로 도커 스웜(docker swarm)스웜 모드(swarm mode)

스웜 클래식과 도커 스웜 모드

스웜 클래식과 도커 스웜 모드는 여러 대의 도커 서버를 하나의 클러스터로 만들어 컨테이너를 생성하는 여러 기능을 제공

스웜 클래식

  • 도커 버전 1.6 이후부터 사용할 수 있는 컨테이너로서의 스웜
  • 여러 대의 도커 서버를 하나의 지점에서 사용하도록 단일 접근점 제공

도커 스웜 모드

  • 도커 버전 1.12 이후부터 사용할 수 있는 도커 스웜 모드
  • 마이크로서비스 아키텍처의 컨테이너를 다루기 위한 클러스터링 기능에 초점을 맞춤
  • 컨테이너로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원
  • 확장성과 안정성 등 여러 측면에서 스웜 클래식보다 뛰어나서 일반적으로 스웜 클래식보다 많이 사용

스웜 모드

도커 스웜 모드의 구조

스웜 모드는 매니저 노드와 워커 노드로 구성돼 있음

매니저 노드

  • 워커 노드들을 관리하기 위한 도커 서버
  • 매니저 노드에도 컨테이너가 생성될 수 있음
  • 기본적으로 워커 노드의 역할을 포함

워커 노드

  • 실제로 컨테이너가 생성되는 도커 서버

매니저 노드는 1개 이상이 있어야 하지만 워커 노드는 없을 수도 있다.

❗️ 만약 매니저 노드 사이에 네트워크 파티셔닝과 같은 현상이 발생하면 짝수 개의 매니저로 구성한 클러스터는 운영이 중단될 수 있음. 하지만 홀수 개로 구성했을 경우에는 과반수 이상이 유지되는 쿼럼 매니저에서 운영을 계속 할 수 있다. 따라서 스웜 매니저는 가능한 한 홀수 개로 구성하는 것이 권장됨.

도커 스웜 모드 클러스터 구축

docker swarm init --advertise-addr [매니저 노드의 IP 주소]

docker swarm init 명령어로 매니저 역할을 할 서버에서 스웜 클러스터를 시작한다.

위 명령어를 실행하면 docker swarm join 명령어를 사용할 때 필요한 비밀키 값이 나온다.

docker swarm join \
--token [비밀키]

특정 도커 서버가 정상적으로 스웜 클러스터에 추가됐는지 확인하려면 매니저 노드에서 docker node ls 명령어를 입력한다.

매니저 노드를 추가하려면 매니저 노드를 추가하기 위한 토큰을 확인해줘야 하는데, 이는docker swarm join-token manager 명령어로 확인할 수 있다.

docker swarm join-token manager

추가된 워커 노드를 삭제하고 싶으면 해당 워커 노드에서 docker swarm leave 명령어를 입력한다.

스웜 모드 서비스

스웜 모드에서 제어하는 단위는 컨테이너가 아닌 서비스(Service)이다.

서비스는 같은 이미지에서 생성된 컨테이너의 집합이다. 서비스 내에 컨테이너는 1개 이상 존재할 수 있고, 컨테이너들은 각 워커 노드와 매니저 노드에 할당된다. 이러한 컨테이너들을 태스크(Task)라고 한다.

서비스 생성

서비스를 제어하는 도커 명령어는 전부 매니저 노드에서만 사용할 수 있다.

docker service create \
ubuntu:14.04 \
/bin/sh -c "while true; do echo hello world; sleep 1; done"

스웜 클러스터 내의 서비스 목록은 docker service ls 명령어로 확인할 수 있다.
생성된 서비스를 삭제하려면 docker service rm 명령어를 사용한다.

global 서비스 생성

서비스의 두 가지 모드

  • 복제 모드: 레플리카셋의 수를 정의해 그만큼의 같은 컨테이너를 생성
  • 글로벌 보드: 스웜 클러스터 내에서 사용할 수 있는 모든 노드에 컨테이너를 반드시 하나씩 생성
docker service create --name global_web \
--mode global \
nginx

스웜 모드의 서비스 장애 복구

스웜 매니저는 복제 모드로 설정된 서비스의 컨테이너가 정지되거나 특정 노드가 다운되면 자동으로 이를 복구한다.

하지만 재균형(rebalance) 작업은 직접 해주어야 한다.
docker service scale 명령어를 사용한다.

profile
몰입을 즐기는 개발자입니다.

0개의 댓글