리전 MIG 만들기 및 관리

이 문서에서는 리전 관리형 인스턴스 그룹(리전 MIG) 만들기 및 관리와 관련된 절차를 설명합니다. MIG를 만드는 방법에 대한 일반적인 내용은 관리형 인스턴스 그룹 만들기를 참조하세요.

리전 MIG는 리전의 여러 영역에 인스턴스를 분산하여 MIG 기반 워크로드의 복원력을 향상시킵니다. 여러 영역을 사용하면 단일 영역 내 모든 인스턴스에 장애가 발생하는 최악의 경우로부터 보호받을 수 있습니다.

리전 MIG를 선택해야 하는 이유, 추가 구성 옵션, 영역 MIG와의 차이점 등 리전 MIG에 대한 자세한 내용은 리전 MIG 개요를 참조하세요.

시작하기 전에

제한사항

  • 리전 MIG를 사용하면 영역당 VM을 최대 1,000개까지 포함하여 한 리전에 VM을 최대 2,000개까지 만들 수 있습니다. 영역 MIG를 사용하면 VM을 최대 1,000개까지 만들 수 있습니다. 더 필요하면 지원팀에 문의하세요.
  • MIG를 업데이트할 때 단일 요청으로 VM을 최대 1,000개까지 지정할 수 있습니다.
  • 스테이트풀(Stateful) MIG를 원하는 경우 스테이트풀(Stateful) MIG 제한사항을 검토하세요.

  • 리전 MIG에 부하 분산을 사용하려고 하면 다음 제한사항이 적용됩니다.

    • maxRate 분산 모드를 사용할 수 없습니다.
    • 리전 MIG에서 HTTP(S) 부하 분산 스키마를 사용하는 경우 maxRatePerInstance 또는 maxUtilization 분산 모드를 선택해야 합니다.
  • 리전 MIG를 자동 확장하려는 경우 다음 제한사항이 적용됩니다.

    • 수평 축소 및 확장하려면 사전 인스턴스 재분산을 사용 설정해야 합니다. 수평 확장만 가능하도록 자동 확장 처리의 모드를 설정한 경우 사전 인스턴스 재배포를 사용 설정할 필요가 없습니다.
    • Cloud Monitoring 측정항목을 기준으로 리전 MIG를 자동 확장하려고 하면 다음 제한사항이 적용됩니다.

      • 그룹별 측정항목을 사용할 수 없습니다.
      • 인스턴스별 측정항목에는 필터를 적용할 수 없습니다.

리전 MIG 만들기

Cloud Console, gcloud 도구 또는 Compute Engine API를 사용합니다.

각 영역의 용량이 그룹의 VM을 지원하는 데 부족하면 Compute Engine은 최대한 많은 VM을 만들고 추가 용량을 사용할 수 있게 되면 계속 잔여 VM을 만들려고 합니다.

리전 MIG를 만들 때는 먼저 특정 리소스가 영구 디스크처럼 영역별로 구성된다는 점을 염두에 두어야 합니다. 추가 영구 디스크처럼 인스턴스 템플릿에 영역별 리소스를 지정하는 경우 이 리전 MIG에서 만든 VM에 디스크를 연결할 수 있게 모든 영역에 디스크가 있어야 합니다.

기본적으로 요청에서 개별 영역을 명시적으로 지정하지 않으면 Compute Engine은 VM을 만들 영역을 3개 선택합니다. 세 개보다 많거나 적은 영역에 VM을 만들어야 하거나 사용할 영역을 선택하려면 요청에 영역 목록을 제공하면 됩니다. 자세한 내용은 영역 선택을 참조하세요.

기본적으로 사전 인스턴스 재분산이 사용 설정됩니다. 각 영역에서 VM 수를 수동으로 관리해야 하는 경우 사전 인스턴스 재분산을 중지할 수 있지만 자동 확장을 구성할 수 없습니다.

Console

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 인스턴스 그룹 만들기를 클릭하여 새 인스턴스 그룹을 만듭니다.
  3. 위치에서 멀티 영역을 선택합니다.
  4. 원하는 리전을 선택합니다.
  5. 특정 영역을 선택하려면 영역 구성을 클릭하여 사용할 영역을 선택합니다.
  6. 사전 인스턴스 재배포를 중지하려는 경우
    1. 자동 확장 모드자동 확장 안함으로 설정되어 있는지 확인합니다.
    2. 인스턴스 재배포사용 안함으로 설정합니다.
  7. 인스턴스 그룹의 인스턴스 템플릿을 선택하거나 새로 만듭니다.
  8. 이 그룹의 VM 수를 지정합니다. 영역 오류가 발생할 경우 애플리케이션을 지원하기에 충분한 VM을 프로비저닝해야 합니다.
  9. MIG 만들기 프로세스의 나머지 과정을 계속 진행합니다.

gcloud

모든 MIG에는 인스턴스 템플릿이 필요합니다. 인스턴스 템플릿이 없으면 템플릿 하나를 만듭니다. 예를 들어 다음 명령어는 기본 속성으로 기본 인스턴스 템플릿을 만듭니다.

gcloud compute instance-templates create example-template

그런 다음 --region 플래그와 함께 instance-groups managed create 명령어를 사용합니다. 예를 들어 다음 명령어는 us-east1 리전 내 영역 세 개에 리전 MIG를 만듭니다.

gcloud compute instance-groups managed create example-rmig \
    --template example-template  \
    --size 30 \
    --region us-east1

그룹에서 사용해야 하는 특정 영역을 선택하려면 다음과 같이 --zones 플래그를 지정합니다.

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c

사전 인스턴스 재분산을 사용하지 않으려면 --instance-redistribution-type 플래그를 NONE으로 설정합니다. 자동 확장을 사용하는 경우 사전 인스턴스 재배포를 중지할 수 없습니다.

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --instance-redistribution-type NONE \
    --region us-east1

API

모든 MIG에는 인스턴스 템플릿이 필요합니다. 인스턴스 템플릿이 없는 경우 하나 만듭니다.

다음으로 regionInstanceGroupManagers.insert 메서드에 대한 POST 요청을 작성합니다. 요청 본문에서 그룹 이름, 그룹 크기, 인스턴스 템플릿의 URL을 지정합니다. 원하는 경우 그룹 내 인스턴스의 기본 이름과 같은 다른 필드를 지정합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE"
}

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
  • REGION: 그룹의 리전입니다.
  • BASE_INSTANCE_NAME: 그룹의 일부로 생성되는 각 VM 인스턴스의 인스턴스 이름입니다. 예를 들어 example-instance의 기본 인스턴스 이름은 example-instance-[RANDOM_STRING]과 같은 이름의 인스턴스를 만듭니다. 여기서 [RANDOM_STRING]은 서버에서 생성됩니다.
  • INSTANCE_TEMPLATE_NAME: 사용할 인스턴스 템플릿입니다.
  • INSTANCE_GROUP_NAME: MIG 이름입니다.
  • TARGET_SIZE: 그룹의 대상 VM 수입니다.

특정 영역을 선택하려는 경우나 영역이 세 개보다 적거나 많은 리전에 VM을 만들려는 경우 요청에 distributionPolicy 속성을 포함하고 영역 목록을 지정합니다. ZONE을 VM을 만들 영역의 이름으로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/ZONE"},
       {"zone": "zones/ZONE"}
      ]
   }
}

예를 들어 다음은 us-east1-bus-east1-c 영역에 배포된 관리형 인스턴스가 10개 있는 example-rmig라는 리전 MIG를 만듭니다.

POST https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers

{
  "instanceTemplate": "global/instanceTemplates/example-instance",
  "name": "example-rmig",
  "targetSize": 10,
  "distributionPolicy": {
      "zones": [
        {"zone": "zones/us-east1-b"},
        {"zone": "zones/us-east1-c"}
      ]
   }
}

리전 MIG에서 관리형 인스턴스 작업

예를 들어 특정 이름의 인스턴스를 만들거나 삭제하기 위해 MIG의 특정 관리형 인스턴스에서 작업해야 하는 경우 리전 MIG와 영역 MIG에서의 절차는 모두 동일합니다. 관리형 인스턴스 작업을 참조하세요.

리전 MIG 및 관리형 인스턴스에 대한 정보 가져오기

예를 들어 구성을 보거나 상태를 검사하기 위해 MIG에 대한 정보를 가져오거나 MIG의 관리형 인스턴스에 대한 정보를 가져오려는 경우 리전 MIG와 영역 MIG에서의 절차는 모두 동일합니다. MIG 및 관리형 인스턴스에 대한 정보 가져오기를 참조하세요.

리전 관리형 인스턴스 그룹 업데이트

업데이터 기능을 사용하여 리전 MIG에 새 인스턴스 템플릿을 적용할 수 있습니다. 자세한 내용은 리전 MIG 업데이트를 참조하세요.

MIG에서 인스턴스를 추가하거나 제거하려면 관리형 인스턴스 작업을 참조하세요.

MIG 기능을 사용하거나 업데이트하려면 자동 복구, 부하 분산, 자동 확장, 자동 업데이트, 스테이트풀(Stateful) 워크로드 문서를 참조하세요.

사전 인스턴스 재배포 사용 중지 및 재사용

사전 인스턴스 재분산 기능은 리전에서 선택한 영역에서 VM 수를 짝수로 유지합니다. 이 구성은 영역 수준 장애 발생 시 애플리케이션의 가용성을 최대화합니다.

리전 MIG의 경우 사전 인스턴스 재배포가 기본적으로 설정되어 있지만 자동 확장되지 않는 MIG의 경우 사전 인스턴스 재배포를 해제할 수 있습니다. 사전 인스턴스 재배포가 해제되어 있으면 그룹은 여러 영역에 걸쳐 사전에 VM을 재배포하려고 시도하지 않습니다. 다음과 같은 경우에 유용합니다.

  • 실행 중인 다른 VM에 영향을 주지 않고 그룹에서 관리형 인스턴스를 직접 삭제하거나 폐기합니다.
  • 작업 완료 시 다른 작업자에게 영향을 주지 않고 일괄 작업자 VM을 삭제합니다.
  • 사전 인스턴스 재분산을 통해 스테이트풀(Stateful) 애플리케이션이 있는 VM을 원치 않는 자동 삭제로부터 보호합니다.

Cloud Console, gcloud 도구 또는 Compute Engine API를 사용하여 사전 인스턴스 재분산이 중지된 리전 MIG를 만들거나 기존 그룹에서 사전 인스턴스 재분산을 중지 또는 사용 설정합니다.

사전 인스턴스 재분산이 중지된 그룹 만들기

Console

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 인스턴스 그룹 만들기를 클릭하여 새 인스턴스 그룹을 만듭니다.
  3. 위치에서 멀티 영역을 선택합니다.
  4. 원하는 리전을 선택합니다.
  5. 특정 영역을 선택하려면 영역 구성을 클릭하여 사용할 영역을 선택합니다.
  6. 사전 인스턴스 재분산을 중지하려면 다음 안내를 따르세요.
    1. 자동 확장 모드자동 확장 안함으로 설정되어 있는지 확인합니다.
    2. 인스턴스 재배포사용 안함으로 설정합니다.
  7. 그룹의 인스턴스 템플릿을 선택하거나 새로 만듭니다.
  8. 이 그룹의 VM 수를 지정합니다. 영역 오류가 발생할 경우 애플리케이션을 지원하기에 충분한 VM을 프로비저닝해야 합니다.
  9. MIG 만들기 프로세스의 나머지 과정을 계속 진행합니다.

gcloud

사전 인스턴스를 재분산하지 않고 새 리전 MIG를 만들려면 NONE으로 설정된 --instance-redistribution-type 플래그와 함께 gcloud compute instance-groups managed create 명령어를 사용합니다.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

다음을 바꿉니다.

  • INSTANCE_GROUP_NAME: MIG 이름입니다.
  • INSTANCE_TEMPLATE_NAME: 그룹에 사용할 인스턴스 템플릿의 이름입니다.
  • TARGET_SIZE: 그룹의 대상 크기입니다.
  • ZONES: VM을 배포해야 하는 단일 리전의 영역 목록입니다.

예:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

API

사전 인스턴스를 재분산하지 않고 자동 확장되지 않는 리전 MIG를 만들려면 regionInstanceGroupManagers.insert 메서드에 POST 요청을 수행합니다. 요청 본문에 updatePolicy 속성을 포함하고 instanceRedistributionType 필드를 NONE으로 설정합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": "TARGET_SIZE",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
  • REGION: 인스턴스 그룹의 리전입니다.
  • INSTANCE_GROUP_NAME: MIG 이름입니다.
  • INSTANCE_TEMPLATE_NAME: 그룹에 사용할 인스턴스 템플릿의 이름입니다.
  • TARGET_SIZE: 인스턴스 그룹의 대상 크기입니다.
  • ZONE: VM을 배포해야 하는 단일 리전의 영역 이름입니다.

사전 인스턴스 재분산 중지

사전 인스턴스 재분산을 중지하려면 먼저 자동 확장을 중지하거나 수평 확장만으로 제한하도록 자동 확장 처리 모드를 설정해야 합니다.

Console

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 업데이트할 MIG를 선택하고 그룹 수정을 클릭합니다.
  3. 자동 확장 구성이 있으면 자동 확장 모드자동 확장 안함으로 설정되어 있는지 확인합니다.
  4. 인스턴스 재분산사용 안함으로 설정하여 자동 재분산을 중지합니다.
  5. 저장을 클릭합니다.

gcloud

자동 확장되지 않는 리전 MIG의 사전 인스턴스 재분산을 중지하려면 NONE으로 설정된 --instance-redistribution-type 플래그와 함께 compute instance-groups managed update 명령어를 사용합니다.

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --instance-redistribution-type NONE \
    --region REGION

다음을 바꿉니다.

  • INSTANCE_GROUP_NAME: MIG 이름입니다.
  • REGION: 인스턴스 그룹의 리전입니다.

API

자동 확장되지 않는 리전 MIG에서 사전 인스턴스 재분산을 중지하려면 regionInstanceGroupManagers.patch 메서드PATCH 요청을 수행합니다. 요청 본문에 updatePolicy 속성을 포함하고 instanceRedistributionType 필드를 NONE으로 설정합니다.

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/[INSTANCE_GROUP_NAME

{
    "updatePolicy": {
         "instanceRedistributionType": "NONE"
    }
}

다음을 바꿉니다.

  • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
  • REGION: 인스턴스 그룹의 리전입니다.
  • INSTANCE_GROUP_NAME: 자동 확장되지 않는 MIG의 이름입니다.

사전 인스턴스 재배포 사용

사전 인스턴스 재분산을 사용 설정하려면 사전 인스턴스 재분산 중지와 유사한 명령어를 사용하되 인스턴스 재분산 유형을 PROACTIVE로 설정합니다.

일부 관리형 인스턴스를 수동으로 삭제하거나 폐기한 경우 리전에서 VM이 불균일하게 배포되며 사전 인스턴스 재배포를 다시 사용하기 전에 그룹을 수동으로 재조정해야 합니다. 두 영역의 VM 수가 VM 1개 넘게 차이가 나면 안 됩니다.

리전 MIG에서는 VM이 여러 영역에 균일하지 않게 배포되어 있으면(두 영역의 VM 수가 VM 2개 이상 차이 나는 경우) 사전 인스턴스 재분산을 사용 설정할 수 없습니다. 이는 VM이 더 많이 있는 영역에서 의도하지 않은 VM 자동 삭제를 방지하기 위함이며 균일하게 배포되도록 트리거됩니다.

수동으로 리전 MIG 재분산

두 영역의 VM 수가 VM 2개 이상 차이 나면 MIG가 균일하게 분산되지 않습니다. 사전 인스턴스 재분산을 중지한 후 인스턴스를 삭제하거나 폐기하여 여러 영역에서 균일하지 배포되지 않으면 MIG가 균일한 배포 상태를 벗어날 수 있습니다.

인스턴스가 더 많이 있는 영역에서 VM을 삭제하거나 그룹의 크기를 조절하여 균일하게 배포될 때까지 VM 수가 더 적은 영역에 인스턴스를 추가하면 여러 영역에서 수동으로 인스턴스를 균일하게 배포할 수 있습니다.

사전 인스턴스 재분산이 중지된 MIG의 크기를 조절하는 경우에도 그룹은 여전히 기회가 있을 때마다 균일한 분산 상태를 만들며 각 크기 조절 작업을 그룹의 분산 상태를 균일하게 유지할 수 있는 기회로 활용합니다.

  • 그룹이 확장되면 항상 VM 수가 가장 적은 영역에 VM을 추가하려고 합니다.
  • 그룹이 축소되면 항상 VM 수가 가장 많은 영역에서 VM을 삭제합니다.
균일하게 재분산되도록 그룹 크기를 수동으로 조정하는 예시

리전 MIG의 영역 서비스 중단 시뮬레이션

과도하게 프로비저닝된 리전 MIG가 영역 서비스 중단을 견뎌낼 수 있는지 테스트하려면 다음 예시를 사용하여 영역 장애를 시뮬레이션하면 됩니다.

이 스크립트는 Apache를 중지하고 기본 시나리오로 시작합니다. 해당 내용이 애플리케이션에 해당하지 않는 경우 Apache 중지 및 시작 명령어를 자체 오류 및 복구 시나리오로 바꿉니다.

  1. 그룹의 모든 VM에서 이 스크립트를 지속적으로 배포하고 실행합니다. 인스턴스 템플릿에 스크립트를 추가하거나 커스텀 이미지에 스크립트를 포함하고 인스턴스 템플릿의 이미지를 사용하여 이 작업을 수행할 수 있습니다.

    #!/usr/bin/env bash
    
    # Copyright 2016 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    set -o nounset
    set -o errexit
    set -o pipefail
    
    function GetMetadata() {
      curl -s "$1" -H "Metadata-Flavor: Google"
    }
    
    PROJECT_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/project/attributes"
    INSTANCE_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/instance"
    ZONE=$(GetMetadata "$INSTANCE_METADATA_URL/zone" | cut -d '/' -f 4)
    INSTANCE_NAME=$(hostname)
    
    # We keep track of the state to make sure failure and recovery is triggered only once.
    STATE="healthy"
    while true; do
      if [[ "$ZONE" = "$(GetMetadata $PROJECT_METADATA_URL/failed_zone)" ]] && \
         [[ "$INSTANCE_NAME" = *"$(GetMetadata $PROJECT_METADATA_URL/failed_instance_names)"* ]]; then
        if [[ "$STATE" = "healthy" ]]; then
          STATE="failure"
          # Do something to simulate failure here.
          echo "STARTING A FAILURE"
          /etc/init.d/apache2 stop
        fi
      else
        if [[ "$STATE" = "failure" ]] ; then
          STATE="healthy"
          # Do something to recover here.
          echo "RECOVERING FROM FAILURE"
          /etc/init.d/apache2 start
        fi
      fi
      sleep 5
    done
    
    
  2. 다음 두 프로젝트 메타데이터 필드를 설정하여 영역 오류를 시뮬레이션합니다.

    • failed_zone: 중단을 시뮬레이션하려는 영역을 설정합니다(하나의 영역으로만 오류를 제한).
    • failed_instance_names: 이름을 기준으로 오프라인으로 설정할 VM을 선택합니다(이 문자열이 포함된 VM 이름으로만 오류 제한).

    gcloud 도구를 사용하여 이 메타데이터를 설정할 수 있습니다. 예를 들어 다음 명령어는 영역 서비스 중단을 europe-west1-b 영역으로 설정하여 이름이 base-instance-name으로 시작하는 VM에 영향을 미칩니다.

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. 서비스 중단을 시뮬레이션한 후에는 메타데이터 키를 삭제하여 오류에서 복구합니다.

    gcloud compute project-info remove-metadata --keys failed_zone,failed_instance_names

다음은 이 스크립트를 사용하여 실행할 수 있는 오류 시나리오에 대한 몇 가지 아이디어입니다.

  • 애플리케이션을 완전히 중지하여 관리형 MIG가 어떻게 응답하는지 확인합니다.
  • 부하 분산 상태 확인 시 VM이 '비정상'으로 반환되게 합니다.
  • iptables를 수정하여 VM과의 트래픽을 차단합니다.
  • VM을 종료합니다. 기본적으로 리전 MIG에서 가상 머신 인스턴스를 곧바로 다시 만들지만 메타데이터 값이 설정되어 있으면 스크립트가 실행되자마자 새로운 구현이 즉시 종료됩니다. 이로 인해 비정상 종료 루프가 발생합니다.

다음 단계