티스토리 뷰
●도커 스웜(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.?????
구동중이던 컨테이너가 종료됐고, 이를 복구하기 위한 컨테이너가 생성됐음을 확인가능
'클라우드,가상화,방화벽' 카테고리의 다른 글
[Kubernetes]쿠버네티스 - 1 (1) | 2023.06.05 |
---|---|
ASA방화벽-1 (0) | 2023.05.24 |
[docker]도커 파일 (0) | 2023.05.22 |
컨테이너 어플리케이션, 도커(네트워크, 이미지) (0) | 2023.05.18 |
AWS-EC2 서버, Route53(DNS), elasticIP, 도메인 연결 (0) | 2023.05.09 |