Compute Engine을 기반으로 한 웹서비스의 전역적 자동 확장

본 가이드에서는 용량 요건에 따라 자동 확장되는 지역별 Compute Engine 관리형 인스턴스 그룹과 함께 전 세계에서 사용 가능한 웹 서비스를 설정하는 방법에 대해서 설명합니다. 이 가이드에서 언급하는 기법을 사용하면 Compute Engine을 기반으로 전 세계 분산 및 확장이 가능한 프로젝트를 구현할 수 있습니다.

목표

  • 자동 확장을 사용 설정하여 다중 지역 Compute Engine 관리형 인스턴스 그룹을 배포합니다.
  • 지역 간 부하 분산기를 만듭니다.
  • 전 세계 여러 지역에서 테스트 트래픽을 생성합니다.
  • Google Cloud Platform Console을 사용하여 부하 분산기의 요청 라우팅 방법과 수요에 따른 인스턴스 그룹의 자동 확장 방법을 시각화합니다.

비용

이 가이드는 비용이 청구될 수 있는 다음과 같은 GCP 구성요소를 사용합니다.

  • Compute Engine

시작하기 전에

  1. Google Cloud Platform 프로젝트를 선택하거나 만듭니다.

    리소스 관리 페이지로 이동

  2. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  3. Compute Engine API를 사용 설정합니다.

    API 사용 설정

애플리케이션 아키텍처

애플리케이션에는 다음과 같은 Compute Engine 구성요소가 포함됩니다.

  1. 인스턴스 템플릿: 인스턴스 그룹의 각 인스턴스를 만들 때 사용하는 템플릿
  2. 인스턴스 그룹: 수신되는 트래픽에 따라 자동 확장되는 다수의 인스턴스 그룹
  3. 부하 분산기: 인스턴스 그룹 간에 트래픽을 분산하는 HTTP 부하 분산기
  4. 인스턴스: 전 세계 여러 지역에서 테스트 트래픽을 생성하는 다수의 테스트 인스턴스

다중 지역 인스턴스 그룹과 함께 부하 분산기를 나타내고 있는 시스템 아키텍처 다이어그램

웹 서비스 설정

인스턴스 그룹 만들기

콘솔

  1. 인스턴스 그룹 네트워크를 만듭니다.

    1. GCP Console에서 VPC 네트워크 페이지로 이동합니다.
      VPC 네트워크 페이지로 이동
    2. VPC 네트워크 만들기를 클릭합니다.
    3. 이름fortressnet으로 설정합니다.
    4. 서브넷 생성 모드자동으로 설정합니다.
    5. 페이지 하단에 있는 만들기를 클릭합니다.
  2. 네트워크의 방화벽 규칙을 만듭니다. 이 규칙은 인스턴스에 보내는 모든 HTTP 요청을 허용합니다.

    1. GCP Console에서 방화벽 규칙 페이지로 이동합니다.
      방화벽 규칙 페이지로 이동
    2. 방화벽 규칙 만들기를 클릭합니다.
    3. 이름fortressnet-allow-http으로 설정합니다.
    4. 네트워크에서 fortressnet을 선택합니다.
    5. 대상에서 All instances in the network를 선택합니다.
    6. 소스 IP 범위0.0.0.0/0으로 설정합니다.
    7. 프로토콜 및 포트에서 tcp를 선택한 후 80을 입력합니다.
    8. 만들기를 클릭합니다.
  3. 인스턴스 템플릿을 만듭니다. 이때 인스턴스마다 간단한 Apache 웹 서버를 시작하는 시작 스크립트를 추가합니다.

    1. GCP Console에서 인스턴스 템플릿 페이지로 이동합니다.
      인스턴스 템플릿 페이지로 이동
    2. 인스턴스 템플릿 만들기를 클릭합니다.
    3. 이름fort-template으로 설정합니다.
    4. 머신 구성에서 micro(f1-micro)를 선택합니다.
    5. 관리, 보안, 디스크, 네트워킹, 단독 테넌트를 클릭하여 고급 설정을 표시합니다. 다수의 탭이 나타납니다.
    6. 네트워킹 탭을 클릭합니다.
    7. 네트워크에서 fortressnet을 선택합니다.
    8. 관리 탭을 클릭합니다.
    9. 자동화에서 다음 시작 스크립트를 입력합니다.

      apt-get update && apt-get install -y apache2
      

    10. 페이지 하단에 있는 만들기를 클릭합니다.

  4. 인스턴스 템플릿을 사용해 다중 지역 관리형 인스턴스 그룹을 만듭니다. 이때 각 인스턴스 그룹마다 자동 확장을 설정합니다.

    1. GCP Console에서 인스턴스 그룹 페이지로 이동합니다.
      인스턴스 그룹 페이지로 이동
    2. 인스턴스 그룹 템플릿 만들기를 클릭합니다.
    3. 이름us-central1-pool으로 설정합니다.
    4. 위치에서 Multi-zone을 선택합니다.
    5. 리전에서 us-central1을 선택합니다.
    6. 인스턴스 템플릿에서 fort-template을 선택합니다.
    7. 자동 확장에서 켜기를 선택합니다.
    8. 자동 확장 기반에서 HTTP load balancing usage를 선택합니다.
    9. 타겟 부하 분산 사용량80으로 설정합니다.
    10. 최소 인스턴스 수1로 설정합니다.
    11. 최대 인스턴스 수5로 설정합니다.
    12. 만들기를 클릭합니다.
    13. 위 단계를 반복하면서 다음과 같이 변경하여 인스턴스 그룹을 2개 더 만듭니다.
      • 이름europe-west1-pool이고 리전europe-west1인 그룹을 만듭니다.
      • 이름asia-east1-pool이고 리전asia-east1인 그룹을 만듭니다.
  5. (선택사항) 인스턴스가 정상인지, 그리고 HTTP 트래픽을 처리하고 있는지 확인합니다. 인스턴스 1개 이상의 외부 IP 주소를 테스트하세요. 인스턴스가 시작 프로세스를 마칠 때까지 1분 정도 기다려야 할 수도 있습니다.

    1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.
      VM 인스턴스 페이지로 이동
    2. 실행 중인 인스턴스마다 이름 열 아래 녹색 체크표시가 있는지 확인합니다.
    3. 인스턴스의 외부 IP를 복사하여 웹브라우저에 붙여넣습니다.

    'Apache2 Debian 기본 페이지' 웹페이지가 나타납니다.

    그렇지 않을 경우 잠시만 기다려주세요.

gcloud

  1. 인스턴스 그룹 네트워크를 만듭니다.

    gcloud compute networks create fortressnet --subnet-mode auto
    
  2. 네트워크의 방화벽 규칙을 만듭니다. 이 규칙은 인스턴스에 보내는 모든 HTTP 요청을 허용합니다.

    gcloud compute firewall-rules create fortressnet-allow-http \
        --network fortressnet \
        --allow tcp:80
    
  3. 인스턴스 템플릿을 만듭니다. 이때 인스턴스마다 간단한 Apache 웹 서버를 시작하는 시작 스크립트를 추가합니다.

    gcloud compute instance-templates create fort-template \
        --machine-type f1-micro \
        --network fortressnet \
        --metadata startup-script='apt-get update && apt-get install -y apache2'
    
  4. 인스턴스 템플릿을 사용해 다중 지역 관리형 인스턴스 그룹을 만듭니다. 이때 각 인스턴스 그룹마다 자동 확장을 설정합니다.

    gcloud compute instance-groups managed create us-central1-pool \
        --region us-central1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling us-central1-pool \
        --region us-central1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
    gcloud compute instance-groups managed create europe-west1-pool \
        --region europe-west1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling europe-west1-pool \
        --region europe-west1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
    gcloud compute instance-groups managed create asia-east1-pool \
        --region asia-east1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling asia-east1-pool \
        --region asia-east1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
  5. (선택사항) 인스턴스가 정상인지, 그리고 HTTP 트래픽을 처리하고 있는지 확인합니다. 인스턴스 1개 이상의 외부 IP 주소를 테스트하세요. 인스턴스가 시작 프로세스를 마칠 때까지 1분 정도 기다려야 할 수도 있습니다.

    1. 인스턴스를 나열합니다.

      gcloud compute instances list
      

    2. STATUS 열 아래에서 인스턴스 상태가 RUNNING인지 확인합니다.

    3. EXTERNAL_IP 열 아래 있는 IP 주소를 쿼리하여 인스턴스를 확인합니다.

      curl http://[EXTERNAL_IP] | head
      

    <title>Apache2 Debian Default Page: It works</title> 라인을 포함해 HTML 텍스트가 나타나야 합니다.

    그렇지 않을 경우 잠시만 기다려주세요.

부하 분산기 구성

부하 분산기는 클라이언트 요청을 다수의 백엔드로 분산시킵니다.

콘솔

부하 분산기 구성 시작

  1. GCP Console에서 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 만들기를 클릭합니다.
  3. HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.
  4. 이름fortressnet-balancer로 설정합니다.

백엔드 구성

  1. 새 HTTP(S) 부하 분산기 페이지에서 백엔드 구성을 클릭합니다.
  2. 백엔드 서비스 및 백엔드 버킷 만들기 또는 선택 풀다운 메뉴에서 백엔드 서비스, 백엔드 서비스 만들기를 차례로 선택합니다. 백엔드 서비스 만들기 대화상자가 나타납니다.
  3. 백엔드 서비스의 이름fortressnet-backend-service로 설정합니다.
  4. 새 백엔드 대화상자에서 인스턴스 그룹asia-east1-pool로 설정합니다.
  5. 분산 모드에서 속도를 선택합니다.
  6. 최대 RPS를 인스턴스당 100 RPS로 설정합니다.
  7. 완료를 클릭합니다.
  8. 백엔드 추가를 클릭합니다.
  9. 새 백엔드 대화상자에서 인스턴스 그룹europe-west1-pool로 설정합니다.
  10. 분산 모드에서 속도를 선택합니다.
  11. 최대 RPS를 인스턴스당 100 RPS로 설정합니다.
  12. 완료를 클릭합니다.
  13. 백엔드 추가를 클릭합니다.
  14. 새 백엔드 대화상자에서 인스턴스 그룹us-central1-pool로 설정합니다.
  15. 분산 모드에서 속도를 선택합니다.
  16. 최대 RPS를 인스턴스당 100 RPS로 설정합니다.
  17. 완료를 클릭합니다.
  18. 상태 확인에서 상태 확인 만들기를 선택합니다.
  19. 이름http-basic-check으로 설정합니다.
  20. 프로토콜에서 HTTP를 선택합니다.
  21. 포트80으로 설정합니다.
  22. 저장 후 계속을 클릭합니다.
  23. 만들기를 클릭합니다.

호스트 및 경로 규칙

  1. 새 HTTP(S) 부하 분산기 페이지 왼쪽 패널에서 호스트 및 경로 규칙을 클릭합니다.
    이 예에서는 모든 트래픽에 기본 규칙이 적용되므로 호스트나 경로 규칙을 구성할 필요가 없습니다. 미리 채워진 기본값을 그대로 적용할 수 있습니다.

프런트엔드 구성

  1. 새 HTTP(S) 부하 분산기 페이지 왼쪽 패널에서 프런트엔드 구성을 클릭합니다.
  2. 이름fortressnet-http-rule로 설정합니다.
  3. IP 버전에서 IPv4를 선택합니다.
  4. IP 주소에서 IP 주소 만들기를 선택합니다.
  5. 새 고정 IP 예약 대화상자에서 이름fortressnet-ip로 설정합니다.
  6. 예약을 클릭하고 잠시 기다립니다.
  7. 새 프런트엔드 IP 및 포트 대화상자 하단에 있는 완료를 클릭합니다.
  8. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  9. 이름fortressnet-http-ipv6-rule로 설정합니다.
  10. IP 버전에서 IPv6을 선택합니다.
  11. IP 주소에서 IP 주소 만들기를 선택합니다.
  12. 대화상자에서 이름fortressnet-ipv6으로 설정합니다.
  13. 예약을 클릭하고 잠시 기다립니다.
  14. 새 프런트엔드 IP 및 포트 대화상자 하단에 있는 완료를 클릭합니다.

검토 및 완료

  1. 새 HTTP(S) 부하 분산기 페이지 왼쪽 패널에서 검토 및 완료를 클릭합니다.
  2. 만들려던 설정과 현재 설정을 비교합니다.
  3. 설정이 올바르면 왼쪽 패널 하단에 있는 만들기를 클릭합니다. 부하 분산 화면으로 돌아갑니다. 부하 분산기가 만들어지면 옆에 녹색 체크표시가 표시되어 실행 중임을 나타냅니다.

gcloud

백엔드 구성

  1. 기본 상태 확인을 만듭니다. 여기에서는 부하 분산기 백엔드가 HTTP 요청에 응답하고 있는지 확인합니다.

    gcloud compute health-checks create http http-basic-check
    

  2. 전역 백엔드 서비스를 만듭니다. 이 백엔드 서비스는 부하 분산기에서 HTTP 트래픽을 수신합니다.

    gcloud compute backend-services create fortressnet-backend-service 
    --protocol HTTP
    --health-checks http-basic-check
    --global

  3. 인스턴스 그룹을 백엔드 서비스의 지역 백엔드로 추가합니다. 이 구성은 인스턴스별 최대 RPS(초당 요청 수)를 기준으로 백엔드 간에 트래픽을 분산합니다.

    gcloud compute backend-services add-backend fortressnet-backend-service 
    --balancing-mode RATE
    --max-rate-per-instance 100
    --instance-group us-central1-pool
    --instance-group-region us-central1
    --global gcloud compute backend-services add-backend fortressnet-backend-service
    --balancing-mode RATE
    --max-rate-per-instance 100
    --instance-group europe-west1-pool
    --instance-group-region europe-west1
    --global gcloud compute backend-services add-backend fortressnet-backend-service
    --balancing-mode RATE
    --max-rate-per-instance 100
    --instance-group asia-east1-pool
    --instance-group-region asia-east1
    --global

호스트 및 경로 규칙

  1. URL 맵을 정의합니다. URL 맵은 서로 다른 URL을 서로 다른 백엔드 서비스로 라우팅합니다. 여기에서는 백엔드 서비스가 하나뿐이므로 해당 백엔드 서비스를 모든 URL의 기본 서비스로 설정합니다.

    gcloud compute url-maps create fortressnet-balancer 
    --default-service fortressnet-backend-service

  2. HTTP 프록시 경로를 만듭니다. HTTP 프록시 경로는 HTTP 요청을 수신한 후 URL 맵에 따라 라우팅합니다. 여기에서는 모든 요청을 단일 백엔드 서비스로 보냅니다.

    gcloud compute target-http-proxies create fortressnet-http-proxy 
    --url-map fortressnet-balancer

프런트엔드 구성

  1. 전역 고정 외부 IP 주소를 두 개 만듭니다. 하나는 IPV4, 다른 하나는 IPV6입니다. 이러한 주소가 부하 분산기의 전역 외부 IP 주소가 됩니다.

    gcloud compute addresses create fortressnet-ip 
    --ip-version IPV4
    --global gcloud compute addresses create fortressnet-ipv6
    --ip-version IPV6
    --global

  2. 부하 분산기의 외부 IP 주소를 조회합니다.

    gcloud compute addresses list
    

  3. 외부 IP 주소의 전역 전달 규칙을 만듭니다. IPV4 및 IVP6 HTTP 요청 모두 이 규칙에 따라 HTTP 프록시로 전달됩니다.

    gcloud compute forwarding-rules create fortressnet-http-rule 
    --global
    --target-http-proxy fortressnet-http-proxy
    --ports 80
    --address [LOAD_BALANCER_IP_ADDRESS]
    gcloud compute forwarding-rules create fortressnet-http-ipv6-rule 
    --global
    --target-http-proxy fortressnet-http-proxy
    --ports 80
    --address [LOAD_BALANCER_IPV6_ADDRESS]

(선택사항) 부하 분산기가 작동하는지 확인합니다. 확인하려면 1~3분 기다려야 할 수도 있습니다.

콘솔

  1. GCP Console에서 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. fortressnet-balancer에서 백엔드 열 아래 녹색 체크표시가 나타날 때까지 기다립니다.
  3. fortressnet-balancer를 클릭합니다.
  4. 프런트엔드에서 IP:포트 열 아래 있는 IPV4 주소를 복사합니다. IPV4 주소는 www.xxx.yyy.zzz 형식입니다. 후행 포트 번호인 :nn은 필요하지 않습니다. 프런트엔드 섹션이 보이지 않으면 잠시 기다렸다가 웹페이지를 새로고침하세요.
  5. IP 주소를 웹브라우저에 입력합니다.

'Apache2 Debian 기본 페이지' 웹페이지가 나타납니다.

만약 'Error 404 (Not Found)' 웹페이지가 나타나면 몇 분 더 기다리세요.

gcloud

  1. 부하 분산기의 외부 IP 주소를 조회합니다.

    gcloud compute addresses list
    

  2. IPV4 주소를 쿼리합니다. IPV4 주소는 www.xxx.yyy.zzz 형식입니다.

    curl http://[LOAD_BALANCER_IP_ADDRESS] | head
    

<title>Apache2 Debian Default Page: It works</title> 라인을 포함해 HTML 텍스트가 나타나야 합니다.

<title>Error 404 (Not Found)!!1</title>이 표시되면 몇 분 더 기다리세요.

권장사항: 부하 분산기와 상태 확인에서 수신되는 내부 트래픽만 허용하도록 보안 방화벽을 만드세요. 그런 다음 이전에 HTTP 요청을 모두 허용했던 원래 방화벽을 삭제하세요. 그러면 외부 클라이언트가 각 인스턴스에 액세스하지 못하도록 차단할 수 있습니다.

콘솔

  1. 부하 분산기와 상태 확인에서 수신되는 트래픽만 허용하도록 새로운 방화벽을 만듭니다.

    1. GCP Console에서 방화벽 규칙 페이지로 이동합니다.
      방화벽 규칙 페이지로 이동
    2. 방화벽 규칙 만들기를 클릭합니다.
    3. 이름fortressnet-allow-load-balancer으로 설정합니다.
    4. 네트워크에서 fortressnet을 선택합니다.
    5. 대상에서 All instances in the network를 선택합니다.
    6. 소스 IP 범위130.211.0.0/22를 입력하고 Enter 키를 누른 후 35.191.0.0/16을 입력하고 다시 Enter 키를 누릅니다.
    7. 프로토콜 및 포트에서 tcp를 선택한 후 80을 입력합니다.
    8. 만들기를 클릭합니다.
  2. 이전에 모든 요청을 허용했던 방화벽을 삭제합니다.

    1. fortressnet-allow-http 옆에 있는 체크표시를 선택합니다.
    2. 페이지 상단에 있는 삭제를 클릭합니다.
    3. 대화상자에서 삭제를 클릭합니다.

gcloud

  1. 부하 분산기와 상태 확인에서 수신되는 트래픽만 허용하도록 새로운 방화벽을 만듭니다.

    gcloud compute firewall-rules create fortressnet-allow-load-balancer 
    --network fortressnet
    --source-ranges 130.211.0.0/22,35.191.0.0/16
    --allow tcp:80

  2. 이전에 모든 요청을 허용했던 방화벽을 삭제합니다.

    gcloud compute firewall-rules delete fortressnet-allow-http -q
    

(선택사항) 자동 확장 및 부하 분산의 작동 여부 확인

테스트 트래픽 생성

지금은 유럽의 아침이고, 갑자기 인터넷에서 웹서비스가 큰 인기를 끌기 시작했다고 가정하겠습니다. 이제 유럽에서 엄청나게 발생하는 클라이언트 요청을 한 번에 모두 생성해 봅시다.

콘솔

  1. 부하 테스트 도구인 Siege가 설치된 인스턴스를 만듭니다.

    1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.
      VM 인스턴스 페이지로 이동
    2. 인스턴스 만들기를 클릭합니다.
    3. 이름europe-loadtest으로 설정합니다.
    4. 리전에서 europe-west1을 선택합니다.
    5. 관리, 보안, 디스크, 네트워킹, 단독 테넌트를 클릭하여 고급 설정을 표시합니다. 다수의 탭이 나타납니다.
    6. 관리 탭을 클릭합니다.
    7. 자동화에서 다음 시작 스크립트를 입력합니다.

      apt-get install -y siege
      

    8. 페이지 하단에 있는 만들기를 클릭합니다.

  2. 부하 분산기의 IPV4 주소를 가져옵니다.

    1. GCP Console에서 부하 분산 페이지로 이동합니다.
      부하 분산 페이지로 이동
    2. fortressnet-balancer를 클릭합니다.
    3. 프런트엔드에서 IP:포트 열 아래 있는 IPV4 주소를 복사합니다. IPV4 주소는 www.xxx.yyy.zzz 형식입니다.
  3. SSH로 부하 테스트 인스턴스에 연결합니다.

    1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.
      VM 인스턴스 페이지로 이동
    2. europe-loadtest 인스턴스에서 이름 열 아래 녹색 체크표시가 나타날 때까지 기다립니다.
    3. europe-loadtest에서 연결 열 아래 있는 SSH를 클릭합니다.
  4. Siege를 시작합니다. 대상을 부하 분산기의 IPV4 주소로 지정합니다.

    siege -c150 http://[LOAD_BALANCER_IP_ADDRESS]
    

gcloud

  1. 부하 테스트 도구인 Siege가 설치된 인스턴스를 만듭니다.

    gcloud compute instances create europe-loadtest \
        --network default \
        --zone europe-west1-c \
        --metadata startup-script='apt-get -y install siege'
    
  2. 부하 분산기의 IPV4 주소를 가져옵니다.

    gcloud compute addresses list
    
  3. gcloud 명령어를 사용할 수 있는 셸 세션을 새로 엽니다.

    1. 새로운 셸 세션에서 SSH로 부하 테스트 인스턴스에 연결합니다.

      gcloud compute ssh --zone europe-west1-c europe-loadtest
      
    2. Siege를 시작합니다. 대상을 부하 분산기의 IPV4 주소로 지정합니다.

      siege -c150 http://[LOAD_BALANCER_IP_ADDRESS]
      

siege 명령어를 실행하면 The server is now under siege...를 선언하는 출력 화면이 나타납니다.

[alert] Zip encoding disabled; siege requires zlib support to enable it
** SIEGE 4.0.2
** Preparing 150 concurrent users for battle.
The server is now under siege...

부하 분산 및 자동 확장 모니터링

  1. GCP Console에서 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 이름이 fortressnet-balancer인 부하 분산기를 클릭합니다.
  3. 모니터링 탭을 클릭합니다.
  4. 백엔드 드롭다운에서 fortressnet-backend-service를 선택합니다.

데이터를 충분히 표시하려면 최대 10분까지 걸릴 수 있습니다. 얼마 후 다음과 비슷한 화면이 표시됩니다.

유럽에서 발생하는 요청이 백엔드 3개로 균등하게 분산됨을 보여주는 GCP Console의 모니터링 화면

어떤 상황인가요?

  1. 엄청난 양의 트래픽을 모두 한 번에 전송하면서 부하 테스트가 시작됩니다. 처음에는 부하 분산기가 백엔드 3개에 요청을 균등하게 분산합니다. 그러나 요청 수가 자동 확장 한도를 금새 초과하므로 서버가 Backend 5xx errors를 반환하고 모니터링 화면에 표시할 수도 있습니다. 자동 확장 처리가 필요에 따라 인스턴스를 추가로 가동하기 시작합니다.

  2. 자동 확장을 통해 용량이 필요한 만큼 늘어납니다. Compute Engine 부하 분산기는 요청 지연 시간을 최소화하기 위해 클라이언트와 가장 가까운 백엔드로 요청을 라우팅하려고 시도합니다. 여기에서는 부하 테스트 트래픽이 유럽에서 시작되었으므로 부하 분산기가 더 많은 요청을 유럽 백엔드로 라우팅합니다. 결과적으로 자동 확장은 늘어나는 요청을 처리하기 위해 유럽 백엔드에 위치한 인스턴스를 추가로 가동할 수 있습니다.

다른 지역의 테스트 트래픽 생성

아시아에서도 오후부터 인터넷 혼잡이 발생하면서 웹서비스가 큰 인기를 끌고 있다고 가정합니다. 아시아에서 엄청나게 발생하는 요청을 생성해 봅시다.

콘솔

  1. 부하 테스트 도구인 Siege가 설치된 인스턴스를 하나 더 만듭니다.

    1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.
      VM 인스턴스 페이지로 이동
    2. 인스턴스 만들기를 클릭합니다.
    3. 이름asia-loadtest으로 설정합니다.
    4. 리전에서 asia-east1을 선택합니다.
    5. 관리, 보안, 디스크, 네트워킹, 단독 테넌트를 클릭하여 고급 설정을 표시합니다. 다수의 탭이 나타납니다.
    6. 관리 탭을 클릭합니다.
    7. 자동화에서 다음 시작 스크립트를 입력합니다.

      apt-get install -y siege
      

    8. 페이지 하단에 있는 만들기를 클릭합니다.

  2. 부하 분산기의 IP 주소를 가져옵니다.

    1. GCP Console에서 부하 분산 페이지로 이동합니다.
      부하 분산 페이지로 이동
    2. fortressnet-balancer를 클릭합니다.
    3. 프런트엔드에서 IP:포트 열 아래 있는 IPV4 주소를 복사합니다. IPV4 주소는 www.xxx.yyy.zzz 형식입니다.
  3. SSH로 부하 테스트 인스턴스에 연결합니다.

    1. asia-loadtest 인스턴스에서 이름 열 아래에 녹색 체크표시가 나타날 때까지 기다립니다.
    2. asia-loadtest에서 연결 열 아래 있는 SSH를 클릭합니다.
  4. Siege를 시작합니다. 대상을 부하 분산기의 IPV4 주소로 지정합니다.

    siege -c150 http://[LOAD_BALANCER_IP_ADDRESS]
    

gcloud

  1. 원래 셸 세션에서 부하 테스트 도구인 Siege가 설치된 인스턴스를 하나 더 만듭니다.

    gcloud compute instances create asia-loadtest \
        --network default \
        --zone asia-east1-c \
        --metadata startup-script='apt-get -y install siege'
    
  2. 부하 분산기의 IPV4 주소를 가져옵니다.

    gcloud compute addresses list
    
  3. gcloud 명령어를 사용할 수 있는 셸 세션을 새로 엽니다.

    1. 새로운 셸 세션에서 SSH로 부하 테스트 인스턴스에 연결합니다.

      gcloud compute ssh --zone asia-east1-c asia-loadtest
      
    2. Siege를 시작합니다. 대상을 부하 분산기의 IPV4 주소로 지정합니다.

      siege -c150 http://[LOAD_BALANCER_IP_ADDRESS]
      

다시 한 번 The server is now under siege...를 선언하는 출력 화면이 나타납니다.

[alert] Zip encoding disabled; siege requires zlib support to enable it
** SIEGE 4.0.2
** Preparing 150 concurrent users for battle.
The server is now under siege...

부하 분산 및 자동 확장 모니터링

앞서 확인했던 부하 분산 모니터링 화면으로 다시 이동합니다. 새로운 데이터를 충분히 표시하려면 최대 10분까지 걸릴 수 있습니다. 얼마 후 다음과 비슷한 화면이 표시됩니다.

유럽과 아시아에서 발생하는 요청이 백엔드 3개로 분산됨을 보여주는 GCP Console의 모니터링 화면

어떤 상황인가요?

  1. 이번에도 부하 테스트가 엄청난 양의 요청을 한꺼번에 전송합니다. 처음에는 부하 분산기가 기존 백엔드 3개에 요청을 균등하게 분산합니다. 요청 수가 자동 확장 한도를 초과하면서 자동 확장 처리가 필요에 따라 인스턴스를 추가로 가동하기 시작합니다.

  2. 자동 확장을 통해 용량이 새로 필요한 만큼 늘어납니다. 부하 분산기는 여전히 가장 가까운 백엔드로 요청을 라우팅하려고 합니다. 결과적으로 아시아 백엔드는 아시아에서 주로 요청을 수신하고, 유럽 백엔드는 유럽에서 주로 요청을 수신하고, US 백엔드는 나머지 요청을 모두 수신합니다.

삭제

자동 확장 가이드를 완료한 후에는 이후에 요금이 청구되지 않도록 GCP에서 만든 리소스를 삭제할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

인스턴스 삭제

Compute Engine 인스턴스를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 다음 옆에 있는 체크박스를 클릭합니다. 삭제할 인스턴스
  3. 페이지 상단의 삭제 삭제를 클릭하여 인스턴스를 삭제합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서