Docker Cluster (Linux)

Docker cluster - swarm

Docker 는 cluster를 구성 하기위해서 swarm 이란 기능을 사용합니다.

1. cluster란 무엇인가?

1) 탄생 배경

  • 서버의 부하를 줄이고 최대의 가용성을 뽑아내기 위해서 나온 기술 입니다.

2) 구현 방식

  • cluster를 구성 하기 위해서는 manager-node와 worker-node가 필요 합니다.
  • manger-node: worker-node를 관리 합니다.
  • worker-node: service를 제공합니다.
  • cluster는 worker node를 묶어서 서비스를 제공 합니다.

3) 동작 원리

  • Web 서비스를 예를 들면 한개의 도메인(google.com)에 cluster로 묶인 서버(worker-node)를 사용하여 서비스를 제공할 경우 사용자는 매번 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.

DOCKER Cluster 구조

5. Docker swarm mode의 Load Balancing 방식

  • 외부에서 어떤 host에 접근 하더라도 IPVS와 ingress network를 사용하여 worker-node들이 제공하는 모든 task에 접속 가능 합니다.

DOCKER warm mode의 Load Balancing 구조

6. Docker swarm mode 사용법

1) swarm mode cluster 구축

1
$ docker swarm init --advertise-addr 10.0.8.92

swarm mode cluster 생성

2) node 생성
(1) manager node 생성

  • swarm init을 수행 곳이 manager node가 됩니다.

(2) worker-node 생성

  • swarm mode cluster에 참여 하면 worker-node가 됩니다.
  • 참여 방법은 docker swarm init 을 했을 때 나오는 명령어를 사용하여 cluster 참여가 가능 합니다.
1
$ docker swarm join --token SWMTKN-1-2zrp09019pe22hd1tw7grbjbcdwhkzopw5bkk1jwvi6lzr6mkc-0faquay497st4jnsiru1ibuc1 10.0.8.92:2377
  • 나중에 cluster 참가 token을 잊어버리는 경우에는 docker swarm join-token worker 명령어로 확인 가능 합니다.
    cluster 참가 token 확인

(3) node 제거

1
$ docker swarm rm {node name}

node 제거

(4) cluster 종료

1
$ docker swarm leave [--force]
  • –force 는 manager node가 cluster를 떠날 때 사용 합니다.

cluster 종료

3) cluster 상태 확인

1
$ docker node ls
  • MANAGER STATUS에서 Leader로 되어있는 node가 manager node 입니다.

cluster 상태 확인

4) node에 service 배포 하기 (manager-node에서만 가능)

1
$ docker service create --name myweb --replicas 2 -p 80:80 nginx
  • – name: service 이름
  • – replicas: 생서 할 task의 개수
  • -p: port mapping
  • nginx: service할 image 파일

node service 배포

5) service 개수 조절 하기

1
$ docker service scale myweb=4
  • scale: task 개수를 조절 하겠다는 의미
  • myweb = 4: myweb service의 task를 4개로 한다.

service 개수 조절

6) service 삭제 하기

1
$ docker service rm myweb
  • myweb : 삭제할 service 이름

6. Docker swarm mode TEST

  • manager-node 에서 service를 올렸지만 worker-node에 접속을 해도 잘 나오는 것을 확인 할수 있습니다.
  1. 10.0.8.92(master-node)
  2. 10.0.8.100(worker-node)

swarm mode TEST

docker swarm은 부하 분산을 하기위해서 web서비스에서 꼭 필요한 기능 입니다.

참조

공유하기