내부 TCP/UDP 부하 분산용 장애 조치 구성

이 가이드에서는 예시를 사용하여 Google Cloud Platform 내부 TCP/UDP 부하 분산기의 장애 조치를 구성하는 방법을 설명합니다. 이 가이드를 수행하기 전에 다음 사항을 숙지하세요.

권한

이 가이드를 수행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정해야합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나, 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.

작업 필요한 역할
네트워크, 서브넷, 부하 분산기 구성요소 만들기 네트워크 관리자
방화벽 규칙 추가 및 삭제 보안 관리자
인스턴스 생성 인스턴스 관리자

설정

이 가이드에서는 장애 조치를 사용하는 내부 TCP/UDP 부하 분산기를 구성하고 테스트하는 방법을 보여줍니다. 이 섹션의 단계에서는 다음을 구성하는 방법을 설명합니다.

  1. 커스텀 서브넷이 있는 샘플 VPC 네트워크
  2. 백엔드 VM에 대한 수신 연결을 허용하는 방화벽 규칙
  3. 백엔드 VM:
    • us-west1-a 영역의 비관리형 인스턴스 그룹에 있는 기본 백엔드 1개
    • us-west1-c 영역의 비관리형 인스턴스 그룹에 있는 장애 조치 백엔드 1개
  4. 연결을 테스트하고 장애 조치 동작을 관찰하기 위한 클라이언트 VM 1개
  5. 다음 내부 TCP/UDP 부하 분산기 구성요소:
    • 백엔드 서비스의 상태 확인
    • 백엔드 VM 간의 연결 분산을 관리하기 위한 us-west1 리전의 내부 백엔드 서비스
    • 부하 분산기의 프런트엔드에 대한 내부 전달 규칙 및 내부 IP 주소

이 예시의 아키텍처는 다음과 같습니다.

내부 TCP/UDP 부하 분산을 위한 간단한 장애 조치 예시(클릭하여 확대)
내부 TCP/UDP 부하 분산을 위한 간단한 장애 조치 예시(확대하려면 클릭)

네트워크, 리전, 서브넷 구성

이 예시에서는 다음 VPC 네트워크, 리전, 서브넷을 사용합니다.

  • 네트워크: 네트워크는 커스텀 모드 VPC 네트워크이며 이름은 lb-network입니다.

  • 리전: 리전은 us-west1입니다.

  • 서브넷: 서브넷 lb-subnet10.1.2.0/24 IP 범위를 사용합니다.

예시 네트워크 및 서브넷을 만들려면 다음 단계를 따르세요.

Console

  1. Google Cloud Platform Console의 VPC 네트워크 페이지로 이동합니다.
    VPC 네트워크 페이지로 이동
  2. VPC 네트워크 만들기를 클릭합니다.
  3. 이름lb-network로 입력합니다.
  4. 서브넷 섹션에서 다음을 수행합니다.
    • 서브넷 생성 모드커스텀으로 설정합니다.
    • 새 서브넷 섹션에 다음 정보를 입력합니다.
      • 이름: lb-subnet
      • 리전: us-west1
      • IP 주소 범위: 10.1.2.0/24
      • 완료를 클릭합니다.
  5. 만들기를 클릭합니다.

gcloud

  1. 커스텀 VPC 네트워크를 만듭니다.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. us-west1 리전의 lb-network 네트워크에 서브넷을 만듭니다.

    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

방화벽 규칙 구성

이 예시에서는 다음과 같은 방화벽 규칙을 사용합니다.

  • fw-allow-lb-subnet: VPC 네트워크의 모든 대상에 적용되는 인그레스 규칙으로, 10.1.2.0/24 범위의 소스에서 오는 트래픽을 허용합니다. 이 규칙은 lb-subnet 내의 소스에서 부하 분산되는 인스턴스(VM)로의 수신 트래픽을 허용합니다.

  • fw-allow-ssh: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로, TCP 포트 22에서 임의의 주소로부터 수신되는 SSH 연결을 허용합니다. 이 규칙에 더 제한적인 소스 IP 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작하려는 시스템의 IP 범위를 지정할 수 있습니다. 이 예시에서는 allow-ssh 대상 태그를 사용하여 방화벽 규칙이 적용되는 VM을 식별합니다.

  • fw-allow-health-check: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로, GCP 상태 확인 시스템의 트래픽을 허용합니다(130.211.0.0/2235.191.0.0/16). 이 예시에서는 allow-health-check 대상 태그를 사용하여 적용해야 할 인스턴스를 식별합니다.

이러한 방화벽 규칙이 없으면 기본 거부 인그레스 규칙은 백엔드 인스턴스로 들어오는 트래픽을 차단합니다.

Console

  1. Google Cloud Platform Console의 방화벽 규칙 페이지로 이동합니다.
    방화벽 규칙 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭하고 다음 정보를 입력하여 서브넷 트래픽을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-lb-subnet
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 네트워크의 모든 인스턴스
    • 소스 필터: IP ranges
    • 소스 IP 범위: 10.1.2.0/24
    • 프로토콜 및 포트: 모두 허용
  3. 만들기를 클릭합니다.
  4. 방화벽 규칙 만들기를 다시 클릭하여 수신 SSH 연결을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-ssh
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: allow-ssh
    • 소스 필터: IP ranges
    • 소스 IP 범위: 0.0.0.0/0
    • 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택한 다음 tcp:22를 입력합니다.
  5. 만들기를 클릭합니다.
  6. 방화벽 규칙 만들기를 세 번째 클릭하여 GCP 상태 확인을 허용하는 규칙을 만듭니다.
    • 이름: fw-allow-health-check
    • 네트워크: lb-network
    • 우선순위: 1000
    • 트래픽 방향: 인그레스
    • 일치 시 작업: 허용
    • 대상: 지정된 대상 태그
    • 대상 태그: allow-health-check
    • 소스 필터: IP ranges
    • 소스 IP 범위: 130.211.0.0/2235.191.0.0/16
    • 프로토콜 및 포트: 모두 허용
  7. 만들기를 클릭합니다.

gcloud

  1. 서브넷에서의 통신을 허용하는 fw-allow-lb-subnet 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create fw-allow-lb-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. allow-ssh 네트워크 태그를 사용해 VM으로 가는 SSH 연결을 허용하는 fw-allow-ssh 방화벽 규칙을 만듭니다. source-ranges를 생략하면 GCP가 모든 소스를 의미하는 것으로 규칙을 해석합니다.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. GCP 상태 확인을 허용하는 fw-allow-health-check 규칙을 만듭니다.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

백엔드 VM 및 인스턴스 그룹 만들기

이 단계에서는 백엔드 VM 및 비관리형 인스턴스 그룹을 만듭니다.

  • us-west1-a의 인스턴스 그룹 ig-a는 다음과 같은 두 개의 VM이 있는 기본 백엔드입니다.
    • vm-a1
    • vm-a2
  • us-west1-c의 인스턴스 그룹 ig-c는 다음과 같은 두 개의 VM이 있는 장애 조치 백엔드입니다.
    • vm-c1
    • vm-c2

명확히 설명하고 한 영역이 다운될 경우 장애 조치를 처리하기 위해 기본 및 장애 조치 백엔드는 별도의 영역에 배치됩니다.

각 기본 및 백업 VM은 TCP 포트 80 및 443에서 Apache 웹 서버를 실행하도록 구성됩니다. 각 VM에는 클라이언트 액세스를 위한 lb-subnet의 내부 IP 범위와 SSH 액세스를 위한 임시 외부(공개) IP 주소가 할당됩니다. 외부 IP 주소 제거에 대한 자세한 내용은 백엔드 VM에서 외부 IP 주소 제거를 참조하세요.

기본적으로 Apache는 임의의 IP 주소에 바인딩되도록 구성됩니다. 내부 TCP/UDP 부하 분산기는 대상 IP를 보존하여 패킷을 전달합니다.

기본 및 백업 VM에서 실행 중인 서버 소프트웨어가 부하 분산기의 내부 전달 규칙의 IP 주소에서 수신 대기하는지 확인합니다. 여러 내부 전달 규칙을 구성하는 경우 소프트웨어가 각기 연결된 내부 IP 주소를 수신하는지 확인합니다. 내부 TCP/UDP 부하 분산기가 백엔드 VM에 전달하는 패킷의 대상 IP 주소는 전달 규칙의 내부 IP 주소입니다.

설명의 편의를 위해 모든 기본 및 백업 VM은 Debian GNU/Linux 9를 실행합니다.

Console

백엔드 VM 만들기

  1. Google Cloud Platform Console의 VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 다음 단계를 반복하여 다음 이름 및 영역 조합으로 4개의 VM을 만듭니다.
    • 이름: vm-a1, 영역: us-west1-a
    • 이름: vm-a2, 영역: us-west1-a
    • 이름: vm-c1, 영역: us-west1-c
    • 이름: vm-c2, 영역: us-west1-c
  3. 인스턴스 만들기를 클릭합니다.
  4. 이름을 2단계에 표시된 대로 설정합니다.
  5. 리전의 경우 us-west1을 선택하고 2단계에 표시된 대로 영역을 선택합니다.
  6. 부팅 디스크 섹션에서 선택된 이미지가 Debian GNU/Linux 9 Stretch인지 확인합니다. 필요한 경우 선택을 클릭하여 이미지를 변경합니다.
  7. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 클릭하고 다음과 같이 변경합니다.

    • 네트워킹을 클릭하고 allow-sshallow-health-check 네트워크 태그를 추가합니다.
    • 네트워크 인터페이스 아래의 수정 버튼을 클릭하고 다음과 같이 변경한 후 완료를 클릭합니다.
      • 네트워크: lb-network
      • 서브넷: lb-subnet
      • 기본 내부 IP: 임시(자동)
      • 외부 IP: 임시
    • 관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트 내용을 복사하여 붙여넣습니다. 스크립트 내용은 4개의 모든 VM에서 동일합니다.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  8. 만들기를 클릭합니다.

인스턴스 그룹 생성

  1. Google Cloud Platform Console의 인스턴스 그룹 페이지로 이동합니다.
    인스턴스 그룹 페이지로 이동
  2. 다음 조합을 사용해 다음 단계를 반복하여 각각 VM이 2개 있는 비관리형 인스턴스 그룹 2개를 만듭니다.
    • 인스턴스 그룹: ig-a, 영역: us-west1-a, VM: vm-a1vm-a2
    • 인스턴스 그룹: ig-c, 영역: us-west1-c, VM: vm-c1vm-c2
  3. 인스턴스 그룹 만들기를 클릭합니다.
  4. 이름을 2단계에 표시된 대로 설정합니다.
  5. 위치 섹션에서 단일 영역을 선택하고 리전에는 us-west1을 선택한 다음 2단계에 표시된 대로 영역을 선택합니다.
  6. 그룹 유형 섹션에서 비관리형 인스턴스 그룹을 선택합니다.
  7. 네트워크lb-network를 입력합니다.
  8. 서브네트워크lb-subnet을 입력합니다.
  9. VM 인스턴스 섹션에서 2단계에 표시된 대로 VM을 추가합니다.
  10. 만들기를 클릭합니다.

gcloud

  1. [VM-NAME][ZONE]에 대한 4가지 조합을 사용하여 다음 명령어를 4번 실행하여 4개의 VM을 만듭니다. 스크립트 내용은 4개의 모든 VM에서 동일합니다.

    • vm-a1[VM-NAME]us-west1-a[ZONE]
    • vm-a2[VM-NAME]us-west1-a[ZONE]
    • vm-c1[VM-NAME]us-west1-c[ZONE]
    • vm-c2[VM-NAME]us-west1-c[ZONE]
    gcloud compute instances create [VM-NAME] \
        --zone=[ZONE] \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. 각 영역에서 다음과 같이 비관리형 인스턴스 그룹 2개를 만듭니다.

    gcloud compute instance-groups unmanaged create ig-a \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-c \
        --zone=us-west1-c
    
  3. VM을 적절한 인스턴스 그룹에 추가합니다.

    gcloud compute instance-groups unmanaged add-instances ig-a \
        --zone=us-west1-a \
        --instances=vm-a1,vm-a2
    gcloud compute instance-groups unmanaged add-instances ig-c \
        --zone=us-west1-c \
        --instances=vm-c1,vm-c2
    

클라이언트 VM 만들기

이 예시에서는 부하 분산기와 동일한 리전에 클라이언트 VM(vm-client)을 만듭니다. 클라이언트는 장애 조치의 작동 방식을 보여주는 데 사용됩니다.

Console

  1. Google Cloud Platform Console의 VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 인스턴스 만들기를 클릭합니다.
  3. 이름vm-client로 설정합니다.
  4. 영역us-west1-a로 설정합니다.
  5. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 클릭하고 다음과 같이 변경합니다.
    • 네트워킹을 클릭하고 네트워크 태그allow-ssh를 추가합니다.
    • 네트워크 인터페이스 아래의 수정 버튼을 클릭하고 다음을 변경한 후 완료를 클릭합니다.
      • 네트워크: lb-network
      • 서브넷: lb-subnet
      • 기본 내부 IP: 임시(자동)
      • 외부 IP: 임시
  6. 만들기를 클릭합니다.

gcloud

클라이언트 VM은 부하 분산기와 동일한 리전의 모든 영역에 있을 수 있으며 해당 리전의 모든 서브넷을 사용할 수 있습니다. 이 예시에서 클라이언트는 us-west1-a 영역에 있으며 기본 VM과 백업 VM에서 사용하는 것과 동일한 서브넷을 사용합니다.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

부하 분산기 구성요소 구성

이러한 단계를 통해 상태 확인 및 백엔드 서비스부터 프런트엔드 구성에 이르기까지 모든 내부 TCP/UDP 부하 분산기 구성요소를 구성합니다.

  • 상태 확인: 이 예시에서는 HTTP 200 (OK) 응답만 확인하는 HTTP 상태 확인을 사용합니다. 자세한 내용은 내부 TCP/UDP 부하 분산 개요의 상태 확인 섹션을 참조하세요.

  • 백엔드 서비스: 예시에서 내부 부하 분산기를 통해 HTTP 트래픽을 전달하므로 구성은 UDP가 아닌 TCP를 지정합니다. 장애 조치를 설명하기 위해 이 백엔드 서비스의 장애 조치율은 0.75입니다.

  • 전달 규칙: 이 예시에서는 하나의 내부 전달 규칙을 만듭니다.

  • 내부 IP 주소: 이 예시에서는 전달 규칙을 만들 때 내부 IP 주소 10.1.2.99를 지정합니다.

Console

부하 분산기 생성 및 백엔드 서비스 구성

  1. Google Cloud Platform Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 만들기를 클릭합니다.
  3. TCP 부하 분산에서 구성 시작을 클릭합니다.
  4. 인터넷 연결 또는 내부 전용에서 VM 사이에서만 분산을 선택합니다.f
  5. 계속을 클릭합니다.
  6. 이름be-ilb로 설정합니다.
  7. 백엔드 구성을 클릭하고 다음과 같이 변경합니다.
    1. 리전: us-west1
    2. 네트워크: lb-network
    3. 백엔드새 항목 섹션에서 ig-a 인스턴스 그룹을 선택합니다. 이 인스턴스 그룹을 백업용 장애 조치 그룹으로 사용이 선택되지 않았음을 확인합니다. 완료를 클릭합니다.
    4. 백엔드 추가를 클릭합니다. 새 항목 섹션이 표시되면 ig-c 인스턴스 그룹을 선택합니다. 이 인스턴스 그룹을 백업용 장애 조치 그룹으로 사용을 선택합니다. 완료를 클릭합니다.
    5. 상태 확인에서 다른 상태 확인 생성을 선택하고 다음 정보를 입력한 다음 저장 후 계속을 클릭합니다.
      • 이름: hc-http-80
      • 프로토콜: HTTP
      • 포트: 80
      • 프록시 프로토콜: NONE
      • 요청 경로: /
    6. 고급 구성을 클릭합니다. 장애 조치 정책 섹션에서 다음을 구성합니다.
      • 장애 조치율: 0.75
      • 장애 조치 시 연결 드레이닝 사용 설정을 선택합니다.
    7. 계속하기 전에 백엔드 구성 옆에 파란색 체크표시가 있는지 확인합니다. 그렇지 않은 경우 이 단계를 검토합니다.
  8. 프런트엔드 구성을 클릭합니다. 새 프런트엔드 IP 및 포트 섹션에서 다음과 같이 변경합니다.
    1. 이름: fr-ilb
    2. 서브네트워크: ilb-subnet
    3. 내부 IP에서 고정 내부 IP 주소 예약을 선택하고 다음 정보를 입력한 다음 예약을 클릭합니다.
      • 이름: ip-ilb
      • 고정 IP 주소: 직접 선택
      • 커스텀 IP 주소: 10.1.2.99
    4. 포트: 단일을 선택하고 포트 번호80을 입력합니다.
    5. 계속하기 전에 프런트엔드 구성 옆에 파란색 체크표시가 있는지 확인합니다. 그렇지 않은 경우 이 단계를 검토합니다.
  9. 검토 및 완료를 클릭합니다. 설정한 내용을 다시 한 번 확인합니다.
  10. 만들기를 클릭합니다.

gcloud

  1. 새 HTTP 상태 확인을 만들어 80에서 VM에 대한 TCP 연결을 테스트합니다.

    gcloud compute health-checks create http hc-http-80 \
        --port=80
    
  2. HTTP 트래픽에 대한 백엔드 서비스를 만듭니다.

    gcloud beta compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --failover-ratio 0.75
    
  3. 기본 백엔드를 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. 백엔드 서비스에 장애 조치 백엔드를 추가합니다.

    gcloud beta compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-c \
        --instance-group-zone=us-west1-c \
        --failover
    
  5. 백엔드 서비스에 대한 전달 규칙을 만듭니다. 전달 규칙을 만들 때 서브넷의 내부 IP에 10.1.2.99를 지정합니다.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

테스트

이 테스트는 부하 분산기 구성을 확인하고 예상되는 동작을 확인하는 방법을 보여줍니다.

클라이언트 테스트 절차

이 절차에서는 클라이언트 VM에서 부하 분산기에 연결합니다. 이 절차를 사용하여 다른 테스트를 완료합니다.

  1. 클라이언트 VM 인스턴스에 연결합니다.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. curl을 사용하여 부하 분산기에 대한 웹 요청을 만들어 IP 주소에 연결합니다.

    curl http://10.1.2.99
    
  3. curl 명령어에서 반환된 텍스트를 확인합니다. 응답을 생성하는 백엔드 VM의 이름이 이 텍스트에 표시됩니다(예: Page served from: vm-a1).

초기 상태 테스트

예시 부하 분산기를 구성한 후에는 4개의 백엔드 VM 모두 정상 상태여야 합니다.

  • 2개의 기본 VM, vm-a1vm-a2
  • 2개의 백업 VM, vm-c1vm-c2

클라이언트 테스트 절차를 따릅니다. 두 번째 단계를 몇 번 반복합니다. 2개의 기본 VM인 vm-a1vm-a2는 모두 정상 상태이므로 예상되는 동작은 두 기본 VM이 트래픽을 제공하는 것입니다. 이 부하 분산기에 구성된 세션 어피니티가 없으므로 각 기본 VM이 응답의 약 절반을 제공합니다.

장애 조치 테스트

이 테스트에서는 장애 조치 동작을 관찰할 수 있도록 vm-a1의 장애를 시뮬레이션합니다.

  1. vm-a1 VM에 연결합니다.

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Apache 웹 서버를 중지합니다. 10초 후 GCP는이 VM을 비정상으로 간주합니다. (설정에서 만든 hc-http-80 상태 확인의 기본 확인 간격은 5초이며 비정상 임계값은 2회 연속 프로브 실패입니다.)

    sudo apachectl stop
    
  3. 클라이언트 테스트 절차를 따릅니다. 두 번째 단계를 몇 번 반복합니다. 예상되는 동작은 2개의 백업 VM vm-c1vm-c2에서 트래픽을 제공하는 것입니다. 기본 VM은 vm-a2만 정상이므로 총 기본 VM 대비 정상 기본 VM의 비율은 0.5입니다. 이 값은 장애 조치 임계값 0.75보다 작으므로 GCP는 부하 분산기의 활성 풀을 재구성하여 백업 VM을 사용했습니다. 이 부하 분산기에 대해 세션 어피니티가 구성되지 않은 한 각 백업 VM이 약 절반의 응답을 제공합니다.

장애 복구 테스트

이 테스트는 vm-a1에서 Apache 서버를 다시 시작하여 장애 복구를 시뮬레이션합니다.

  1. vm-a1 VM에 연결합니다.

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Apache 웹 서버를 시작하고 10초 동안 기다립니다.

    sudo apachectl start
    
  3. 클라이언트 테스트 절차를 따릅니다. 두 번째 단계를 몇 번 반복합니다. 예상되는 동작은 2개의 기본 VM인 vm-a1vm-a2가 트래픽을 제공하는 것입니다. 두 기본 VM 모두 정상 상태에서 총 기본 VM 대비 정상 기본 VM의 비율이 1.0이고, 이는 장애 조치 임계값인 0.75보다 크므로 GCP는 다시 기본 VM을 사용하도록 활성 풀을 구성했습니다.

백엔드 VM 추가

이 섹션에서는 부하 분산기에 기본 VM과 백업 VM을 더 추가하여 구성 예시를 확장합니다. 같은 리전의 여러 영역에 기본 VM과 백업 VM을 배포할 수 있음을 보여주기 위해 2개의 백엔드 인스턴스 그룹을 추가로 만듭니다.

  • us-west1-c의 세 번째 인스턴스 그룹 ig-d는 2개의 VM이 있는 기본 백엔드 역할을 합니다.
    • vm-d1
    • vm-d2
  • us-west1-a의 네 번째 인스턴스 그룹 ig-b는 2개의 VM이 있는 장애 조치 백엔드 역할을 합니다.
    • vm-b1
    • vm-b2

이 예시의 수정된 아키텍처는 다음과 같습니다.

멀티 영역 내부 TCP/UDP 부하 분산 장애 조치(클릭하여 확대)
멀티 영역 내부 TCP/UDP 부하 분산 장애 조치(클릭하여 확대)

추가 VM 및 인스턴스 그룹 만들기

다음 단계에 따라 기본 및 백업 VM과 해당 비관리형 인스턴스 그룹을 추가로 만듭니다.

Console

백엔드 VM 만들기

  1. Google Cloud Platform Console의 VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 다음 단계를 반복하여 다음 이름 및 영역 조합으로 4개의 VM을 만듭니다.
    • 이름: vm-b1, 영역: us-west1-a
    • 이름: vm-b2, 영역: us-west1-a
    • 이름: vm-d1, 영역: us-west1-c
    • 이름: vm-d2, 영역: us-west1-c
  3. 인스턴스 만들기를 클릭합니다.
  4. 이름을 2단계에 표시된 대로 설정합니다.
  5. 리전의 경우 us-west1을 선택하고 2단계에 표시된 대로 영역을 선택합니다.
  6. 부팅 디스크 섹션에서 선택된 이미지가 Debian GNU/Linux 9 Stretch인지 확인합니다. 필요한 경우 선택을 클릭하여 이미지를 변경합니다.
  7. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 클릭하고 다음과 같이 변경합니다.

    • 네트워킹을 클릭하고 allow-sshallow-health-check 네트워크 태그를 추가합니다.
    • 네트워크 인터페이스 아래의 수정 버튼을 클릭하고 다음을 변경한 후 완료를 클릭합니다.
      • 네트워크: lb-network
      • 서브넷: lb-subnet
      • 기본 내부 IP: 임시(자동)
      • 외부 IP: 임시
    • 관리를 클릭합니다. 시작 스크립트 필드에서 다음 스크립트 내용을 복사하여 붙여넣습니다. 스크립트 내용은 4개의 모든 VM에서 동일합니다.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  8. 만들기를 클릭합니다.

인스턴스 그룹 생성

  1. Google Cloud Platform Console의 인스턴스 그룹 페이지로 이동합니다.
    인스턴스 그룹 페이지로 이동
  2. 이러한 조합을 사용하여 각각 VM이 2개 있는 비관리형 인스턴스 그룹 2개를 만들려면 다음 단계를 반복합니다.
    • 인스턴스 그룹: ig-b, 영역: us-west1-a, VM: vm-b1vm-b2
    • 인스턴스 그룹: ig-d, 영역: us-west1-c, VM: vm-d1vm-d2
  3. 인스턴스 그룹 만들기를 클릭합니다.
  4. 이름을 2단계에 표시된 대로 설정합니다.
  5. 위치 섹션에서 단일 영역을 선택하고 리전에는 us-west1을 선택한 다음 2단계에 표시된 대로 영역을 선택합니다.
  6. 그룹 유형 섹션에서 비관리형 인스턴스 그룹을 선택합니다.
  7. 네트워크lb-network를 입력합니다.
  8. 서브네트워크lb-subnet을 입력합니다.
  9. VM 인스턴스 섹션에서 2단계에 표시된 대로 VM을 추가합니다.
  10. 만들기를 클릭합니다.

gcloud

  1. [VM-NAME][ZONE]에 대한 4가지 조합을 사용하여 다음 명령어를 4번 실행하여 4개의 VM을 만듭니다. 스크립트 내용은 4개의 모든 VM에서 동일합니다.

    • vm-b1[VM-NAME]us-west1-a[ZONE]
    • vm-b2[VM-NAME]us-west1-a[ZONE]
    • vm-d1[VM-NAME]us-west1-c[ZONE]
    • vm-d2[VM-NAME]us-west1-c[ZONE]
    gcloud compute instances create [VM-NAME] \
        --zone=[ZONE] \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. 각 영역에서 다음과 같이 비관리형 인스턴스 그룹 2개를 만듭니다.

    gcloud compute instance-groups unmanaged create ig-b \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-d \
        --zone=us-west1-c
    
  3. VM을 적절한 인스턴스 그룹에 추가합니다.

    gcloud compute instance-groups unmanaged add-instances ig-b \
        --zone=us-west1-a \
        --instances=vm-b1,vm-b2
    gcloud compute instance-groups unmanaged add-instances ig-d \
        --zone=us-west1-c \
        --instances=vm-d1,vm-d2
    

기본 백엔드 추가

이 절차를 기존 내부 TCP/UDP 부하 분산기의 백엔드 서비스에 기본 백엔드로 비관리형 인스턴스 그룹을 추가하기 위한 템플릿으로 사용할 수 있습니다. 예시 구성에서 이 절차는 인스턴스 그룹 ig-d를 기본 백엔드로 be-ilb 부하 분산기에 추가하는 방법을 보여줍니다.

Console

  1. Google Cloud Platform Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 탭에서 기존 내부 TCP 부하 분산기 또는 내부 UDP 부하 분산기의 이름을 클릭합니다(이 예시에서는 be-ilb).
  3. 수정을 클릭합니다.
  4. 백엔드 구성에서 백엔드 추가를 클릭하고 비관리형 인스턴스 그룹을 선택합니다(이 예시에서는 ig-d).
  5. 이 인스턴스 그룹을 백업용 장애 조치 그룹으로 사용이 선택되지 않았음을 확인합니다.
  6. 완료를 클릭한 다음 업데이트를 클릭합니다.

gcloud

다음 gcloud 명령어를 사용하여 기존 내부 TCP/UDP 부하 분산기의 백엔드 서비스에 기본 백엔드를 추가합니다.

gcloud beta compute backend-services add-backend [BACKEND_SERVICE_NAME] \
   --instance-group [INSTANCE_GROUP_NAME] \
   --instance-group-zone [INSTANCE_GROUP_ZONE] \
   --region [REGION]

각 매개변수는 다음과 같습니다.

  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다. 예를 들어 be-ilb를 사용합니다.
  • [INSTANCE_GROUP_NAME]은 기본 백엔드로 추가할 인스턴스 그룹의 이름입니다. 예를 들어 ig-d를 사용합니다.
  • [INSTANCE_GROUP_ZONE]은 인스턴스 그룹이 정의된 영역입니다. 예를 들어 us-west1-c를 사용합니다.
    • [REGION]은 부하 분산기의 리전입니다. 예를 들어 us-west1을 사용합니다.

api

regionBackendServices.patch 메서드를 사용하여 기본 백엔드를 기존 백엔드 서비스에 추가

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/backendServices/[BACKEND_SERVICE_NAME]

{
  "backends":
  [
    {
      "balancingMode": "connection",
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[INSTANCE_GROUP_ZONE]/instanceGroups/[INSTANCE_GROUP_NAME]"
    }
  ]
}

각 매개변수는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [REGION]은 부하 분산기의 리전입니다. 예를 들어 us-west1을 사용합니다.
  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다. 예를 들어 be-ilb를 사용합니다.
  • [INSTANCE_GROUP_ZONE]은 인스턴스 그룹이 정의된 영역입니다. 예를 들어 us-west1-c를 사용합니다.
  • [INSTANCE_GROUP_NAME]은 기본 백엔드로 추가할 인스턴스 그룹의 이름입니다. 예를 들어 ig-d를 사용합니다.

장애 조치 백엔드 추가

이 절차를 기존 내부 TCP/UDP 부하 분산기의 백엔드 서비스에 장애 조치 백엔드로 비관리형 인스턴스 그룹을 추가하기 위한 템플릿으로 사용할 수 있습니다. 예시 구성에서 이 절차는 인스턴스 그룹 ig-b를 장애 조치 백엔드로 be-ilb 부하 분산기에 추가하는 방법을 보여줍니다.

Console

  1. Google Cloud Platform Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 탭에서 기존 내부 TCP 부하 분산기 또는 내부 UDP 부하 분산기의 이름을 클릭합니다(이 예시에서는 be-ilb).
  3. 수정을 클릭합니다.
  4. 백엔드 구성에서 백엔드 추가를 클릭하고 비관리형 인스턴스 그룹을 선택합니다(이 예시에서는 ig-b).
  5. 이 인스턴스 그룹을 백업용 장애 조치 그룹으로 사용을 선택합니다.
  6. 완료를 클릭한 다음 업데이트를 클릭합니다.

gcloud

다음 gcloud 명령어를 사용하여 기존 내부 TCP/UDP 부하 분산기의 백엔드 서비스에 장애 조치 백엔드를 추가합니다.

gcloud beta compute backend-services add-backend [BACKEND_SERVICE_NAME] \
   --instance-group [INSTANCE_GROUP_NAME] \
   --instance-group-zone [INSTANCE_GROUP_ZONE] \
   --region [REGION] \
   --failover

각 매개변수는 다음과 같습니다.

  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다. 예를 들어 be-ilb를 사용합니다.
  • [INSTANCE_GROUP_NAME]은 장애 조치 백엔드로 추가할 인스턴스 그룹의 이름입니다. 예를 들어 ig-b를 사용합니다.
  • [INSTANCE_GROUP_ZONE]은 인스턴스 그룹이 정의된 영역입니다. 예를 들어 us-west1-a를 사용합니다.
  • [REGION]은 부하 분산기의 리전입니다. 예를 들어 us-west1을 사용합니다.

api

regionBackendServices.patch 메서드를 사용하여 장애 조치 백엔드를 기존 백엔드 서비스에 추가

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/backendServices/[BACKEND_SERVICE_NAME]

{
  "backends":
  [
    {
      "balancingMode": "connection",
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[INSTANCE_GROUP_ZONE]/instanceGroups/[INSTANCE_GROUP_NAME]"
    }
  ]
}

각 매개변수는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [REGION]은 부하 분산기의 리전입니다. 예를 들어 us-west1을 사용합니다.
  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다. 예를 들어 be-ilb를 사용합니다.
  • [INSTANCE_GROUP_ZONE]은 인스턴스 그룹이 정의된 영역입니다. 예를 들어 us-west1-a를 사용합니다.
  • [INSTANCE_GROUP_NAME]은 장애 조치 백엔드로 추가할 인스턴스 그룹의 이름입니다. 예를 들어 ig-b를 사용합니다.

기본 또는 장애 조치 백엔드 변환

내부 TCP/UDP 부하 분산기의 백엔드 서비스에서 인스턴스 그룹을 삭제하지 않고도 기본 백엔드를 장애 조치 백엔드로 또는 그 반대로 변환할 수 있습니다.

Console

  1. Google Cloud Platform Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 탭에서 기존 내부 TCP 부하 분산기 또는 내부 UDP 부하 분산기의 이름을 클릭합니다.
  3. 수정을 클릭합니다.
  4. 백엔드 구성에서 백엔드 인스턴스 그룹 중 하나의 이름을 클릭합니다. 그런 다음 아래를 실행합니다.
    • 인스턴스 그룹을 장애 조치 백엔드로 만들려면 이 인스턴스 그룹을 백업용 장애 조치 그룹으로 사용을 선택합니다.
    • 인스턴스 그룹을 기본 백엔드로 만들려면 이 인스턴스 그룹을 백업용 장애 조치 그룹으로 사용 선택을 취소합니다.
  5. 완료를 클릭한 다음 업데이트를 클릭합니다.

gcloud

다음 gcloud 명령어를 사용하여 기존 기본 백엔드를 장애 조치 백엔드로 변환합니다.

gcloud beta compute backend-services update-backend [BACKEND_SERVICE_NAME] \
   --instance-group [INSTANCE_GROUP_NAME] \
   --instance-group-zone [INSTANCE_GROUP_ZONE] \
   --region [REGION] \
   --failover

다음 gcloud 명령어를 사용하여 기존 장애 조치 백엔드를 기본 백엔드로 변환합니다.

gcloud beta compute backend-services update-backend [BACKEND_SERVICE_NAME] \
   --instance-group [INSTANCE_GROUP_NAME] \
   --instance-group-zone [INSTANCE_GROUP_ZONE] \
   --region [REGION] \
   --no-failover

각 매개변수는 다음과 같습니다.

  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다.
  • [INSTANCE_GROUP_NAME]은 인스턴스 그룹의 이름입니다.
  • [INSTANCE_GROUP_ZONE]은 인스턴스 그룹이 정의된 영역입니다.
  • [REGION]은 부하 분산기의 리전입니다.

api

regionBackendServices.patch 메서드를 사용하여 기본 백엔드를 장애 조치 백엔드로 또는 그 반대로 변환

기본 백엔드를 장애 조치 백엔드로 변환하려면 다음을 사용하세요.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/backendServices/[BACKEND_SERVICE_NAME]

{
  "backends":
  [
    {
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[INSTANCE_GROUP_ZONE]/instanceGroups/[INSTANCE_GROUP_NAME]"
    }
  ]
}

장애 조치 백엔드를 기본 백엔드로 변환하려면 다음을 사용하세요.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/backendServices/[BACKEND_SERVICE_NAME]

{
  "backends":
  [
    {
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[INSTANCE_GROUP_ZONE]/instanceGroups/[INSTANCE_GROUP_NAME]"
    }
  ],
}

각 매개변수는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [REGION]은 부하 분산기의 리전입니다.
  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다.
  • [INSTANCE_GROUP_ZONE]은 인스턴스 그룹이 정의된 영역입니다.
  • [INSTANCE_GROUP_NAME]은 인스턴스 그룹의 이름입니다.

장애 조치 정책 구성

이 섹션에서는 내부 TCP/UDP 부하 분산기의 백엔드 서비스에 대한 장애 조치 정책을 관리하는 방법을 설명합니다. 장애 조치 정책은 다음으로 구성됩니다.

  • 장애 조치율
  • 모든 백엔드 VM이 비정상적인 경우 트래픽 차단
  • 장애 조치 시 연결 드레이닝

장애 조치 정책의 매개 변수에 대한 자세한 내용은 다음을 참조하세요.

장애 조치 정책 정의

다음 안내에서는 기존 내부 TCP/UDP 부하 분산기의 장애 조치 정책을 정의하는 방법을 설명합니다.

Console

GCP Console을 사용하여 장애 조치 정책을 정의하려면 하나 이상의 장애 조치 백엔드가 필요합니다.

  1. Google Cloud Platform Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동
  2. 부하 분산기 탭에서 TCP(내부) 또는 UDP(내부) 부하 분산기를 선택합니다.
  3. 수정을 클릭합니다.
  4. 장애 조치 백엔드가 하나 이상 있어야 합니다. 적어도 하나의 부하 분산기 백엔드에 대해 이 인스턴스 그룹을 백업용 장애 조치 그룹으로 사용이 선택되어야 합니다.
  5. 고급 구성을 클릭합니다.
    • 장애 조치 정책에서 장애 조치율0.0 ~ 1.0 사이의 값으로 설정합니다.
    • 모든 활성 VM과 모든 백업 VM이 비정상적인 경우 트래픽을 중단하려면 Enable drop traffic(트래픽 중단 사용 설정) 옆의 확인란을 선택합니다.
    • 장애 조치 중 기존 연결을 빠르게 종료하려면 장애 조치 시 연결 드레이닝 사용 설정 옆의 확인란을 선택합니다.
  6. 검토 및 완료를 클릭한 다음 업데이트를 클릭합니다.

gcloud

gcloud 명령줄 도구를 사용하여 장애 조치 정책을 정의하려면 부하 분산기의 백엔드 서비스를 업데이트합니다.

gcloud beta compute backend-services update [BACKEND_SERVICE_NAME] \
   --region [REGION] \
   --failover-ratio [FAILOVER_RATIO] \
   --drop-traffic-if-unhealthy \
   --no-connection-drain-on-failover

각 매개변수는 다음과 같습니다.

  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다. 예를 들어 be-ilb를 사용합니다.
  • [REGION]은 부하 분산기의 리전입니다. 예를 들어 us-west1을 사용합니다.
  • [FAILOVER_RATIO]는 장애 조치율입니다. 가능한 값은 0.0 이상 1.0 이하입니다. 예를 들어 0.75를 사용합니다.
  • --drop-traffic-if-unhealthy는 모든 기본 VM과 모든 백업 VM이 비정상일 때 부하 분산기가 트래픽을 중단하도록 지시합니다. 모든 백엔드 VM이 비정상인 경우 모든 기본 VM 간에 트래픽을 분산하려면 이 옵션을 --no-drop-traffic-if-unhealthy로 변경합니다.
  • --no-connection-drain-on-failover는 장애 조치 시 기존 TCP 연결을 빠르게 종료하도록 부하 분산기에 지시합니다. --connection-drain-on-failover를 사용하여 장애 조치 중에 연결 드레이닝을 사용 설정합니다.

api

regionBackendServices.patch 메서드를 사용하여 장애 조치 정책을 정의합니다.

PATCH https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/backendServices/[BACKEND_SERVICE_NAME]

{
  "failoverPolicy":
  {
    "failoverRatio": [FAILOVER_RATIO],
    "dropTrafficIfUnhealthy": [true|false],
    "disableConnectionDrainOnFailover": [true|false]
  }
}

각 매개변수는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [REGION]은 부하 분산기의 리전입니다.
  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다.
  • [FAILOVER_RATIO]는 장애 조치율입니다. 가능한 값은 0.0 이상 1.0 이하입니다.
  • dropTrafficIfUnhealthytrue로 설정하면 모든 기본 VM과 모든 백업 VM이 비정상일 때 트래픽을 중단하도록 부하 분산기에 지시합니다. 모든 백엔드 VM이 비정상인 경우 모든 기본 VM 간에 트래픽을 분산하려면 false로 설정합니다.
  • disableConnectionDrainOnFailovertrue로 설정하면 부하 분산기는 장애 조치를 수행할 때 기존 TCP 연결을 빠르게 종료합니다. 장애 조치 중 연결 드레이닝을 사용 설정하려면 이 값을 false로 설정합니다.

장애 조치 정책 보기

다음 안내에서는 내부 TCP/UDP 부하 분산기의 기존 장애 조치 정책을 보는 방법을 설명합니다.

Console

내부 TCP/UDP 부하 분산기를 수정할 때 GCP Console에 기존 장애 조치 정책 설정이 표시됩니다. 자세한 내용은 장애 조치 정책 정의를 참조하세요.

gcloud

gcloud 명령줄 도구를 사용하여 장애 조치 정책 설정을 나열하려면 다음 명령어를 사용합니다. 장애 조치 정책의 정의되지 않은 설정은 기본 장애 조치 정책 값을 사용합니다.

gcloud beta compute backend-services describe [BACKEND_SERVICE_NAME] \
   --region [REGION] \
   --format="get(failoverPolicy)"

각 매개변수는 다음과 같습니다.

  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다. 예를 들어 be-ilb를 사용합니다.
  • [REGION]은 부하 분산기의 리전입니다. 예를 들어 us-west1을 사용합니다.

api

regionBackendServices.get 메서드를 사용하여 장애 조치 정책을 확인합니다.

API 요청에 대한 응답은 장애 조치 정책을 보여줍니다. 아래 예시를 참조하세요.

GET https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/backendServices/[BACKEND_SERVICE_NAME]

각 매개변수는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [REGION]은 부하 분산기의 리전입니다.
  • [BACKEND_SERVICE_NAME]은 부하 분산기의 백엔드 서비스 이름입니다.
{
...
"failoverPolicy": {
"disableConnectionDrainOnFailover": false,
"dropTrafficIfUnhealthy": false,
"failoverRatio": 0.75
...
}

다음 단계

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

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