분산 서버 관리 왜 필요한가?
전세계 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 |