리전 관리형 인스턴스 그룹을 사용하여 인스턴스 배포하기

이 페이지에서는 단일 리전에 분산된 인스턴스로 관리형 인스턴스 그룹을 만드는 방법을 설명합니다.

단일 영역에 속하는 영역 관리형 인스턴스 그룹과 달리 리전 관리형 인스턴스 그룹은 단일 리전 내 여러 영역으로 인스턴스를 분산시켜 애플리케이션 가용성을 높입니다. 예를 들어 us-east1 리전의 리전 관리형 인스턴스 그룹은 기본적으로 해당 리전 내의 3개 영역(us-east1-b, us-east1-c, us-east1-d)에 있는 인스턴스를 균일하게 분산시켜 유지관리합니다.

4개 이상의 영역이 있는 리전의 경우 리전 관리형 인스턴스 그룹이 인스턴스를 만들 3개의 영역을 선택합니다. 또한 인스턴스를 만들 영역을 골라서 선택하거나, 영역이 3개 이하인 리전에 인스턴스를 만들도록 선택할 수도 있습니다. 예를 들어 GPU를 사용해 워크로드 속도를 높이려면 GPU를 지원하는 영역을 선택합니다.

리전 관리형 인스턴스 그룹은 영역 관리형 인스턴스 그룹과 마찬가지로 자동 확장, 내부 부하 분산, 외부 부하 분산을 지원합니다.

시작하기 전에

제한사항

  • 각 지역별 관리형 인스턴스 그룹은 최대 2000개의 인스턴스를 포함할 수 있습니다.
  • 관리형 인스턴스 그룹을 업데이트할 때 한 요청에 인스턴스를 1000개 이하로만 지정할 수 있습니다.
  • maxRate 분산 옵션을 사용하는 부하 분산기와 함께 지역별 관리형 인스턴스 그룹을 사용할 수 없습니다.

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

Google은 영역 관리형 인스턴스 그룹보다 리전 관리형 인스턴스 그룹을 권장합니다. 리전 관리형 인스턴스 그룹에서는 앱을 단일 영역으로 제한하거나 영역마다 다수의 인스턴스 그룹을 관리하지 않고 앱 부하를 다수의 영역으로 분산시킬 수 있기 때문입니다. 이러한 복제 기능은 단일 영역에서 전체 인스턴스 그룹이 오작동하여 예상하지 못하는 시나리오와 영역 장애를 방지합니다. 영역에 장애가 발생하더라도 앱이 동일한 리전의 다른 영역에서 실행되는 인스턴스를 통해 트래픽을 계속해서 처리할 수 있습니다.

영역에서 장애가 발생하거나 영역의 인스턴스 그룹이 응답을 중지하면 리전 관리형 인스턴스 그룹이 다음과 같은 방법으로 VM을 계속 지원합니다.

  • 나머지 영역의 리전 관리형 인스턴스 그룹에 속하는 여러 인스턴스가 계속해서 트래픽을 처리합니다. 단, 새로운 인스턴스를 추가하거나 인스턴스를 다시 배포할 수 없습니다(자동 확장을 설정하지 않은 경우).

  • 장애를 일으킨 영역이 복구되면 인스턴스 그룹이 해당 영역에서 다시 트래픽을 처리하기 시작합니다.

강력하고 확장 가능한 앱 용도로 설계할 때 리전 관리형 인스턴스 그룹을 사용합니다.

사전 인스턴스 재배포

기본적으로 리전 관리형 인스턴스 그룹은 영역 수준의 장애가 발생할 경우 앱의 가용성을 최대화하기 위해 리전 내 영역에서 VM 인스턴스를 균일하게 배포하려고 합니다.

그룹에서 VM 인스턴스를 delete하거나 abandon하여 영역 전체에 고르지 못한 배포가 발생하는 경우 그룹은 인스턴스를 사전에 다시 배포하여 균일한 배포를 다시 설정합니다.

여러 영역에 균일하게 배포하기 위해 그룹은 더 많은 VM이 있는 영역의 인스턴스를 삭제하고 더 적은 VM 인스턴스가 있는 영역에 새 인스턴스를 추가합니다. 그룹은 자동으로 삭제할 인스턴스를 선택합니다.

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

예를 들어 각 영역(us-central1-a, us-central1-b, us-central1-c)마다 인스턴스가 4개인 리전 관리형 인스턴스 그룹이 있다고 가정하겠습니다. 이때 us-central1-c에서 VM 인스턴스를 3개 삭제하면 그룹이 재배포를 통해 인스턴스를 영역에서 균일하게 배포하려고 합니다. 이러한 경우에는 그룹이 인스턴스 2개(us-central1-aus-central1-b에서 1개씩)를 삭제하고, 인스턴스 2개를 us-central1-c 영역에 만듭니다. 그러면 각 영역마다 인스턴스 수가 3개가 되어 균일한 배포가 구현됩니다. 삭제할 인스턴스를 선택적으로 결정하는 방법은 없습니다.

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

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

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

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

가용성 유지를 위해 관리형 인스턴스 그룹 크기를 올바르게 프로비저닝하기

여러 가지 이벤트로 인해 인스턴스 1개 이상을 사용하지 못하게 되는 경우가 많습니다. 이러한 문제는 다수의 GCP 서비스를 사용해 완화할 수 있습니다.

  • 리전 관리형 인스턴스 그룹을 사용해 애플리케이션을 다수의 영역으로 배포합니다.
  • 자동 복구를 사용해 장애가 발생한 인스턴스를 다시 만듭니다.
  • 부하 분산을 사용해 자동으로 사용자 트래픽을 사용할 수 없는 인스턴스에서 다른 인스턴스로 보냅니다.

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

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

Google은 애플리케이션 가용성을 우선으로 오버프로비저닝에 대한 권장사항을 만듭니다. 이러한 권장사항에는 애플리케이션이 일상적으로 필요로 하는 것보다 많은 VM 인스턴스에 대한 프로비저닝 및 비용 지불이 포함됩니다. 앱의 필요성과 비용적인 제한사항을 감안하여 오버프로비저닝을 결정하세요.

권장되는 인스턴스 그룹 크기 예상

Compute Engine은 인스턴스를 충분히 프로비저닝하도록 권장합니다. 예를 들어 임의 영역의 인스턴스가 모두 사용할 수 없게 되더라도 나머지 인스턴스가 필요한 최소 인스턴스 수를 충족할 수 있도록 하는 것이 좋습니다.

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

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

권장되는 추가 VM 수는 관리형 인스턴스 그룹이 위치한 영역 수에 반비례합니다. 따라서 다수의 영역에 애플리케이션을 균일하게 배포하여 추가 VM 수를 줄일 수 있습니다.

3개 이상의 영역에서 리전 관리형 인스턴스 그룹 프로비저닝하기

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

예를 들어 영역 3개에서 관리형 인스턴스 그룹에 VM 인스턴스 20개가 필요하다면 적어도 인스턴스의 50%를 추가하는 것이 좋습니다. 이 경우 20개의 50%가 10개 이상의 인스턴스이기 때문에 인스턴스 그룹의 인스턴스는 총 30개가 됩니다. 크기가 30인 리전 관리형 인스턴스 그룹을 만드는 경우 인스턴스 그룹은 다음과 같이 인스턴스를 3개 영역에 가능한 한 균일하게 배포합니다.

영역 인스턴스 수
example-zone-1 10
example-zone-2 10
example-zone-3 10

임의 영역 1개에 장애가 일어나더라도 나머지 인스턴스 20개가 트래픽을 처리합니다.

영역 2개에서 리전 관리형 인스턴스 그룹 프로비저닝하기

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

영역 인스턴스 수
example-zone-1 20
example-zone-2 20

그룹의 인스턴스 수를 두 영역에 쉽게 분배할 수 없는 경우 Compute Engine이 가능한 한 균일하게 인스턴스를 분배하고 나머지 인스턴스를 임의로 한 영역에 넣습니다.

영역 1개에서 리전 관리형 인스턴스 그룹 프로비저닝하기

1개의 영역만으로 리전 관리형 인스턴스 그룹을 만들 수 있습니다. 이는 영역 관리형 인스턴스 그룹을 만드는 것과 비슷합니다.

영역이 1개인 리전 관리형 인스턴스 그룹은 고가용성 애플리케이션을 가장 낮게 보장하기 때문에 권장하지 않습니다. 이때 영역에서 장애가 일어나면 관리형 인스턴스 그룹 전체가 사용할 수 없게 되어 사용자에게 불편을 초래할 수 있습니다.

그룹에 적합한 영역 선택하기

리전 관리형 인스턴스 그룹의 기본 구성은 3개의 영역에 가능한 한 균일하게 인스턴스를 배포하는 것입니다. 여러 가지 이유로 앱에 맞는 특정 영역을 선택해야 하는 경우가 많습니다. 예를 들어 인스턴스에 GPU가 필요한 경우 GPU를 지원하는 영역만 선택할 수 있습니다. 특정 영역에서만 사용할 수 있는 영구 디스크가 있거나, 한 리전 내 임의의 3개 영역이 아닌 단지 몇 개의 영역에서 VM 인스턴스로 시작하려는 경우가 있습니다.

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

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

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

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

리전 관리형 인스턴스 그룹 만들기

gcloud 명령줄 도구, 콘솔 또는 API에서 리전 관리형 인스턴스 그룹을 만들 수 있습니다.

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

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

기본적으로 요청에서 개별 영역을 명시적으로 지정하지 않으면 Compute Engine은 인스턴스를 만들 영역을 3개 선택합니다. 3개보다 많거나 적은 영역에서 인스턴스를 만들어야 하거나, 사용할 영역을 선택하고 싶다면 요청할 때 영역 목록을 입력하세요. 자세한 내용은 그룹에 적합한 영역 선택하기를 참조하세요.

기본적으로 사전 인스턴스 재배포가 사용됩니다. 각 영역에서 인스턴스 수를 수동으로 관리해야 하는 경우 사전 인스턴스 재배포를 중지하거나 자동 확장을 구성할 수 없습니다. 자세한 내용은 사전 인스턴스 재배포를 참조하세요.

Console

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

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

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

gcloud

모든 관리형 인스턴스 그룹에는 인스턴스 템플릿이 필요합니다. 인스턴스 템플릿이 없는 경우 하나 만듭니다. 예를 들어, 다음 명령어는 기본 속성으로 기본 인스턴스 템플릿을 만듭니다.

gcloud compute instance-templates create example-template

그런 다음 instance-groups managed create 하위 명령어를 --region 플래그와 함께 사용합니다. 예를 들어 다음 명령어는 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 beta 도구를 사용해야 합니다. 자동 확장을 사용하는 경우 사전 인스턴스 재배포를 중지할 수 없습니다.

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

참고: 사전 인스턴스 재배포를 중지하는 경우 사전 인스턴스 재배포 중지 기능이 현재 베타 버전이므로 gcloud beta 구성요소를 사용하세요.

API

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

API에서 regionInstanceGroupManagers.insert 메서드에 대한 POST 요청을 작성합니다. 요청 본문에 원하는 그룹 이름, 그룹 크기, 그룹에 있는 인스턴스의 기본 이름, 인스턴스 템플릿에 대한 URL을 포함합니다.

POST https://www.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]은 인스턴스 그룹의 일부로 만들어진 각 인스턴스의 인스턴스 이름입니다. 예를 들어 example-instance의 기본 인스턴스 이름은 example-instance-[RANDOM_STRING]과 같은 이름의 인스턴스를 만듭니다. 여기에서 [RANDOM_STRING]은 서버에서 생성됩니다.
  • [INSTANCE_TEMPLATE_NAME]은 사용할 인스턴스 템플릿입니다.
  • [TARGET_SIZE]는 인스턴스 그룹의 인스턴스 대상 수를 나타냅니다.

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

POST https://www.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라는 인스턴스 그룹을 만듭니다.

POST https://www.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으로 설정합니다. 이 기능은 베타 버전이므로 베타 API를 사용해야 합니다. 자동 확장을 사용하는 경우 사전 인스턴스 재배포를 중지할 수 없습니다.

POST https://www.googleapis.com/compute/beta/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"
   },
}

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

리전 관리형 인스턴스 그룹의 인스턴스 목록을 확인하려면 GCP Consoleinstance-groups managed list-instances 명령줄 도구에서 gcloud 명령어를 사용하거나 regionInstanceGroupManagers.listManagedInstances 메서드에 대한 요청을 실행합니다.

Console

  1. GCP 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

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

  2. 인스턴스를 보려는 지역별 관리형 인스턴스 그룹의 이름을 클릭합니다.

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

gcloud

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

gcloud compute instance-groups managed list-instances [INSTANCE_GROUP_NAME] --region [REGION]

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

  • [INSTANCE_GROUP_NAME]은 인스턴스 그룹의 이름입니다.
  • [REGION]은 인스턴스 그룹의 지역입니다.

예를 들어 다음 명령어는 us-east1 영역의 example-rmig라는 인스턴스 그룹에 속하는 인스턴스를 나열합니다.

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

API

API에서 regionInstanceGroupManagers.listManagedInstances 메소드에 빈 GET을 요청합니다.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/instanceGroupManagers/[INSTANCE_GROUP_NAME]

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

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

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

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

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

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

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

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

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

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

사전 인스턴스 재배포가 해제된 관리형 인스턴스 그룹의 크기를 조정해도 그룹은 기회를 찾아 균형에 맞도록 수렴하여 각 크기 조절 작업을 그룹의 균형을 유지할 수 있는 기회로 활용합니다. 즉, 그룹이 확장되면 그룹은 항상 VM 수가 가장 적은 영역에 인스턴스를 추가하려고 합니다. 그룹이 축소되면 그룹은 항상 인스턴스 수가 가장 많은 영역에서 인스턴스를 삭제합니다.

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

Console, gcloud 도구 또는 API를 사용하여 사전 인스턴스 재배포가 중지된 인스턴스 그룹을 만들거나, 기존 그룹에 대한 사전 인스턴스 재배포를 끄거나 켜세요.

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

Console

  1. GCP 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

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

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

gcloud

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

gcloud beta compute instance-groups managed create [INSTANCE_GROUP_NAME] \
    --template [TEMPLATE] \
    --size [SIZE] \
    --zones [ZONES] \
    --instance-redistribution-type NONE

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

  • [INSTANCE_GROUP_NAME]은 인스턴스 그룹의 이름입니다.
  • [TEMPLATE]은 그룹에 사용할 인스턴스 템플릿의 이름입니다.
  • [SIZE]는 인스턴스 그룹의 대상 크기입니다.
  • [ZONES]는 VM 인스턴스를 배포해야 하는 단일 리전의 영역 목록입니다.

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

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

API

사전 인스턴스 재배포 없이 자동 확장되지 않는 리전 관리형 인스턴스 그룹을 만들려면 POST 요청을 생성하여 regionInstanceGroupManagers.insert 메서드를 호출합니다. 요청 본문에 updatePolicy 속성을 포함하고 instanceRedistributionType 필드를 NONE으로 설정합니다.

POST
https://www.googleapis.com/compute/beta/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"
    }
}

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

  • [PROJECT_ID]는 이 요청의 프로젝트 ID입니다.
  • [REGION]은 인스턴스 그룹의 리전입니다.
  • [INSTANCE_GROUP_NAME]은 인스턴스 그룹의 이름입니다.
  • [BASE_INSTANCE_NAME]은 각 인스턴스의 이름 프리픽스입니다. 인스턴스 이름 서픽스는 자동으로 생성됩니다.
  • [TEMPLATE]은 그룹에 사용할 인스턴스 템플릿의 이름입니다.
  • [TARGET_SIZE]는 인스턴스 그룹의 대상 크기입니다.
  • [ZONE]은 VM 인스턴스를 배포해야 하는 단일 리전의 영역 이름입니다.

사전 인스턴스 재배포 중지

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

Console

  1. GCP 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

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

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

gcloud

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

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

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

  • [INSTANCE_GROUP_NAME]은 인스턴스 그룹의 이름입니다.
  • [REGION]은 인스턴스 그룹의 리전입니다.

참고: 사전 인스턴스 재배포를 중지하는 경우 인스턴스 재배포 기능이 현재 베타 버전이므로 gcloud beta 구성요소를 사용하세요.

API

API에서 regionInstanceGroupManagers.patch 메서드에 대한 PATCH 요청을 생성합니다. 요청 본문에 updatePolicy 속성을 포함하고 instanceRedistributionType 필드를 NONE으로 설정합니다.

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

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

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

  • [PROJECT_ID]는 이 요청의 프로젝트 ID입니다.
  • [REGION]은 인스턴스 그룹의 리전입니다.
  • [INSTANCE_GROUP]은 자동 확장되지 않는 관리형 인스턴스 그룹의 이름입니다.

참고: 사전 인스턴스 재배포를 중지하는 경우 인스턴스 재배포 기능이 현재 베타 버전이므로 베타 API를 사용하세요.

사전 인스턴스 재배포 사용

사전 인스턴스 재배포를 사용하려면 사전 인스턴스 재배포를 해제하는 것과 유사한 명령어를 사용하되 인스턴스 재배포 유형을 PROACTIVE로 설정합니다.

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

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

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

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

Compute Engine은 부하 증감에 따라 인스턴스 그룹이 자동으로 인스턴스를 추가하거나 삭제할 수 있도록 관리형 인스턴스 그룹을 위한 자동 확장을 제공합니다.

리전 관리형 인스턴스 그룹에 자동 확장을 사용 설정하면 기능이 다음과 같이 작동합니다.

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

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

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

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

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

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

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

관리형 인스턴스 그룹과도 프로비저닝에 대한 권장사항과 마찬가지로 다음과 같은 이유로 자동 확장 처리 구성을 과도하게 프로비저닝해야 합니다.

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

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

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

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

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

자동 확장 사용 설정하기

Console

  1. GCP 콘솔에서 인스턴스 그룹 페이지로 이동합니다.

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

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

gcloud

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

예를 들어 다음 스니펫은 example-rmig라는 예제 인스턴스 그룹에 대해 자동 확장 처리를 설정합니다. us-east1을 관리형 인스턴스 그룹의 지역으로 바꾸고, example-autoscaler를 원하는 자동 확장 처리 이름으로 바꾸고, 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에서 지역별 자동 확장을 설정하려면 프로젝트 ID와 관리형 인스턴스 그룹의 지역을 사용하여 다음 URL에 POST를 요청합니다.

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

요청 본문에 name, target, autoscalingPolicy 필드가 있어야 하며, autoscalingPolicycpuUtilizationmaxNumReplicas를 정의해야 합니다.

{
 "name": "[AUTOSCALER_NAME]",
 "target": "regions/us-east1/instanceGroupManagers/[INSTANCE_GROUP_NAME]",
 "autoscalingPolicy": {
    "maxNumReplicas": [MAX_NUM_INSTANCES],
    "cpuUtilization": {
       "utilizationTarget": [TARGET_UTILIZATION]
     },
    "coolDownPeriodSec": [SECONDS]
  }
}

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

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

자동 확장 처리 업데이트하기

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

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

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

리전 관리형 인스턴스 그룹을 외부 부하 분산내부 부하 분산용 백엔드 서비스의 대상이나 네트워크 부하 분산용 대상 풀의 일부로 할당할 수 있습니다.

HTTP(S) 부하 분산의 경우 지역별 관리형 인스턴스 그룹에 대해 maxRatePerInstancemaxUtilization만 지원됩니다.

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

HTTP(S), SSL 프록시, TCP 프록시 또는 내부 부하 분산기를 만들려면 백엔드 서비스가 필요합니다. 백엔드 서비스에는 관리형 또는 비관리형의 인스턴스 그룹이 하나씩 포함된 개별 백엔드가 포함됩니다. 인스턴스 그룹의 인스턴스는 부하 분산기의 트래픽에 응답합니다. 그러면 백엔드 서비스는 어느 인스턴스를 사용할 수 있고, 얼마나 많은 트래픽을 처리할 수 있고, 현재 얼마나 많은 트래픽을 처리하고 있는지 파악합니다. 또한 백엔드 서비스는 상태 확인을 모니터링하고 비정상 인스턴스에 새 연결을 전송하지 않습니다.

백엔드 서비스에 인스턴스 그룹을 추가하는 방법은 백엔드 서비스에 인스턴스 그룹 추가하기를 참조하세요.

대상 풀에 지역별 관리형 인스턴스 그룹 추가하기

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

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

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

Console

  1. GCP 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://www.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"
  ]
}

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

지역별 관리형 인스턴스 그룹이 충분히 과도하게 프로비저닝되고 영역 중단 시에도 효력을 유지할 수 있는지 테스트하려면 다음 예를 사용하여 단일 영역 오류를 시뮬레이션하세요.

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

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

    #!/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: 오프라인으로 설정할 인스턴스를 이름으로 선택합니다(이 문자열을 포함하는 인스턴스 이름으로만 오류를 제한).

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

    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
    

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

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

다음 단계

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

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

Compute Engine 문서