기타

Docker Swarm 분산 서버 관리

rrojin 2021. 4. 19. 14:41

 

분산 서버 관리 왜 필요한가?

 전세계 CDN 네트워크상에서 안정적인 서비스를 제공하기 위함.

따라서, 컨테이너 기술은

1) Light = 메인메모리 적게 차지 뿐만 아니라,

2) 수요에 따라 컨테이너 수 조절 (auto scale up, down) = Orchestration 필요 [ -> ex. 도커 Swarm] 

                                  

Container Orchestration

Container Orchestration : 여러 대의 서버와 여러 개의 서비시를 관리해주는 작업.

 

[기능]

스케쥴링 : 컨테이너를 적당한 서버에 배포해 주는 작업. 배포 기준은 오케스트레이션 툴에 따라 다름. (차례대로/ 랜덤/ 가장 한가로움?) 실행중인 서버가 죽으면 자동으로 다른 서버에 띄어줌.

 

클러스터링 :  여러 개의 서버를 묶어서 하나의 서버처럼 사용할 수 있음. 가상 네트워크를 사용하여 마치 같은 서버에 있는 것처럼 통신할 수 있음 -> 내부 Private IP 주소 사용

 

서비스 디스커버리 : 분배된 컨테이너의 서비스를 찾아주는 기능. 어느 서버에서 실행 중인지 알아야하기에 생성 및 중지 시 IP, Port 정보등을 업데이트해야함. key-value 스토리지 저장 혹은 내부 DNS서버 이용가능.

 

로깅, 모니터링 : 로그와 서버 상태를 한 곳에서 관리 

 

Docker Swarm 이란?

 Container Orchestration 기술중 하나.

-> 컨테이너를 실행할 서버를 고르고 정보를 관리하는 것까지 자동으로 구현하기!

여러 컨테이너를 Cluster하여 하나의 virtual 컨테이너로 관리. 각 컨테이너의 상태를 모니터링하고 필요에 따라 자동으로 host내의 컨테이너 수를 조절한다. (Auto-Scaling) 

* 현재 Swarm 기술의 시장 점유율 < 구글의 Kubernetes

 

Docker Swarm 작동방식?

Worker - Leader(manager) 구조로 작동.

각 독립적인 host의 worker node(다수)와 manager node(1개)가 존재. (node = 도커 서버의 단위)

leader가 worker들의 상태를 모니터링하고 자동으로 프로세스를 분배해줌 

 

Docker Swarm 실습 

[1] Creating a docker cluster 

0) 2개의 AWS 인스턴스 준비 -> 1개의 worker node & leader node 

leader node와 worker node는 RPC통신을 하므로 인바운드 규칙에서 port 2377 열어놔야함.

* RPC(Remote Procedure call) : 위치에 상관없이 원하는 함수, 프로시저를 실행할 수 있게 해주는

프로세스간 통신

1) docker swarm init --advertise-add=<leader가 될 서버의 Private IP address> #leader 실행

위 명령어 성공 시, docker worker 실행을 위한 커맨드가 나옴 

2) (결과 커맨드 복붙) docker join --token ~~~~

3) docker node ls #node 상황 확인 (worker 와 leader node 표시됨 : host 명 = 각 서버 private IP 주소)

 

[2] Deploy an app(container cluster) on docker swarm

- Creating Service

(docker service = worker node에서 실행되는 docker container)

1) docker service create --name <service 이름> --replicas <# of replicas> -p <port mapping ex. 5000:80> <image name ex. docker file 내장>

2) docker service ls 

3) docker ps

4) docker rm -f $(sudo docker ps -a -q) # 프로세스 제거해보기 

5) docker ps  #위에서 제거한 프로세스가 자동으로 바로 생성된 거 확인 가능, Auto-scaling 확인 가능

6) docker service scale <service 이름>=<#of service instances> #scale up/ down 지정 가능

- Removing a service

docker service rm <service 이름>

docker swarm leave # in Worker

docker swarm leave --force # in Leader

 

 

 

'기타' 카테고리의 다른 글

LSTM으로 주식 가격 예측하기  (0) 2022.12.05
Torch 기본  (0) 2022.12.02
논문 리뷰 파이프라인  (2) 2022.05.03
[Review] Matchmaking in Lyft Line  (0) 2022.01.14