복원력이 우수한 시스템 설계


이 문서에서는 Compute Engine에서 복원력이 우수한 시스템을 설계하기 위한 권장사항을 설명합니다. 여기에서는 일반적인 조언을 제공하며 인스턴스 다운타임을 줄이고 Compute Engine 인스턴스에 예기치 않은 장애가 발생했을 때를 대비할 수 있는 Compute Engine의 일부 기능을 다룹니다.

복원력이 우수한 시스템이란 서비스를 중단하거나 사용자의 서비스 사용 환경에 영향을 미치지 않으면서 장애 또는 중단을 어느 정도 견딜 수 있는 시스템입니다. Compute Engine에서는 모든 방법으로 그러한 중단을 방지하지만 예측할 수 없는 이벤트가 발생할 수 있으므로 이러한 이벤트에 대비하는 것이 좋습니다.

장애 유형

시스템 또는 하드웨어 장애로 인해 하나 이상의 컴퓨팅 인스턴스가 손실될 수 있습니다. 다음 목록에는 이러한 이벤트를 줄일 수 있는 몇 가지 장애 시나리오가 포함되어 있습니다.

  • 예기치 않은 단일 인스턴스 장애

    하드웨어 또는 시스템 장애로 인해 예기치 않은 단일 인스턴스 장애가 발생할 수 있습니다. VM을 다시 시작한 후 영구 디스크시작 스크립트를 사용하여 데이터를 저장하고 소프트웨어를 다시 사용 설정하면 이러한 이벤트를 완화할 수 있습니다.

  • 예기치 않은 단일 VM 재부팅

    특정 시점에 예기치 않은 단일 VM 장애가 발생하고 재부팅될 수 있습니다. 예기치 않은 단일 VM 장애와 달리 Compute Engine은 VM에 장애가 발생하면 해당 VM을 자동으로 재부팅합니다. 이러한 이벤트를 줄이려면 데이터를 백업하고, Hyperdisk 또는 영구 디스크를 사용하고, 시작 스크립트를 사용하여 신속하게 소프트웨어를 다시 구성합니다.

  • 영역 또는 리전 장애

    영역 및 지역 장애는 드물지만 특정 영역이나 리전의 모든 인스턴스에 액세스하지 못하거나 장애가 발생할 수 있습니다. 이러한 장애를 줄이려면 리전과 영역에 다양성을 만들고 부하 분산을 구현합니다. 또한 데이터를 백업하거나 여러 영역에 디스크를 복제해야 합니다.

복원력이 우수한 시스템 설계 팁

컴퓨팅 인스턴스 장애를 완화하려면 애플리케이션이 장애, 네트워크 중단, 예기치 않은 재해에 대비하여 복원력이 우수하도록 설계합니다. 복원력이 우수한 시스템은 트래픽을 액세스할 수 없는 인스턴스에서 라이브 인스턴스로 리디렉션하거나 재부팅 시 작업을 자동화하여 장애를 적절하게 처리합니다.

다음은 장애에 대비하여 복원력이 우수한 시스템을 설계하는 데 도움이 되는 몇 가지 일반적인 팁입니다.

라이브 마이그레이션 사용

Google Cloud에서는 최신 소프트웨어로 시스템을 패치하고, 정기적인 테스트 및 예방 유지보수를 수행하고, Google 인프라를 가능한 빠르고 효율적이며 안전하게 유지함으로써 인프라를 정기적으로 유지보수하고 있습니다. Compute Engine에서는 라이브 마이그레이션을 통해 이 인프라 유지보수가 기본적으로 컴퓨팅 인스턴스에 투명하게 적용되도록 보장합니다.

라이브 마이그레이션은 실행 중인 인스턴스를 유지보수 작업을 수행하려는 시스템에서 이동하는 기술입니다. Compute Engine은 지원되는 인스턴스 유형에 대해 자동으로 이 작업을 실행합니다.

라이브 마이그레이션 중 인스턴스의 성능이 잠시 저하될 수 있습니다. 일정하게 최대 성능을 유지해야 하는 인스턴스의 경우 라이브 마이그레이션을 진행하는 대신 다른 호스트에서 인스턴스가 다시 시작되도록 구성할 수 있습니다. 이 옵션을 선택하면 Compute Engine은 인스턴스를 중지하고 유지보수 이벤트에 관여하지 않는 호스트에서 인스턴스를 다시 시작합니다. 인스턴스를 종료하고 다시 시작하는 것은 인스턴스 장애 또는 재부팅을 처리하도록 빌드된 전체 애플리케이션에도 적합합니다.

라이브 마이그레이션을 위해 인스턴스를 구성하거나 마이그레이션하는 대신 다시 시작하도록 인스턴스를 구성하려면 인스턴스의 호스트 유지보수 정책 설정을 참고하세요.

인스턴스 분산

인스턴스 중 하나가 포함된 영역이나 리전이 중단된 경우 대체 컴퓨팅 인스턴스를 작동하도록 둘 이상의 영역 및 지역에 인스턴스를 만듭니다. 동일한 영역 또는 리전에서 모든 인스턴스를 만드는 경우 해당 영역 또는 리전에 연결할 수 없으면 이러한 모든 인스턴스에 액세스할 수 없습니다.

영역별 내부 DNS 이름 사용

프로젝트 또는 조직의 기본 내부 DNS 유형을 영역 DNS로 설정합니다. 애플리케이션에서 다른 컴퓨팅 인스턴스에 액세스할 때는 영역 DNS 이름을 사용하세요. 내부 DNS 서버는 모든 영역에 분산되어 있으므로 다른 위치에 장애가 발생해도 영역 DNS 이름을 사용하여 해결할 수 있습니다.

전역 DNS는 단일 장애점으로 인해 복원력이 떨어집니다. 영역 DNS는 리전 간 서비스 중단 위험을 완화합니다. 영역 DNS는 프로젝트의 모든 리전에서 인스턴스 이름 고유성이 필요하지 않으므로 인스턴스를 더 빠르게 만들 수 있습니다.

인스턴스가 영역 DNS 이름을 사용하는지, 전역 DNS 이름을 사용하는지 확인하려면 VM의 내부 DNS 이름 확인을 참고하세요.

프로젝트에서 전역 DNS 이름을 사용하는 경우 영역 DNS 이름을 사용하도록 전환할 수 있습니다. 자세한 내용은 내부 DNS 유형에 영역 DNS 사용을 참고하세요.

VM 그룹 만들기

단일 VM이 비정상 상태가 된 경우 부하 분산기가 둘 이상의 VM으로 트래픽을 전달할 수 있도록 관리형 인스턴스 그룹을 사용하여 동종 VM 그룹을 만듭니다.

관리형 인스턴스 그룹(MIG)에서는 자동 확장자동 복구와 같은 기능도 제공합니다. 자동 확장 기능을 사용하면 특정 신호를 기반으로 VM의 수를 늘리거나 줄여 급상승하는 트래픽을 처리할 수 있습니다. 자동 복구 기능은 상태 점검을 수행하고 필요한 경우 비정상적인 VM을 자동으로 다시 만듭니다.

또한 MIG를 리전에 사용할 수 있으므로 단일 리전 내의 여러 영역에 분산된 VM 그룹을 만들 수 있습니다. 자세한 내용은 리전 MIG 만들기 및 관리를 참조하세요.

부하 분산 사용

Google Cloud에서는 과도한 트래픽이 발생하는 동안 컴퓨팅 인스턴스에 과부하가 발생하지 않도록 부하 분산 서비스를 제공합니다. Cloud Load Balancing을 사용하여 다음을 수행할 수 있습니다.

  • 리전 MIG를 사용하여 여러 영역 내의 VM에 애플리케이션을 배포합니다. 그런 다음 리전 내의 모든 영역에 있는 모든 VM에 트래픽을 분산시킬 수 있는 전달 규칙을 구성할 수 있습니다. 각 전달 규칙은 외부 IP 주소를 사용하여 애플리케이션에 대한 하나의 진입점을 정의할 수 있습니다.

  • 글로벌 부하 분산을 사용하여 여러 리전에 VM을 배포합니다. HTTP(S) 부하 분산을 통해 트래픽은 클라이언트와 가장 가까운 곳의 Google Cloud 시스템에 유입될 수 있습니다. 교차 리전 부하 분산에는 중복 기능이 있어 리전에 연결할 수 없는 경우 트래픽이 자동으로 다른 리전으로 전환됩니다. 이렇게 하면 동일한 외부 IP 주소를 사용하여 서비스에 계속 연결할 수 있습니다.

  • 자동 확장을 사용하여 부하의 증가 또는 감소에 따라 MIG에서 VM을 자동으로 추가하거나 삭제합니다.

또한 Cloud Load Balancing에서는 VM 상태 점검 기능을 사용하여 VM 장애를 감지하고 처리할 수 있습니다.

시작 및 종료 스크립트 사용

Compute Engine에는 인스턴스가 부팅되거나 종료될 때 각각 실행되는 시작 및 종료 스크립트가 제공됩니다. 시작 및 종료 스크립트는 소프트웨어 설치, 업데이트 실행, 백업 만들기, 데이터 로깅과 같은 작업을 자동화할 수 있습니다.

시작 스크립트와 종료 스크립트는 인스턴스를 부트스트랩하거나 완전히 종료하는 효율적이고 매우 유용한 방법입니다. 커스텀 이미지를 사용하여 인스턴스를 구성하는 대신 시작 스크립트를 사용하여 인스턴스를 구성하는 것이 좋습니다.

시작 스크립트는 장애로 인해 인스턴스가 재부팅되거나 다시 시작될 때마다 실행되며 소프트웨어 및 업데이트를 설치하는 데에도 사용할 수 있습니다. 시작 스크립트를 사용하여 인스턴스 내에서 서비스가 실행 중인지 확인할 수도 있습니다. 시작 스크립트에서 인스턴스를 구성하기 위해 변경사항을 코딩하는 작업이 커스텀 이미지에서 변경된 파일이나 바이트를 파악하는 작업보다 쉽습니다.

종료 스크립트는 인스턴스가 의도적으로 또는 예기치 않게 종료될 때 실행됩니다. 종료 스크립트를 사용하면 인스턴스를 중지하기 전에 데이터 백업, 로그 저장, 연결 종료와 같은 마지막 작업을 수행할 수 있습니다.

자세한 내용은 시작 스크립트 실행종료 스크립트 실행을 참조하세요.

데이터 백업

데이터를 정기적으로 여러 위치에 백업하세요. 파일을 Cloud Storage에 업로드하거나, 디스크 스냅샷을 만들거나, 동기식 복제를 사용하여 다른 영역의 디스크에 데이터를 복제하거나 비동기식 복제를 사용하여 다른 리전에 데이터를 복제할 수 있습니다.