Docker

[Docker] Docker Swarm이란? (1)

hanrabong 2022. 4. 6. 15:49

 

 

Docker Swarm


 Docker Swarm 모드는 Docker engine에 내장되어 있고 cluster 관리 및 orchestration 기능을 해줍니다. Docker swarm 모드는 간단한 Docker CLI를 이용하여 실행시킬 수 있습니다.

 

 swarm 모드라고 하면 docker host 여러 개로 이루어져 있다고 생각하면 됩니다. 각 docker host는 manager node 또는 worker node 아니면 둘 다의 역할로써 동작합니다. manager mode는 말 그대로 manage(관리)를 합니다. worker node에 대해서 manage 하는 node를 manager node라고 하고 worker node는 container를 실행시키는 node라고 알고 있으면 됩니다. 위에서 manager node와 worker node 역할을 둘 다 할 수 있다고 했는데 manager node에서도 container를 실행시킬 수 있습니다. 더 자세한 이야기는 밑에서 docker swarm이 어떻게 동작하는지 얘기를 하면서 말해보겠습니다. 

 

 

Node 들이 어떻게 동작을 할까?


manager node & worker node

 Docker swarm 모드에서 docker host들은 manager node 또는 worker node 또는 manager 와 worker 둘 다의 역할을 할 수 있습니다. worker node 없이 manager node로만 docker swarm을 구성할 수 있지만, worker node만으로는 구성을 할 수 없습니다.

 

 Manager Node는 cluster 상태를 유지 및 관리하고 services들을 scheduling합니다. 또한 swarm mode의 HTTP API endpoint를 제공합니다. Raft를 사용하여 전체 swarm과 swarm에서 실행되는 모든 service의 일관된 상태를 유지합니다. 일관된 상태라는 것은 만약에 nginx container를 3개 만들라는 service가 들어오면 swarm의 manager node는 어떻게든 3개를 유지하려고 합니다. worker node에게 task를 dispatch하였는데 container가 생성이 안되면 재 생성을 하거나 task(container)가 실행되고 있는 node가 다운되었을 경우 다른 node에게 task를 주어서 service의 상태를 유지하려고 합니다. worker node에 task를 할당하는 방법은 다음 블로그에서 살펴보겠습니다.

 

 Worker Node는 manager node에게로부터 dispatch 받은 task를 실행시킵니다. task라는 것은 Docker container와 container 내부에서 실행되는 명령어를 합친 것이라고 보면 됩니다. Worker node에는 agent가 실행되고 할당된 task에 대해서 보고합니다. 이로 인해 manager node는 할당된 task의 상태를 확인하여 worker node의 원하는 상태를 유지할 수 있습니다. 

 Manager node의 경우 worker node로써도 동작을 할 수 있다고 했는데 manger node에 container를 올리지 않고 관리용으로만 동작하게 할 수 있습니다. Docker swarm에서 manager node의 상태를 Drain mode로 설정을 하면 manager node에서는 task가 실행이 안됩니다.

 

 

Manager Node는 몇 개가 적당할까?


 위에서 Manager node가 cluster를 관리한다고 했습니다. manager node가 한 개 일 때 이 node에 문제가 발생하면 어떻게 될까요? 서비스는 계속 실행이 될 수 있지만, 복구를 하기 위해서 새로운 cluster를 생성해야 합니다. Docker swarm 모드의 fault-tolerance 특징의 이점을 사용하기 위해서 docker에서는 홀수 개의 manager node를 사용하기를 권장합니다. 여러 개의 manager node 사용으로 인해 고가용성과 manager node의 장애로부터 downtime 없이 복구할 수 있습니다.

 

 3 개의 manager swarm은 1 개의 manager node 장애까지 수용할 수 있습니다. N개의 manager cluster있을 경우 (N-1)/2 개의 매니저 손실을 수용합니다. 

그럼 manager node 갯수는 최대 몇 개까지 가능할까요?

Docker recommends a maximum of seven manager nodes for a swarm.

도커 공식 문서를 보면 swarm 모드에서 최대 7개 manager node까지 사용할 것을 권장한다고 합니다. 더 많은 manager node를 사용하는 것이 확장성이나 성능을 향상 시키는 것이 아니라고 합니다.

 

 

 

※ 틀리거나 궁금한 점은 댓글 달아주세요

 

 

참고자료

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/

 

How nodes work

 

docs.docker.com

 

'Docker' 카테고리의 다른 글

[Docker] Docker Swarm이란? (2)  (0) 2022.04.14
[Docker] Nestjs와 Mysql 연결 (Container 간 연결)  (2) 2022.03.12