리전 MIG를 사용하여 인스턴스 배포

이 페이지에서는 리전 관리형 인스턴스 그룹(MIG)을 만드는 방법을 설명합니다. 영역(단일 영역) MIG 만들기도 가능합니다. 영역 MIG와 리전 MIG 모두 자동 복구, 부하 분산, 자동 확장, 자동 업데이트, 스테이트풀(stateful) 워크로드가 지원됩니다.

리전 MIG의 관리형 인스턴스가 단일 리전의 여러 영역에 고르게 분산되기 때문에 리전 MIG는 영역 MIG에 비해 가용성이 더 높습니다. 하지만 리전 MIG는 영역 MIG와 비교할 때 다른 제한사항이 있습니다.

영역이나 리전이나 MIG에서 각 관리형 인스턴스는 일반적인 인스턴스 템플릿과 선택적인 스테이트풀(Stateful) 구성을 기반으로 합니다. 각 관리형 인스턴스는 실제 VM 인스턴스의 현재 상태와 원하는 상태가 포함된 MIG 내 데이터 항목입니다. MIG는 사전에 실제 VM을 사용 가능한 상태(RUNNING 상태)로 유지하여 애플리케이션의 고가용성을 유지합니다.

인스턴스 그룹 및 해당 기능에 대한 자세한 내용은 인스턴스 그룹 개요를 참조하세요.

시작하기 전에

제한사항

  • 각 리전 MIG는 최대 2,000개의 VM을 포함할 수 있습니다.
  • MIG를 업데이트할 때 요청 하나에 VM을 1,000개 이하로만 지정할 수 있습니다.
  • maxRate 분산 옵션을 사용하는 부하 분산기에는 리전 MIG를 사용할 수 없습니다.
  • Cloud Monitoring 측정항목 기준의 자동확장을 사용하는 경우:
    • 단일 영역 MIG와 달리 리전 MIG는 인스턴스별 측정항목에 대한 필터링을 지원하지 않습니다.
    • 단일 영역 MIG와 달리 리전 MIG는 그룹별 측정항목을 사용한 자동 확장을 지원하지 않습니다.

리전 관리형 인스턴스 그룹 선택

애플리케이션을 단일 영역으로 제한하거나 여러 영역에 걸쳐 여러 인스턴스 그룹을 관리하는 대신 여러 영역 간에 애플리케이션 로드를 분산할 수 있기 때문에 영역 MIG보다는 리전 MIG가 권장됩니다. 여러 영역을 사용하면 단일 영역의 전체 인스턴스 그룹이 오작동하는 예상치 못한 시나리오와 영역 장애로부터 보호할 수 있습니다. 오작동이나 실패가 발생하는 경우에도 애플리케이션이 동일한 리전의 다른 영역에서 실행되는 인스턴스에서 트래픽을 계속 처리할 수 있습니다.

영역 장애가 있거나 한 영역의 VM 그룹이 응답을 중지할 경우에도 리전 MIG는 다음과 같이 VM을 계속 지원합니다.

  • 남은 영역의 리전 MIG에 속하는 VM이 계속 트래픽을 처리합니다. 단, 자동확장을 설정하지 않는 한 VM이 새로 추가되지 않고 다시 배포되지 않습니다.

  • 장애 영역이 복구된 다음에는 MIG가 다시 해당 영역으로부터 트래픽 처리를 시작합니다.

강력하고 확장 가능한 앱을 디자인할 때는 리전 MIG를 사용합니다.

사전 인스턴스 재배포

기본적으로 리전 MIG는 영역 수준 장애 발생 시 애플리케이션 가용성을 극대화하기 위해 리전의 영역 간에 VM이 고르게 배포되도록 유지 관리합니다.

그룹에서 인스턴스를 삭제하거나 폐기하여 영역에 균일하지 않게 배포되는 경우 그룹은 인스턴스를 사전에 재배포하여 균일한 배포를 다시 구성합니다.

영역 간 고른 배포를 다시 설정하기 위해 그룹은 VM 수가 많은 영역에서 VM을 삭제하고 VM 수가 적은 영역에 VM을 추가합니다. 그룹은 삭제할 VM을 자동으로 선택합니다.

사전 재배포는 여러 영역에 균일한 배포를 다시 구성합니다.
사전 재배포의 예시

예를 들어 리전 MIG에 a, b, c의 3개 영역에 4개 인스턴스가 분산되어 있다고 가정해보세요. 이때 c에서 3개의 관리형 인스턴스를 삭제한 경우, 그룹은 인스턴스가 영역 간에 균일하게 배포되도록 재분산을 시도합니다. 이러한 경우에는 그룹이 2개의 인스턴스(ab에서 1개씩)를 삭제하고 인스턴스 2개를 c 영역에 만듭니다. 그러면 영역마다 인스턴스 수가 3개가 되어 균일한 배포가 구현됩니다. 삭제할 인스턴스를 선택적으로 결정하는 방법은 없습니다. 새 인스턴스가 시작되는 동안 그룹의 용량은 일시적으로 손실됩니다.

VM의 자동 재배포를 방지하기 위해 리전 MIG를 만들거나 업데이트할사전 인스턴스 재배포를 해제할 수 있습니다.

다음과 같은 경우에 유용합니다.

  • 실행 중인 다른 VM 인스턴스에 영향을 주지 않고 그룹에서 VM을 삭제하거나 폐기합니다. 예를 들어 다른 작업자에 영향을 주지 않고 작업 완료 후 일괄 작업자 VM을 삭제할 수 있습니다.
  • 사전 재배포를 통해 스테이트풀(Stateful) 앱이 있는 VM을 원치 않는 자동 삭제로부터 보호합니다.
사전 재배포를 사용 중지할 경우 영역에 장애가 발생했을 때 용량에 영향을 미칠 수 있습니다.
사전 재배포를 사용 중지했을 때 균일하지 않은 배포

사전 인스턴스 재배포를 해제하면 MIG가 균일한 배포를 위해 VM을 사전에 추가하거나 삭제하지 않지만 관리형 인스턴스 그룹은 크기 조절 작업 중에 기회를 찾아 균형에 맞도록 수렴하여 각 크기 조절 작업을 그룹의 균형을 유지할 수 있는 기회로 활용합니다. 예를 들어 축소 시 그룹은 자동으로 더 큰 영역에서 VM을 삭제하는 기회로 재확장을 사용합니다. 확장 시에는 그룹이 더 작은 영역에 VM을 추가할 수 있는 기회로 활용합니다.

가용성 보장을 위해 올바른 MIG 크기 프로비저닝

다양한 이벤트로 인해 하나 이상의 VM을 사용 할 수 없는 상태가 발생하며, 여러 Google Cloud 서비스를 사용하면 이 문제를 완화하는 데 도움이 될 수 있습니다.

  • 리전 MIG를 사용하여 여러 영역 간에 애플리케이션을 배포합니다.
  • 자동 복구를 사용하여 장애가 발생한 VM을 다시 만듭니다.
  • 부하 분산을 사용하여 자동으로 사용자 트래픽을 사용할 수 없는 VM에서 다른 VM으로 보냅니다.

하지만 위의 서비스를 사용하더라도 너무 많은 VM을 동시에 사용하지 못하는 경우에는 사용자에게 계속해서 문제가 발생할 수 있습니다.

한 영역에서 장애가 발생하거나 전체 VM 그룹이 응답하지 않는 극단적인 경우에 대비하여 MIG를 오버프로비저닝하는 것이 좋습니다. 애플리케이션 요구사항에 따라 그룹을 오버프로비저닝하면 영역 또는 VM 그룹이 응답하지 않더라도 시스템이 전체 장애를 일으키지 않습니다.

Google의 오버프로비저닝 권장사항은 애플리케이션 가용성에 우선순위를 두고 있습니다. Google의 오버프로비저닝 권장사항은 애플리케이션 가용성에 우선순위를 두고 있습니다. 애플리케이션 요구사항과 비용 제한을 감안하여 오버프로비저닝을 결정하세요.

권장 그룹 크기 예상

한 영역의 모든 VM을 사용할 수 없게 되더라도 나머지 VM이 필요한 최소 VM 수를 충족시킬 수 있도록 Compute Engine에서는 VM을 충분히 프로비저닝하는 것이 좋습니다.

다음 표를 사용하여 그룹의 최소 권장 크기를 확인하세요.

영역 수 추가 VM 권장되는 총 VM
2 +100% 200%
3 +50% 150%
4 +33% 133%

권장되는 추가 VM 수는 MIG가 있는 영역 수와 반비례합니다. 따라서 다수의 영역에 애플리케이션을 균일하게 배포하여 추가 VM 수를 줄일 수 있습니다.

3개 이상의 영역에서 리전 MIG 프로비저닝

영역이 3개 이상인 리전에서 리전 MIG를 만들 때는 그룹을 최소 50% 이상 오버프로비저닝하는 것이 좋습니다. 기본적으로 리전 MIG는 3개 영역에 VM을 만듭니다. 3개의 영역에 VM이 있으면 서비스 용량의 2/3 이상을 보존할 수 있으며 단일 영역에 장애가 발생하면 리전의 다른 두 영역이 중단 없이 트래픽을 계속 처리할 수 있습니다. 150%까지 오버프로비저닝하면 용량의 1/3이 손실되어도 100%의 트래픽이 나머지 영역에서 지원됩니다.

예를 들어 3개 영역에서 MIG에 20개 VM이 필요한 경우 최소한 VM을 50% 이상 추가하는 것이 좋습니다. 이 경우 20개의 50%가 10개 이상의 VM이기 때문에 그룹의 VM은 총 30개가 됩니다. 30개 크기의 리전 MIG를 만드는 경우 이 그룹은 다음과 같이 3개 영역에 VM을 배포합니다.

영역 VM 수
example-zone-1 10
example-zone-2 10
example-zone-3 10

단일 영역에서 장애가 일어나더라도 VM 20개가 트래픽을 처리합니다.

영역 2개에서 리전 MIG 프로비저닝

3개가 아닌 2개 영역에 VM을 프로비저닝할 경우에는 VM 수를 2배로 늘리는 것이 좋습니다. 예를 들어 서비스를 제공할 목적으로 VM 20개를 영역 2개에 배포해야 한다면 VM이 40개인 리전 MIG를 추천합니다. 각 영역마다 VM을 20개씩 배포할 수 있기 때문입니다. 그러면 단일 영역에서 장애가 일어나더라도 VM 20개가 트래픽을 처리합니다.

영역 VM 수
example-zone-1 20
example-zone-2 20

그룹의 VM 수를 두 영역에 쉽게 분배할 수 없는 경우 Compute Engine이 VM 그룹을 균일하게 분배하고 나머지 VM을 무작위로 한 영역에 넣습니다.

1개 영역에서 리전 MIG 프로비저닝

영역이 1개만 있는 리전 MIG를 만들 수 있습니다. 이는 영역 MIG를 만드는 것과 비슷합니다.

영역이 1개인 리전 MIG는 가용성이 높은 애플리케이션을 가장 낮게 보장하기 때문에 권장하지 않습니다. 영역에서 장애가 발생하면 MIG 전체를 사용할 수 없게 되어 사용자에게 불편을 초래할 수 있습니다.

그룹에 적합한 영역 선택

리전 MIG의 기본 구성은 3개의 영역에 VM을 균일하게 분산하는 것입니다. 여러 가지 이유로 애플리케이션에 맞는 특정 영역을 선택해야 할 수 있습니다. 예를 들어 VM에 GPU가 필요한 경우 GPU를 지원하는 영역만 선택할 수 있습니다. 특정 영역에서만 사용할 수 있는 영구 디스크가 있거나, 한 리전 내 임의의 3개 영역이 아닌 단지 몇 개의 영역에서 VM으로 시작하려는 경우가 있습니다.

영역 수를 선택하거나, 그룹을 실행할 특정 영역을 선택하려면 그룹을 처음 만들 때 선택해야 합니다. 그룹을 만들면서 특정 영역을 선택한 후에는 영역을 변경하거나 업데이트할 수 없습니다.

  • 한 리전 내에서 4개 이상의 영역을 선택하려면 개별 영역을 명시적으로 지정해야 합니다. 예를 들어 한 리전 내에서 4개 영역을 모두 선택하려면 요청에 4개의 영역을 모두 명시적으로 지정해야 합니다. 그렇지 않으면 Compute Engine에서 기본적으로 3개의 영역을 선택합니다.

  • 한 리전에서 2개 이하의 영역을 선택하려면 개별 영역을 명시적으로 지정해야 합니다. 리전에 2개의 영역만 있는 경우에도 요청에 영역을 명시적으로 지정해야 합니다.

특정 영역을 선택하는지 아니면 리전을 선택하고 Compute Engine을 사용해 리전 내의 모든 영역에 VM을 만드는지와 관계없이 새 VM이 모든 영역에 균일하게 배포됩니다. 지정된 수의 영역에서 앱을 지원하기에 충분한 VM을 프로비저닝하는 것이 좋습니다.

리전 MIG 만들기

gcloud 명령줄 도구, Console, API에서 리전 MIG를 만듭니다.

그룹의 VM을 지원하기에 충분한 용량이 각 영역에 없으면 Compute Engine은 최대한 많은 VM을 만들고 추가 할당량을 사용할 수 있게 되면 나머지 VM을 만들려고 계속 시도합니다.

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

기본적으로 요청에서 개별 영역을 명시적으로 지정하지 않으면 Compute Engine은 VM을 만들 영역을 3개 선택합니다. 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 리전에 있는 3개의 영역에서 리전 관리형 인스턴스 그룹을 만듭니다.

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

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

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

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

gcloud compute instance-groups managed create example-rmig \
    --template example-template --base-instance-name example-instances \
    --size 30 --instance-redistribution-type NONE

API

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

API에서 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",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/zone"},
       {"zone": "zones/zone"}
      ]
   }
}

다음을 바꿉니다.

  • 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 수입니다.

특정 영역을 선택하려는 경우 또는 영역이 3개보다 적거나 많은 리전에 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-size",
  "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

{

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

사전 인스턴스 재배포를 사용하지 않으려면 요청에 updatePolicy 속성을 포함하고 instanceRedistributionTypeNONE으로 설정합니다.

자동 확장을 사용하는 경우 사전 인스턴스 재배포를 중지할 수 없습니다.

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",
  "updatePolicy": {
     "instanceRedistributionType": "NONE"
   },
}

리전 관리형 인스턴스 그룹의 인스턴스 나열

리전 MIG에 대해 관리형 인스턴스 목록을 가져오려면 Cloud Console, gcloud 명령줄 도구의 instance-groups managed list-instances 명령어를 사용하거나 regionInstanceGroupManagers.listManagedInstances 메서드로 요청합니다.

Console

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

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

  2. 인스턴스를 보려는 리전 MIG의 이름을 클릭합니다.

인스턴스 그룹 세부정보 페이지가 인스턴스 그룹의 인스턴스 목록과 함께 로드됩니다.

gcloud

instance-groups managed list-instances 명령어를 실행합니다.

gcloud compute instance-groups managed list-instances instance-group-name --region region

다음을 바꿉니다.

  • instance-group-name: MIG 이름입니다.
  • region: MIG의 리전입니다.

예를 들어 다음 명령어는 us-east1 리전에서 example-rmig라는 MIG에 속하는 인스턴스를 나열합니다.

gcloud compute instance-groups managed list-instances example-rmig --region us-east1

API

API에서 regionInstanceGroupManagers.listManagedInstances 메서드에 대해 빈 GET 요청을 작성합니다.

GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group-name

예를 들면 다음과 같습니다.

GET https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers/example-rmig

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

Updater 기능을 사용하여 리전 MIG를 업데이트할 수 있습니다. 업데이터를 사용하면 그룹 내 VM의 하위 집합이나 모든 VM을 새 인스턴스 템플릿으로 업데이트할 수 있습니다. 업데이터를 사용하여 카나리아 업데이트를 수행하고 업데이트 속도를 제어할 수도 있습니다.

이와 관련하여 gcloud에서 set-instance-template 명령어를 사용하거나 API에서 setInstanceTemplate 메서드를 사용하여 기존 VM을 업데이트하지 않고 MIG의 인스턴스 템플릿을 변경할 수도 있습니다. 인스턴스 템플릿을 변경할 경우 기존 VM이 새 인스턴스 템플릿으로 자동 업데이트되지는 않습니다. 개별 인스턴스를 다시 만들거나 업데이터를 실행하여 변경사항을 적용해야 합니다. 그러나 그룹의 새 VM은 새 인스턴스 템플릿을 사용합니다.

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

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

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

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

그룹에서 관리형 인스턴스를 삭제하거나 폐기하여 여러 영역에서 VM 불균형이 발생하는 경우 사전 재배포를 다시 사용하기 전에 그룹을 수동으로 재조정해야 합니다. 그룹을 수동으로 재조정하려면 그룹 크기를 조정하거나 VM이 더 많은 영역에서 관리형 인스턴스를 삭제하세요.

사전 인스턴스 재배포가 해제된 MIG의 크기를 조정해도 그룹은 각 크기 조정 작업을 그룹 균형을 위한 기회로 활용해서 기회적으로 균형에 맞게 수렴합니다. 즉, 그룹이 확장될 때 그룹은 항상 VM 수가 가장 적은 영역에 VM을 추가하려고 합니다. 그룹이 축소될 때는 그룹이 항상 VM 수가 가장 많은 영역에서 VM을 삭제합니다.

균일한 재배포를 위해 그룹 크기를 수동으로 조정하는 예시

Console, gcloud 도구, API를 사용하여 사전 인스턴스 재배포가 사용 중지된 리전 MIG를 만들거나, 기존 그룹에 대해 사전 인스턴스 재배포를 끄거나 켭니다.

사전 재배포가 중지된 그룹 만들기

Console

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

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

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

gcloud

사전 인스턴스 재배포 없이 리전 MIG를 새로 만들려면 --instance-redistribution-type 플래그가 NONE으로 설정된 gcloud compute instance-groups managed create 명령어를 사용합니다.

gcloud compute instance-groups managed create instance-group-name \
    --template template \
    --size target-size \
    --zones zones \
    --instance-redistribution-type NONE

다음을 바꿉니다.

  • instance-group-name: MIG의 이름입니다.
  • template: 그룹에 사용할 인스턴스 템플릿의 이름입니다.
  • 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를 만들려면 POST 요청을 생성하여 regionInstanceGroupManagers.insert 메서드를 호출합니다. 요청 본문에 updatePolicy 속성을 포함하고 instanceRedistributionType 필드를 NONE으로 설정합니다.

POST https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group-name
{
    "name": "instance-group-name",
    "baseInstanceName": "base-instance-name",
    "instanceTemplate": "global/instanceTemplates/template",
    "targetSize": "target-size",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/zone"},
            {"zone": "zones/zone"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

Replace the following:

  • project-id. The project ID for this request.
  • region. The region for the instance group.
  • instance-group-name. The name for the MIG.
  • base-instance-name. The name prefix for each instance. The instance name suffix is auto generated.
  • template. The name of the instance template to use for the group.
  • target-size. The target size of the instance group.
  • zone. The name of a zone in the single region where you need to deploy VMs.

사전 인스턴스 재배포 중지

사전 인스턴스 재배포를 해제하려면 먼저 자동 확장을 해제해야 합니다.

Console

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

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

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

gcloud

자동 확장되지 않는 리전 MIG의 사전 인스턴스 재배포를 사용 중지하려면 --instance-redistribution-type 플래그가 NONE으로 설정된 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

API에서 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개를 초과해서는 안 됩니다.

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

리전 MIG는 VM이 여러 영역에 균일하지 않게 배포되는 경우(두 영역 간 VM 수의 차이가 VM 2개 이상인 경우) 사전 인스턴스 재배포를 사용할 수 없습니다. 더 많은 VM이 있는 영역에서 의도하지 않은 VM의 자동 삭제를 방지하기 위한 목적이며, 균일한 배포를 위해 트리거됩니다.

리전 관리형 인스턴스 그룹 자동 확장

Compute Engine은 부하의 증가 또는 감소에 따라 그룹이 자동으로 VM을 추가(확장)하거나 VM을 삭제(축소)할 수 있도록 MIG에 자동 확장 기능을 제공합니다.

리전 MIG에 자동 확장을 사용 설정하면 기능이 다음과 같이 작동합니다.

  • 자동 확장 정책이 개별 영역이 아니라 그룹에 전체적으로 적용됩니다. 예를 들어 자동 확장 처리를 사용하여 CPU 사용률을 66%로 지정하면 자동 확장 처리에서 그룹의 모든 VM을 추적하여 모든 영역의 모든 VM에서 평균 66%의 사용률을 유지합니다.

  • 자동 확장은 사용 가능한 영역에 VM을 균일하게 분산하려고 시도합니다. 일반적으로 자동 확장 처리는 작은 영역을 확장하고 더 큰 영역에서 부하 분산기 등을 통해 부하가 리디렉션될 것으로 예상하여 영역의 크기를 균형 있게 유지합니다. 한 영역을 선호하는 커스텀 부하 분산기를 구성하지 않는 것이 좋습니다. 예기치 않은 동작이 발생할 수 있기 때문입니다.

  • 워크플로가 3개의 영역에서 VM을 균등하게 사용하고 영역 또는 영역 내의 VM 그룹에 장애가 발생하면 용량의 1/3이 손실될 수 있지만 용량의 2/3는 다른 영역에 유지됩니다. 영역을 사용할 수 없는 동안 나머지 서버에 과부하를 일으키지 않으려면 자동 확장된 리전 MIG를 오버프로비저닝하는 것이 좋습니다.

  • 임의 영역에서 리소스(선점형 VM 등)를 일시적으로 사용할 수 없게 되면 그룹이 해당 영역에서 이러한 VM을 계속해서 만들려고 합니다. 이후 리소스를 다시 사용할 수 있게 되면 그룹이 실행할 VM 수를 원하는 만큼 확보합니다.

  • 부하 분산이 사용 설정되어 있을 때 임의 영역에서 리소스를 사용할 수 없게 되어 해당 영역의 나머지 리소스 사용량이 증가하면 사용량이 낮은 영역에 VM을 새로 만들 수 있습니다. 단, 이러한 경우 배포가 일시적으로 균일하지 않을 수 있습니다.

자동 확장 처리는 그룹에 지정된 최댓값의 1/n까지만 VM을 영역에 추가합니다. 여기에서 n은 프로비저닝된 영역 수를 말합니다. 예를 들어 영역 수로 기본 3개를 사용하는 동시에 자동 확장에서 maxNumReplicas가 15로 설정되어 있다면 자동 확장 처리는 영역마다 최대 1/3 * 15 = 5개의 VM을 그룹에 추가할 수 있습니다. 한 영역에서 장애가 일어나면 자동 확장 처리가 나머지 두 영역의 maxNumReplicas를 합친 값의 2/3까지만 확장합니다.

자동 확장 처리 구성 프로비저닝

MIG 오버프로비저닝에 대한 권장사항과 마찬가지로 다음과 같은 이유로 자동 확장 처리 구성을 오버프로비저닝해야 합니다.

  • 자동 확장 사용률 목표는 원하는 사용률 목표의 2/3입니다.
  • 사용률 목표를 낮추기 위해 자동 확장 처리가 VM을 더 추가하므로 오버프로비저닝을 고려하지 않고 설정한 수보다 50% 더 많게 maxNumReplicas를 늘려야 합니다.

예를 들어 20개의 VM이 최대 부하를 처리할 수 있고 목표 사용률이 80%라고 가정하면 다음과 같이 자동 확장 처리를 설정합니다.

  • 2/3 * 0.8 = 0.53 또는 53%(80% 대신 목표 사용률)
  • 3/2 * 20 = 30(20 대신 최대 VM 수)

목표 사용률을 해당 용량보다 훨씬 아래로 낮췄기 때문에 이렇게 설정하면 단일 영역에 장애가 발생할 경우 VM의 나머지 2/3가 오프라인 영역에서 증가된 부하를 처리할 수 있어야 하므로 MIG의 용량이 부족하면 안 됩니다. 자동 확장 처리는 또한 2/3 사용률 목표를 유지하기 위해 지정한 최대 VM 수까지 새 VM을 추가합니다.

그러나 늘어난 부하를 처리하기 위해 MIG를 오버프로비저닝하는 데 전적으로 의존하지 않아야 합니다. 정기적으로 애플리케이션 부하 테스트를 수행하여 VM의 1/3을 삭제하는 영역 중단으로 인해 늘어난 사용률을 처리할 수 있는지 확인하는 것이 좋습니다.

자동 확장 사용 설정

Console

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

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

  2. 인스턴스 그룹이 없으면 하나 만듭니다. 그렇지 않으면 목록에서 기존 리전 MIG 이름을 클릭합니다.
  3. 인스턴스 그룹 세부정보 페이지에서 그룹 수정 버튼을 클릭합니다.
  4. 자동 확장 아래에서 켜기를 선택합니다.
  5. 자동 확장 구성의 속성을 채웁니다.
  6. 변경사항을 저장합니다.

gcloud

gcloud 명령줄 도구로 set-autoscaling 하위 명령어를 --region 플래그와 함께 사용하여 리전 자동 확장을 사용 설정합니다. 자동 확장 처리 만들기에 대한 자세한 내용은 자동 확장 설명서를 참조하세요.

예를 들어 다음 스니펫은 예시 인스턴스 그룹에 대해 자동 확장 처리를 설정합니다. us-east1을 관리형 인스턴스 이름의 리전으로 바꾸고 example-rmig를 리전 관리형 인스턴스 그룹의 이름으로 바꿉니다.

gcloud compute instance-groups managed set-autoscaling example-rmig \
    --target-cpu-utilization 0.8 --max-num-replicas 5 --region us-east1

API

API에서 리전 자동 확장을 설정하려면 [regionAutoscalers.insert 메서드[(/compute/docs/reference/rest/v1/regionAutoscalers/insert)를 호출합니다

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/regionAutoscalers/

요청 본문에는 name, target, autoscalingPolicy 필드가 포함되어야 합니다. autoscalingPolicycpuUtilizationmaxNumReplicas를 정의해야 합니다.

쉽게 식별할 수 있도록 MIG 리소스의 이름으로 자동 확장 처리 리소스의 이름을 지정하는 것이 좋습니다.

{
 "name": "<var>autoscaler-name</var>",
 "target": "regions/us-east1/instanceGroupManagers/<var>instance-group-name</var>",
 "autoscalingPolicy": {
    "maxNumReplicas": <var>max-number-of-instances</var>,
    "cpuUtilization": {
       "utilizationTarget": <var>target-utilization</var>
     },
    "coolDownPeriodSec": <var>seconds</var>
  }
}

예를 들면 다음과 같습니다.

{
 "name": "example-rmig",
 "target": "regions/us-east1/instanceGroupManagers/example-rmig",
 "autoscalingPolicy": {
    "maxNumReplicas": 10,
    "cpuUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 30
  }
}

자동 확장 처리 업데이트

영역 자동 확장 처리처럼 리전 자동 확장 처리를 업데이트할 수 있습니다. 자동 확장 처리 업데이트에 대한 설명서를 읽으세요.

부하 분산기에 리전 관리형 인스턴스 그룹 추가

Google Cloud Platform 부하 분산은 인스턴스 그룹을 사용하여 트래픽을 처리합니다. 사용 중인 부하 분산기의 유형에 따라 인스턴스 그룹을 대상 풀이나 백엔드 서비스에 추가할 수 있습니다. 관리형 인스턴스 그룹 및 부하 분산에 대한 자세한 내용은 인스턴스 그룹 개요를 참조하세요.

리전 MIG를 외부 부하 분산내부 부하 분산용 백엔드 서비스의 대상이나 네트워크 부하 분산용 대상 풀의 일부로 할당할 수 있습니다.

HTTP(S) 부하 분산의 경우 maxRatePerInstancemaxUtilization만 리전 MIG에 지원됩니다.

백엔드 서비스에 리전 관리형 인스턴스 그룹 추가

다음 유형의 부하 분산 서비스를 만들려면 백엔드 서비스가 필요합니다.

  • 외부 HTTP(S) 부하 분산
  • 내부 HTTP(S) 부하 분산
  • SSL 프록시 부하 분산
  • TCP 프록시 부하 분산
  • 내부 TCP/UDP 부하 분산

백엔드 서비스에는 여러 백엔드가 포함될 수 있습니다. 인스턴스 그룹은 백엔드의 유형입니다. 인스턴스 그룹의 인스턴스는 부하 분산기의 트래픽에 응답합니다. 그러면 백엔드 서비스에는 사용할 수 있는 인스턴스, 처리할 수 있는 트래픽의 양, 현재 처리 중인 트래픽의 양이 인식됩니다. 또한 백엔드 서비스는 상태 확인을 모니터링하고 비정상 인스턴스에 새 연결을 전송하지 않습니다.

관리형 인스턴스 그룹을 백엔드 서비스에 추가하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 관리형 인스턴스 그룹을 추가할 백엔드 서비스의 이름을 클릭합니다.
  3. 수정을 클릭합니다.
  4. +백엔드 추가를 클릭합니다.
  5. 추가할 인스턴스 그룹을 선택합니다.
  6. 변경할 선택적 설정을 수정합니다.
  7. 변경사항을 저장합니다.

gcloud

gcloud 명령줄 도구에서 add-backend 명령어를 사용합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        [--instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] \
        --balancing-mode=BALANCING_MODE

관리형 인스턴스 그룹의 분산 모드에 따라 추가 매개변수가 필요합니다. 자세한 내용은 SDK의 add-backend 명령어를 참조하세요.

API

REST API를 사용하여 백엔드 서비스를 추가하려면 backendServices를 참조하세요.

대상 풀에 리전 관리형 인스턴스 그룹 추가

대상 풀은 가상 머신 인스턴스를 하나 이상 포함하는 객체입니다. 대상 풀은 네트워크 부하 분산기가 사용자 요청을 연결된 대상 풀에 전달하는 네트워크 부하 분산에 사용됩니다. 해당 대상 풀에 속하는 인스턴스가 이러한 요청을 처리하고 응답을 반환합니다. 인스턴스 그룹에서 인스턴스가 추가되거나 삭제될 때 대상 풀이 변경사항으로 자동 업데이트되도록 관리형 인스턴스 그룹을 대상 풀에 추가할 수 있습니다.

대상 풀이 있어야 대상 풀에 관리형 인스턴스 그룹을 추가할 수 있습니다. 자세한 내용은 대상 풀 추가에 대한 설명서를 참조하세요.

대상 풀에 기존 관리형 인스턴스 그룹을 추가하려면 다음 안내를 따르세요. 그러면 관리형 인스턴스 그룹에 속하는 모든 VM 인스턴스가 대상 풀에 추가됩니다.

Console

  1. Cloud Console에서 대상 풀 페이지로 이동합니다.

    대상 풀 페이지로 이동

  2. 인스턴스 그룹을 추가할 대상 풀을 클릭합니다.
  3. 수정 버튼을 클릭합니다.
  4. VM 인스턴스 섹션까지 아래로 스크롤하고 인스턴스 그룹 선택을 클릭합니다.
  5. 드롭다운 메뉴에서 인스턴스 그룹을 선택합니다.
  6. 변경사항을 저장합니다.

gcloud

gcloud 명령줄 도구에서 set-target-pools 명령어를 사용합니다.

gcloud beta compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
    --target-pools [TARGET_POOL,..] [--region REGION]

각 항목의 의미는 다음과 같습니다.

  • [INSTANCE_GROUP]은 인스턴스 그룹의 이름입니다.
  • [TARGET_POOL]은 이 인스턴스 그룹을 추가할 하나 이상의 대상 풀 이름입니다.
  • [REGION]은 인스턴스 그룹의 리전입니다.

API

API에서 다음 URI에 POST를 요청합니다.

POST https://compute.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/regionInstanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

각 항목의 의미는 다음과 같습니다.

  • [PROJECT_ID]는 이 요청의 프로젝트 ID입니다.
  • [REGION]은 인스턴스 그룹의 리전입니다.
  • [INSTANCE_GROUP]은 인스턴스 그룹의 이름입니다.

이 그룹을 추가할 대상 풀에 대한 URI 목록이 요청 본문에 포함되어야 합니다. 예를 들면 다음과 같습니다.

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

리전 관리형 인스턴스 그룹에 대한 영역 중단 시뮬레이션

리전 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 영역으로 설정하여 이름이 instance-base-name으로 시작하는 VM에 영향을 줍니다.

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

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

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

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

다음 단계