6. Docker cluster - swarm (리눅스 용)
▶관련 포스트◀
2. Docker 가상화 서버 설치 및 image 다운로드 (리눅스용)
3. Docker Container 관리 (리눅스 용)
5. Docker Image 만들기 / 삭제 (Linux 용)
6. Docker cluster - swarm (리눅스 용)
▶[서론]
- 이번 포스트에서는 Docker의 Cluster를 알아 보겠습니다.
- Docker 는 cluster를 구성 하기위해서 swarm 이란 기능을 사용합니다.
▶[본론]
1. cluster란 무엇인가??
1) 탄생 배경
- 서버의 부하를 줄이고 최대의 가용성을 뽑아내기 위해서 나온 기술 입니다.
2) 구현 방식
- cluster를 구성 하기 위해서는 manager-node와 worker-node가 필요 합니다.
* manger-node
- worker-node를 관리 합니다.
* worker-node
- service를 제공합니다.
- cluster는 worker node를 묶어서 서비스를 제공 합니다.
3) 동작 원리
- Web 서비스를 예를 들면 한개의 도메인(www.google.com)에 cluster로 묶인 서버(worker-node)를 사용하여 서비스를 제공할 경우
사용자는 매번 www.google.com에 접속시 cluster로 묶인 서버(worker-node) 중 한대를 접속 할 수 있게 됩니다.
2. docker swarm이란 무엇인가?
- Docker에서 제공하는 cluster 입니다.
- 제공하는 기능은 다음과 같습니다
1) docker engine 통합 관리
- docker manager-node에서 worker-node를 통합 관리 할 수 있습니다.
2) load balancing
- 부하 분산 기능으로 외부에서 worker-node 접속시 round robin 방식으로 worker-node의 task를 연결 해 줍니다.
3) task 개수 조절 기능 (scale)
- scale 옵션을 통하여 service할 task의 개수를 조절 합니다.
* task는 node에서 제공하는 docker swarm에서 생성한 service를 의미 하며 service는 container와 동일 한 역활을 합니다.
단지 swarm에서 구분을 하기위 해서 task라고 사용 합니다.
4) multi-host-networking
- overlay network 를 통하여 task 간 사용할 수 있는 네트워크를 제공
5) 내장 DNS 서버 제공
- service에서 DNS name을 할 당하여 swarm 내에있는 node에서는 내장 DNS 서버를 사용 할 수 있습니다.
3. docker swarm의 종류
1) docker warm mode
- manager-node와 worker-node가 한 host에 공존하는 모드, 즉 manager-node또 worker-node 기능을 수행 하는 모드 입니다
2) docker swarm
- manager-node와 worker-node를 따로 구성 하는 모드(대규모 에서 사용합니다)
4. docker swarm mode 물리 적인 구조
- manager-node 및 worker-node는 docker warm생성시 제공하는 ingress(overlay network) 로 연결 되어 있습니다.
- ingress(overlay-network)는 task간의 통신 및 load balancing 할 때만 사용 이 됩니다.
- Load balancing은 IPVS 라는 기술을 사용하여 수행 됩니다.
* IPVS (IP Virtual Server) implement s transport-layer load balancing, usually called Layer 4 LAN switching,
as part of the Linux kernel. It's configured via the user-space utility ipvsadm tool.
(위키피디아 발췌: https://en.wikipedia.org/wiki/IP_Virtual_Server)
5. docker swarm mode의 Load Balancing 방식
- 외부에서 어떤 host에 접근 하더라도 IPVS와 ingress network를 사용하여 worker-node들이 제공하는 모든 task에 접속 가능 합니다.
5. docker swarm mode 사용법
1) swarm mode cluster 구축
# docker swarm init --advertise-addr 10.0.8.92
2) node 생성
(1) manager node 생성
- swarm init을 수행 곳이 manager node가 됩니다.
(2) worker-node 생성
- swarm mode cluster에 참여 하면 worker-node가 됩니다.
- 참여 방법은 docker swarm init 을 했을 때 나오는 명령어를 사용하여 cluster 참여가 가능 합니다.
#docker swarm join --token SWMTKN-1-2zrp09019pe22hd1tw7grbjbcdwhkzopw5bkk1jwvi6lzr6mkc-0faquay497st4jnsiru1ibuc1
10.0.8.92:2377
- 나중에 cluster 참가 token 까먹었을 때는 docker swarm join-token worker 로 확인 가능 합니다.
(3) node 제거
#docker swarm rm {node name}
(4) cluster 떠나기
#docker swarm leave [--force]
> --force 는 manager node가 cluster를 떠날 때 사용 합니다.
3) cluster 상태 확인
#docker node ls
- MANAGER STATUS에서 Leader로 되어있는 node가 manager node 입니다.
4) node에 service 배포 하기 (manager-node에서만 가능)
#docker service create --name myweb --replicas 2 -p 80:80 nginx
> -- name : service 이름
> -- replicas : 생서 할 task의 개수
> - p : [외부에서 접속 포트]:[docker 내부 포트]
> nginx : service할 image 파일
5) service 개수 조절 하기
#docker service scale myweb=4
> scale : task 개수를 조절 하겠다는 의미
> myweb = 4 : myweb service의 task를 4개로 한다.
6) service 삭제 하기
#docker service rm myweb
> myweb : 삭제할 service 이름
5. docker swarm mode TEST
- manager-node 에서 service를 올렸지만 worker-node에 접속을 해도 잘 나오는 것을 확인 할수 있습니다.
- 접속이 안될 시 확인 필요 사항
sysctl net.ipv4.ip_forward 값이 1인지 확인 필요
* 0 일시 /etc/sysctl.conf 에서 net.ipv4.ip_forward 을 1로 변경후 주석 제거후 sysctl -p로 변경된 사항 확인
1) 10.0.8.92(master-node)
2) 10.0.8.100(worker-node)
[결론]
- docker swarm은 부하 분산을 하기위해서 web서비스에서 꼭 필요한 기능 입니다.
'Cloud > Docker' 카테고리의 다른 글
8. Dockerfile 과 Docker-compose.yml (0) | 2020.07.09 |
---|---|
7. Docker - cheat sheet (0) | 2019.05.03 |
5. Docker Image 만들기 / 삭제 (리눅스 용) (0) | 2019.02.19 |
4. Docker 네트워크 (리눅스 용) (0) | 2019.01.31 |
3. Docker Container 관리 (리눅스 용) (2) | 2019.01.30 |