ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [네이버 클라우드 플랫폼] Load Balancer(5) - 로드밸런서 와 오토스케일링 ( Load Balancer and Auto Scaling )
    tutorial/네이버클라우드 플랫폼 2020. 11. 22. 01:48

    2020/11/12 - [tutorial/네이버클라우드 플랫폼] - [네이버 클라우드 플랫폼] Load Balancer(1) - 가용성과 확장성

    2020/11/14 - [tutorial/네이버클라우드 플랫폼] - [네이버 클라우드 플랫폼] Load Balancer(2) - 서버 생성 및 원격접속

    2020/11/15 - [tutorial/네이버클라우드 플랫폼] - [네이버 클라우드 플랫폼] Load Balancer(3) - 프로젝트 생성 및 실행

    2020/11/17 - [tutorial/네이버클라우드 플랫폼] - [네이버 클라우드 플랫폼] Load Balancer(4) - PM2 및 부하 테스트


     

    로드밸런서와 오토스케일링 통하여 보다 더 많은 요청에도 정상적으로 응답할 수 있도록 설정해보겠습니다. 

     

     

    *로드밸런서와 오토스케일링 설정하기*

     

     

    로드밸런서 생성

     

    - Load Balancer 탭 -> 로드밸런서 생성 버튼 클릭

     

     

    서버 포트를 3000번으로 설정합니다. ( 입력 후 추가 버튼을 누르세요. )

    *Sticky Seesion

    - Sticky Seesion은 처음 요청받은 '서버'가 계속해서 응답 가능하게 해주는 기능입니다. 
      예를 들어 유저1, 유저2, 서버A, 서버B가 있다고 가정하겠습니다. 
      유저1이 처음 로그인 요청을 하게 됩니다. 요청을 받은 서버B가 응답을 해줍니다. 
      유저1이 로그인 후 회원정보를 요청하게 됩니다. 

      Q.1) 이때 만약 서버A가 회원정보 요청을 받는다면??? 

           -> 서버A는 유저1의 로그인 정보가 없기 때문에 로그인하라고 다시 요청하게 됩니다. 
      Q.2) 만약 서버B가 회원정보 요청을 받는다면??

           -> 서버B는 유저1이 기존에 로그인한 세션 정보가 있기 때문에 회원정보 값을 응답해 줍니다. 
      ==> Sticky Session은 기존에 요청받았던 세션이 계속해서 동일한 서버로 응답받을 수 있게끔 해줍니다. 
             따라서, Sticky Session을 설정한다면 유저1이 서버B에 요청을 했더라면 계속해서 유저1은 서버B에게 응답을 받습니다.

             Sticky Seesion 외에 세션 클러스터링과 세션 서버를 따로 두는 방법들이 있습니다. 

     

     

     

    적용 서버에 아무것도 선택하지 않고 다음을 눌러 생성합니다.

     

     

    로드밸런서를 생성합니다.

     

     

    Init Script 생성

    - 사용자가 미리 작성해 둔 스크립트를 서버 생성 시 자동으로 실행시킬 수 있는 기능입니다. 
       추후 오토스케일링으로 생성된 서버들이 해당 스크립트를 가지고 자동으로 원격 서버에 프로젝트에 필요한 툴을 설치하고 실행합니다.

     

     

    Server 탭 -> Init script -> Init Script 생성

     

     

    script 정보를 입력합니다. ( nvm 설치 및 프로젝트 실행 스크립트)

    #!/bin/sh
    
    
    echo "hellow world"
    
    
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
    
    
    cat > /root/.bash_profile << "EOF"
    
    export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
    
    
    EOF
    
    . /root/.bash_profile
    nvm ls
    nvm -v
    
    nvm install 15.0.1
    node -v
    
    
    git clone https://github.com/mingoogle/blog-load_balancer.git
    cd blog-load_balancer/
    npm install
    
    npm install pm2@latest -g
    pm2 start app.js

    

    스크립트가 생성되었습니다.

     

     

    오토스케일링

     - 네이버 클라우드 플랫폼에서는 오토스케일링을 크게 3가지로 설정할 수 있습니다.
        1. 실시간 사용량에(실시간 모니터링) 따라 실시간 반영 => 모니터링을 통한 예제를 해보겠습니다.
        2. 특정 시간에 반영
        3. 직접 반영 (수동 반영)

     

     

     

    Launch Configuration 설정

     
    - Auto Scaling 탭 -> Launch Configuration -> Launch Configuration 생성 버튼 클릭

     

     

    OS 이미지 타입을 Ubuntu / 서버 이미지 이름은 ubuntu-16.04.64-server를 선택합니다. 

     

     

    서버 타입을 설정하고 생성한 init script를 선택해 줍니다.

     

     

    이름 설정을 해줍니다.

    ( test-launch-configuration )

     

    인증키 설정을 합니다.

    ( 기존에 있다면 기존 키를 사용하셔도 되며, 새로운 인증키를 발급받으셔도 됩니다. )

     

     

    네트워크 접근 설정을 합니다.

     

     

    입력한 서버의 정보를 확인하고 Launch Configuration을 생성합니다.

     

     

    생성 버튼을 누르면 생성된 걸 확인할 수 있습니다.

     

     

    Auto Scaling Group 생성

     

    - Auto Scaling 탭 -> Auto Scaling Group -> Auto Scaling Group 생성 버튼 클릭

     

     

    방금 생성한 Launch Configuration을 선택합니다.

     

     

    그룹 설정 시 필수 정보 값들을 입력 합니다.

     

     

    정책/일정을 설정합니다.

     

     

    오토스케일링일 작동이 되면 알림을 받을 수 있습니다.

    ( 통보 내역을 체크하고 '추가'버튼을 눌러 통보받을 담당자를 추가하세요. ) 

     

    최종 확인을 한 후 생성하세요.

     

     

    이렇게 오토스케일링까지 생성한 후 서버를 보면 오토스케일링으로 인해 서버 1개가 생성된 걸 확인할 수 있습니다.

     

    * 모니터링을 통하여 오토스케일링 자동화하기

     

     

    Monitoring 탭 -> asg-server 선택 -> 그룹 이벤트 설정 버튼 클릭

     

     

    CPU 임계치에 따른 정책들을 추가합니다. ( 50%이상일 경우 scale-out / 30%이하일 경우 scale-in )
    cpu가 잘 올라가지 않는다면 더 낮춰서 진행하시길 바랍니다. ( ex 20%이상일 경우 scale-out / 10%이하일 경우 scale-in )

     

     

    * 접속 및 트래픽 증가시켜보기

    브라우저 접속

    - 로드 밸런서 탭에서 생성한 로드밸런서의 정보를 보면 '접속 정보'가 있습니다. 
       접속 정보를 가지고 브라우저를 통해 접속하면 서버에서 응답을 해줍니다. 

    ( 호스트 정보가 보이는 이유는 기존 프로젝트 소스를 수정하였습니다. ) 

    요청 시 응답을 합니다.

     

     

    * 트래픽 증가시키기 

     - Artillery를  이용하여 증가시켜 봅시다. 

     

    artillery quick --count 100000 --duration 600 -n 500 http://slb-5527328.ncloudslb.com/ 

     

     

     

    네이버 클라우드 플랫폼의 서버 탭을 보면 오토스케일링과 모니터링으로 인하여 서버가 자동으로 생성되는 걸 확인할 수 있습니다.
     ( 모니터링으로 인한 scale-out )

     

     

    여러 인스턴스가 생성된 후 브라우저를 통하여 접속하면 로드밸런서의 Round robin 형식으로 번갈아가면서
    서버에 접속하는 걸 확인할 수 있습니다. ( 새로 고침 시 마다 호스트 정보가 번갈아가며 바뀜 )

     

     

    Artillery 요청을 중단 시켜 트래픽을 없애버리면 모니터링을 통하여 scale-in을 하여 생성된 서버들이 없어졌습니다. 
    ( 최소 1개의 서버를 유지하도록 설정하였기 때문에 1개는 남아있습니다. )

     

     

    *오토스케일링된 서버들은 로그 수집은 어떻게 할까? 

     

      - 위처럼 오토스케일링 서버들은 (자동으로) 서버가 추가되기도 하고 삭제되기도 합니다. 
        실제 서비스를 운영 시 서버의 로그정보들을 저장하기도 전에 서버가 삭제된다면 곤란한 일이 생길 수 있으며, 
        실무에서 로그 데이터는 엄청 중요한 요소이므로 오토스케일링을 통하여 늘어난 서버의 로그들도 수집을 해야 합니다. 

      - 클라우드 서비스를 이용하여 비교적 쉽게 로그를 수집하는 방법은 있습니다.

         1. 클라우드의 CLA 서비스 이용하기 ( Cloud Log Analytics )

            => 클라우드에서 인스턴스 서버를 생성하듯이 간단한 조작만으로도 서버의 로그를 수집해줍니다. 
         2. 클라우드의 NAS와 같은 스토리지 서비스 이용하기 
            => CLI를 통한 initscript 처리가 필요합니다. 
         3. 원격 서버 단에서 직접 로그를 수집하여 보내는 방법이 있습니다. 
            => 로그 수집 프로세스를 구축하여 클라우드 스토리지와 같은 곳으로 데이터를 전송하는 방법입니다. 

     

    로그를 수집하는 방법은 실제 웹 서비스를 구축하는 튜토리얼 때 다룰 예정입니다.

     

     

     

     

    감사합니다.

     

     

    " 인간의 천성은 비슷하나

          습관의 차이가 큰 차이를 만든다. " 

     

    공자

     

     

     

Designed by Tistory.