티스토리 뷰

●도커 스웜(swarm mode)

도커 스웜은 하나의 호스트 머신에서 도커 엔진을 구동하다가 여러대의 다른 서버를 클러스터로 만들어 자원을 병렬적으로 확장해 하나의 호스트로다른 서버에 있는 도커 컨테이너들을 제어할 수 있는 오픈소스 솔루션이다.

 

스웜 클래식은 여러 대의 도커 서버를 하나의 지점에서 사용하도록 단일 접근점을 제공한다면 스웜 모드는 클러스터링 기능에 초점을 맞추고 있다. 여러 개의 도커 서버를 하나의 클러스터로 구성하려면 각종 정보를 저장하고 동기화하는 분산 코디넹터, 클러스터 내의 서버를 관리하고 제어하는 매니저, 각 서버를 제어하는 에이전트를 별도로 실행해야 하지만 스웜 모드는 클러스터링을 위한 모든 도구가 도커 엔진 자체에 내장되어 있다.

●도커 스웜(swarm mode)

스웜 모드는 매니저 노드와 워커(Worker) 노드로 구성돼 있다. 워커 노드는 실제로 컨테이 너가 생성되고 관리되는 도커 서버이고 매니저 노드는 워커 노드를 관리하기 위한 도커 서버 이다. 기본적으로 매니저 노드는 워커 노드의 역할을 포함하고 있다. 매니저 노드는 1개 이상이어야 하지만 워커 노드는 없을 수도 있다.


도커 실습 환경(Manager - worker1 - worker2)

★Manager

vi /etc/hostname  -> manage

vi /etc/sysconfig/network-scripts/ifcfg-ens33

-> (vmnet8-nat)

TYPE=Ethernet

BOOTPROTO=static

NAME=ens33

DEVICE=ens33

ONBOOT=yes

IPADDR=192.168.0.100

NETMASK=255.255.255.0

NETWORK=192.168.0.0

GATEWAY=192.168.0.2

ROADCAST=192.168.0.255

DNS1=192.168.0.2

DNS2=168.126.63.1

 

★worker1

vi /etc/hostname  -> worker1

vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet

BOOTPROTO=static

NAME=ens33

DEVICE=ens33

ONBOOT=yes

IPADDR=192.168.0.101

NETMASK=255.255.255.0

NETWORK=192.168.0.0

GATEWAY=192.168.0.2

ROADCAST=192.168.0.255

DNS1=192.168.0.2

DNS2=168.126.63.1

 

★worker2

vi /etc/hostname  -> worker2

vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet

BOOTPROTO=static

NAME=ens33

DEVICE=ens33

ONBOOT=yes

IPADDR=192.168.0.102

NETMASK=255.255.255.0

NETWORK=192.168.0.0

GATEWAY=192.168.0.2

ROADCAST=192.168.0.255

DNS1=192.168.0.2

DNS2=168.126.63.1

 

firewall-config ->docker swarm

방화벽에서 도커 스웜을 해제해준다.

 

docker swarm init --advertise-addr 192.168.0.100

해서 나온 [docker swarm join --token ???????????? 192.168.0.100:2377] 을 워커노드로 설정할 서버에 입력

 

도커 스웜 조인트확인법

docker node ls

추가된 워커 노드를 삭제하려면 워커 노드에서 다음과 같이 한다.

docker swarm leave

워커 노드가 떠나면 매니저 노드는 해당 워커 노드의 상태를 Down으로 인지할 뿐이다. 따라서 매니저 노드에서 해당 워커 노드를 삭제해야 한다.

docker node ls
docker node rm [node ID]

매니저 노드는 docker swarm leave 명령어에 --force 옵션을 추가

docker swarm leave --force

스웜 모드 서비스

-스웜 모드 서비스 개념-

도커 명령어의 제어 단위는 컨테이너(container)이다. 그러나 스웜모드 제어 단위는 서비스(service)이다.

서비스는 같은 이미지에서 생성된 컨테이너의 집합이며. 서비스를 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

 

1) 첫 번째 서비스 생성해보기

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

서비스 내의 컨테이너 를 생성하며 동시에 1초마다 “hello world’를 출력

 

 

노드가 worker2 잡혀있어서 해당 서버로 가서

 

컨테이너에 접근하니까 "hello world" 1초마다 실행되고 있다.

 

2) nginx 웹 서버 서비스 생성하기

두 개의 레플리카 컨테이너를 생성하고 각 노드의 80번 포트에 노출해 보자

docker service create --name myweb --replicas 2 -p 80:80 nginx
docker service ps myweb

파이어 폭스로 "http://192.168.0.101"로 접근해 본다.

레플리카 컨테이너의 수를 4개로 늘려보자

docker service scale myweb=4

지금껏 했던 서비스 모드는 복제(replicated)모드이고 다른 하나는 글로벌(global) 모드로 클러스터 내의 모든 노드에 컨테이너를 하나씩 생성한다. 따라서 레플리카 셋의 수를 방금처럼 별도로 지정하지 않는다.

 docker service create --name global_web --mode global nginx

다음과 같이 --mode global으로 복제모드 사용 가능


스웜 모드 장애 복구

worker2노드에 가서 컨테이너를 삭제

docker rm -f myweb.3.?????

구동중이던 컨테이너가 종료됐고, 이를 복구하기 위한 컨테이너가 생성됐음을 확인가능

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함