Cloud/Docker

6. Docker cluster - swarm (리눅스 용)

jinkwon.kim 2019. 2. 28. 13:26
728x90
반응형

6. Docker cluster - swarm (리눅스 용)




관련 포스트◀

1. Docker 가상화 서버 개념 (리눅스용)

2. Docker 가상화 서버 설치 및 image 다운로드 (리눅스용)

3. Docker Container 관리 (리눅스 용)

4. Docker 네트워크 (리눅스 용)

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로 변경된 사항 확인

       참조 : https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/5/html/virtual_server_administration/s1-lvs-forwarding-vsa

      

  1) 10.0.8.92(master-node)

  2) 10.0.8.100(worker-node)



[결론]

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











728x90
반응형