도커 스웜 모드는 실제 운영 환경에서 많이 쓰이지는 않음
별도의 설치 과정이 필요하지 않으며 도커 엔진 자체에 내장되어 있음
EX) 도커 엔진의 스웜 모드 클러스터 정보를 확인
$ docker info | grep Swarm
Swarm: inactive
비활성화 되어 있음
워커(Worker) 노드
매니저 노드
매니저 노드는 1개 이상이 있어야 하지만 워커 노드는 없을 수 있음
매니저 노드가 워커 노드의 역할도 포함하고 있어 매니저 노드만으로 스웜 클러스털르 구성 가능
그러나 일반적으로 워커 노드와 매니저 노드를 구분해서 사용하는 것을 권장
실제 운영 환경에서 스웜 모드로 도커 클러스터를 구성하려면 매니저 노드를 다중화하는 것을 권장. 이렇게 하면 매니저의 부하를 분산하고 특정 매니저 노드가 대운됐을 때 정상적으로 스웜 클러스터를 유지할 수 있다. 그러나 매니저 수를 늘린다고 해서 스웜 클러스터의 성능이 좋아지는 것은 아니다.
스웜 매니저는 가능한 한 홀수 개로 구성하는 것이 바람직하다. 스웜 모드는 매니저 노드의 절반 이상에 장애가 생겨 정상적으로 작동하지 못할 경우 장애가 생긴 매니저 노드가 복구될 때까지 클러스터의 운영을 중단. 이때 매니저 노드의 개수를 홀수로 구성하면 짝수롤 매니저 노드를 구성했을 때보다 매니저 노드의 장애를 더 허용할 수 있으며 매니저 노드 사이의 데이터 일관성을 유지할 수 있다.
구성
서버 IP
swarm-manager 192.168.0.100
swarm-worker1 192.168.0.101
swarm-worker2 192.168.0.10\2
EX) docker swarm init
swarm-manager$ docker swarm init --advertise-addr 192.168.0.100
Swarm initialized: current node (s9ywh74vze0tcbqm837e56esd) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5nf3gb8urrjeo878m94idvp9dvmaen36g8vu5rmvs0hafctpti-aw5wrf2h80d9rqemhpjgijydc 192.168.159.128:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
EX) docker swarm join
swarm-worker1$ docker swarm join --token SWMTKN-1-5nf3gb8urrjeo878m94idvp9dvmaen36g8vu5rmvs0hafctpti-aw5wrf2h80d9rqemhpjgijydc 192.168.159.128:2377
swarm-worker2$ docker swarm join --token SWMTKN-1-5nf3gb8urrjeo878m94idvp9dvmaen36g8vu5rmvs0hafctpti-aw5wrf2h80d9rqemhpjgijydc 192.168.159.128:2377
swarm-worker1, swarm-worker2 서버를 워커 노드로 사용하기 위해 클러스터에 추가
swarm-manager$ docker swarm join --token SWMTKN-1-5nf3gb8urrjeo878m94idvp9dvmaen36g8vu5rmvs0hafctpti-aw5wrf2h80d9rqemhpjgijydc 192.168.159.128:2377
Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.
매니저 노드로 사용중인 서버는 추가되지 않음
EX) docker node ls
swarm-manager$docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
s9ywh74vze0tcbqm837e56esd * red-virtual-machine Ready Active Leader 20.10.14
매니저 노드에서 클러스터 구성 상태 확인
* 표시가 매니저 노드
매니저 노드는 일반적인 매니저 역할을 하는 노드와 리더 역할을 하는 노드로 나뉜다. 리더 매니저는 모든 매니저 노등 대한 데이터 동기화와 관리를 담당하므로 할상 작동할 수 있는 상태여야 한다. 리더 매니저의 서버가 다운되는 등의 장애가 생기면 매니저는 새로운 리더를 설출한다.
EX) docker swarm join-token manager
swarm-manager$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5nf3gb8urrjeo878m94idvp9dvmaen36g8vu5rmvs0hafctpti-98pc6dpo4vony3hw23s68wvh5 192.168.159.128:2377
새로운 매니저 노드를 추가하기 위한 토큰 확인
출력되는 명령어를 다른 서버에 입력하여 해당 서버를 새로운 매니저 노드로 추가할 수 있다.
스웜 클러스터에 새로운 노드를 추가하는 토큰이 공개되면 누구든지 해당 스웜 클러스터에 노드를 추가할 수 있게 되고 보안 측면에서 문제가 될 수 있다. 따라서 실제 운영환경에서는 주기적으로 스웜 클러스터의 토큰을 변경하는 것이 안전
EX) 토큰 갱신
swarm-manager$ docker swarm join-jtoken --rotate manager
EX) 추가된 노드 삭제
swarm-worker1$ docker swarm leave
Node left the swarm
swarm-manager$ docker node ls
삭제할 노드 HOSTNAME 확인
swarm-manager$ docker node rm swarm node01
EX) 워커 노드를 매니저 노드로 변경
swarm-manager$ docker node promote swarm-worker1
EX) 매니저 노드를 워커 노드로 변경
swarm-manager$ docker node demote swarm-worker1
매니저 노드가 1개일 때는 사용 불가능