Docker Swarm 클러스터 도입검토
www.hongsnet.net 서비스에 Docker Swarm을 검토하여, 고가용성이 지원되도록 클러스터링 한다.
Docker Swarm 도입검토
www.hongsnet.net 구성검토
-
Front-end(HA-PROXY)와 Back-end(Docker Swarm)간의 Health Check가 정상적으로 수행되어야 한다.
- 이는 주로 사용되는 Overlay Network를 이용하면되며, Service Expose를 통해 외부로의 접속을 허용해주면 된다.
-
Back-end(Docker Swarm)과 DBMS 간의 통신
- docker-proxy는 Inbound에 대한 정책이며, Outbound는 Host의 iptables Rule에 따라 컨테이너의 외부로 나갈때는 POSTROUTING chain을 거쳐, MASQUERADE 되어 외부로 나가기 때문에 문제없다. 즉,
Host가 DBMS와의 통신에 문제가 없다면 이슈가 되지 않는다
.
- docker-proxy는 Inbound에 대한 정책이며, Outbound는 Host의 iptables Rule에 따라 컨테이너의 외부로 나갈때는 POSTROUTING chain을 거쳐, MASQUERADE 되어 외부로 나가기 때문에 문제없다. 즉,
Docker Swarm 주요기능
- 컨테이너 자동 배치 및 복제 (Deploy Replica)
- 컨테이너 그룹에 대한 로드 밸런싱
- 컨테이너 장애 복구
- 클러스터 외부에 서비스 노출 (Service Expose)
- 컨테이너 추가 또는 제거로 확장 및 축소 (Scaling)
- 컨테이너 서비스간의 인터페이스를 통한 연결 및 네트워크 포트 노출 제어
Swarm은 K8s에서 지원하는
Auto Scaling을 지원하지 않는다
.
Docker Swarm 구성요소
- Swarm : 군중이라는 뜻처럼, 분산된 노드에서 여러 개의 컨테이너를 실행 할 수 있다. 분산된 컨테이너를 실행 할 수 있는 클러스터를 Swarm Cluster라고 한다.
- Node : 스웜 클러스터를 구성하는 도커 서버(Host Based)
- Manager Node : 스웜 클러스터를 관리하는 노드다. 스웜 명령어는 매니저 노드에서만 실행한다(Host Based)
- Worker Node : 매니저 노드의 명령을 받아서 컨테이너가 만들어지는 노드(Host Based)
- Service : 스웜의 기본 배포단위다. 예를 들어 NginX로 로드밸런서를 구축한다면, NginX로 구성된 컨테이너들이 서비스가 된다.
- Task : 서비스의 구성단위다. 워드프레스 서비스는, 워드프레스 애플리케이션, Mysql 테스크로 구성될 것이다.
Swarm 클러스터는 Raft Concensus Algorithm을 사용한다. 이 알고리즘의 사용으로 인해, 전체 Manager의 과반수 이상이 유효한 경우, 서비스를 멈추지 않고 가동시킬 수 있다. 과반수 규칙을 지키기 위해 Manager의 수를 3, 5, 7 식으로
홀수
로 구성하는 것을권장
한다.
**www.hongsnet.net**은
Manager 시스템을 3대로 구성
했기 때문에 최소한의 권장사항이 충족된다.
Docker Swarm의 오케스트레이션 기능
- 스케쥴링(Scheduling) : 수동으로 각 Node에서 컨테이너를 기동할 필요없이, 미리 정의한 설정에 따라 컨테이너를 각 Worker Node에 배포한다.
- 롤링 업데이트(Rolling Update) : 현재 기동되어 있는 컨테이너의 이미지를 업데이트할 때 각 컨테이너를 차례대로 업데이트한다.
- 스케일링(Scaling) : 클러스터 내에 기동되어 있는 컨테이너 수를 조정하는 기능을 한다.
- 로깅(Logging) : 다른 노드에서 실행중인 서비스에 대한 로그까지 확인할 수 있다.