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


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

시작하기 전에

  • 이 가이드의 명령줄 예시를 사용하려면 Google Cloud CLI를 설치합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

스크립트를 사용하여 영역 중단 시뮬레이션

이 스크립트는 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 CLI를 사용하여 이 메타데이터를 설정할 수 있습니다. 예를 들어 다음 명령어는 영역 서비스 중단을 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에서 가상 머신 인스턴스를 곧바로 다시 만들지만 메타데이터 값이 설정되어 있으면 스크립트가 실행되자마자 새로운 구현이 즉시 종료됩니다. 이로 인해 비정상 종료 루프가 발생합니다.

다음 단계