이 문서에서는 Compute Engine에서 복원력이 우수한 시스템을 설계하기 위한 권장사항을 설명합니다. 여기에서는 일반적인 조언을 제공하며 인스턴스 다운타임을 줄이고 가상 머신(VM) 인스턴스에 예기치 않은 장애가 발생했을 때를 대비할 수 있는 Compute Engine의 일부 기능을 다룹니다.
복원력이 우수한 시스템이란 서비스를 중단하거나 사용자의 서비스 사용 환경에 영향을 미치지 않으면서 장애 또는 중단을 어느 정도 견딜 수 있는 시스템입니다. Compute Engine에서는 모든 방법으로 그러한 중단을 방지하지만 예측할 수 없는 이벤트가 발생할 수 있으므로 이러한 이벤트에 대비하는 것이 좋습니다.
장애 유형
특정 시점에 시스템 또는 하드웨어 장애로 인해 하나 이상의 VM이 손실될 수 있습니다. 다음 목록에는 이러한 이벤트를 줄일 수 있는 몇 가지 장애 시나리오가 포함되어 있습니다.
예기치 않은 단일 VM 장애
하드웨어 또는 시스템 장애로 인해 예기치 않은 단일 VM 장애가 발생할 수 있습니다. VM을 다시 시작한 후 영구 디스크와 시작 스크립트를 사용하여 데이터를 저장하고 소프트웨어를 다시 사용 설정하면 이러한 이벤트를 완화할 수 있습니다.
예기치 않은 단일 VM 재부팅
특정 시점에 예기치 않은 단일 VM 장애가 발생하고 재부팅될 수 있습니다. 예기치 않은 단일 VM 장애와 달리 Compute Engine은 VM에 장애가 발생하면 해당 VM을 자동으로 재부팅합니다. 이러한 이벤트를 줄이려면 데이터를 백업하고, 영구 디스크와 시작 스크립트를 사용하여 신속하게 소프트웨어를 다시 구성합니다.
영역 또는 리전 장애
영역 및 리전 장애는 드물지만 특정 영역이나 리전의 모든 VM에 액세스하지 못하거나 장애가 발생할 수 있습니다. 이러한 장애를 줄이려면 리전과 영역에 다양성을 만들고 부하 분산을 구현합니다. 또한 데이터를 백업하거나 여러 영역에 영구 디스크를 복제해야 합니다.
복원력이 우수한 시스템 설계 팁
VM 장애를 완화하려면 애플리케이션이 장애, 네트워크 중단, 예기치 않은 재해에 대비하여 복원력이 우수하도록 설계합니다. 복원력이 우수한 시스템은 트래픽을 액세스할 수 없는 VM에서 라이브 VM으로 리디렉션하거나 재부팅 시 작업을 자동화하여 장애를 적절하게 처리합니다.
다음은 장애에 대비하여 복원력이 우수한 시스템을 설계하는 데 도움이 되는 몇 가지 일반적인 팁입니다.
라이브 마이그레이션 사용
Google에서는 최신 소프트웨어로 시스템을 패치하고, 정기적인 테스트 및 예방 유지보수를 수행하고, Google 인프라를 가능한 빠르고 효율적이며 안전하게 유지함으로써 인프라를 정기적으로 유지보수하고 있습니다. Compute Engine에서는 라이브 마이그레이션을 통해 이 인프라 유지보수가 기본적으로 VM에 투명하게 적용되도록 보장합니다.
라이브 마이그레이션은 실행 중인 VM을 유지보수 작업을 수행하려는 시스템에서 이동하는 기술입니다. 이 작업은 Compute Engine에서 자동으로 수행합니다.
라이브 마이그레이션 중 VM의 성능이 잠시 저하될 수 있습니다. 일정하게 최대 성능을 유지해야 하는 VM의 경우 유지보수 이벤트에 관여하지 않는 호스트에서 VM이 중지했다가 다시 시작하는 구성을 사용할 수 있습니다. 이 옵션은 VM 장애 또는 재부팅을 처리하도록 빌드한 전체 애플리케이션에도 적합합니다.
라이브 마이그레이션을 위해 VM을 구성하거나, 마이그레이션하는 대신 다시 시작하도록 VM을 구성하려면 인스턴스 예약 옵션 설정을 참조하세요.
VM 배포
VM 중 하나가 포함된 영역이나 리전이 중단된 경우 대체 VM을 작동하도록 둘 이상의 영역 및 리전에 VM을 만듭니다. 동일한 영역 또는 리전에서 모든 VM을 호스팅하는 경우 해당 영역 또는 리전에 연결할 수 없으면 이러한 모든 VM에 액세스할 수 없습니다.
영역별 내부 DNS 이름 사용
프로젝트 또는 조직의 기본 내부 DNS 유형을 영역 DNS로 설정합니다. 애플리케이션에서 다른 VM에 액세스할 때 영역 DNS 이름을 사용합니다. 내부 DNS 서버는 모든 영역에 분산되어 있으므로 다른 위치에 장애가 발생해도 영역 DNS 이름을 사용하여 해결할 수 있습니다.
전역 DNS는 단일 지점 장애로 인해 복원력이 우수하지 않습니다. 영역 DNS는 리전 간 서비스 중단 위험을 완화합니다. 영역 DNS는 프로젝트의 모든 리전에서 VM 이름 고유성을 필요로 하지 않으므로 VM을 더 빠르게 만들 수 있습니다.
VM이 영역 DNS 이름을 사용하는지, 전역 DNS 이름을 사용하는지 확인하려면 VM 인스턴스의 내부 DNS 이름 확인을 참조하세요.
프로젝트에 전역 DNS 이름이 사용되는 경우 영역 DNS 이름을 사용하도록 전환할 수 있습니다. 자세한 내용은 영역 DNS 이름으로 이전을 참조하세요.
VM 그룹 만들기
단일 VM이 비정상 상태가 된 경우 부하 분산기가 둘 이상의 VM으로 트래픽을 전달할 수 있도록 관리형 인스턴스 그룹을 사용하여 동종 VM 그룹을 만듭니다.
관리형 인스턴스 그룹(MIG)에서는 자동 확장 및 자동 복구와 같은 기능도 제공합니다. 자동 확장 기능을 사용하면 특정 신호를 기반으로 VM의 수를 늘리거나 줄여 급상승하는 트래픽을 처리할 수 있습니다. 자동 복구 기능은 상태 점검을 수행하고 필요한 경우 비정상적인 VM을 자동으로 다시 만듭니다.
또한 MIG를 리전에 사용할 수 있으므로 단일 리전 내의 여러 영역에 분산된 VM 그룹을 만들 수 있습니다. 자세한 내용은 리전 MIG 만들기 및 관리를 참조하세요.
부하 분산 사용
Google Cloud에서는 과도한 트래픽이 발생하는 동안 VM에 과부하가 발생하지 않도록 부하 분산 서비스를 제공합니다. Cloud Load Balancing을 사용하여 다음을 수행할 수 있습니다.
리전 MIG를 사용하여 여러 영역 내의 VM에 애플리케이션을 배포합니다. 그런 다음 리전 내의 모든 영역에 있는 모든 VM에 트래픽을 분산시킬 수 있는 전달 규칙을 구성할 수 있습니다. 각 전달 규칙은 외부 IP 주소를 사용하여 애플리케이션에 대한 하나의 진입점을 정의할 수 있습니다.
글로벌 부하 분산을 사용하여 여러 리전에 VM을 배포합니다. HTTP(S) 부하 분산을 통해 트래픽은 클라이언트와 가장 가까운 곳의 Google Cloud 시스템에 유입될 수 있습니다. 교차 리전 부하 분산에는 중복 기능이 있어 리전에 연결할 수 없는 경우 트래픽이 자동으로 다른 리전으로 전환됩니다. 이렇게 하면 동일한 외부 IP 주소를 사용하여 서비스에 계속 연결할 수 있습니다.
자동 확장을 사용하여 부하의 증가 또는 감소에 따라 MIG에서 VM을 자동으로 추가하거나 삭제합니다.
또한 Cloud Load Balancing에서는 VM 상태 점검 기능을 사용하여 VM 장애를 감지하고 처리할 수 있습니다.
시작 및 종료 스크립트 사용
Compute Engine에는 VM이 부팅되거나 종료될 때 각각 실행되는 시작 및 종료 스크립트가 제공됩니다. 시작 및 종료 스크립트는 소프트웨어 설치, 업데이트 실행, 백업 만들기, 데이터 로깅과 같은 작업을 자동화할 수 있습니다.
시작 스크립트와 종료 스크립트는 VM을 부트스트랩하거나 완전히 종료하는 효율적이고 매우 유용한 방법입니다. 커스텀 이미지를 사용하여 VM을 구성하는 대신 시작 스크립트를 사용하여 VM을 구성하는 것이 좋습니다.
시작 스크립트는 장애로 인해 VM이 재부팅되거나 다시 시작될 때마다 실행되며 소프트웨어 및 업데이트를 설치하는 데에도 사용할 수 있습니다. 또한 시작 스크립트를 사용하여 VM 내에서 서비스가 실행 중인지 확인할 수 있습니다. 시작 스크립트에서 VM을 구성하기 위해 변경사항을 코딩하는 작업이 커스텀 이미지에서 변경된 파일이나 바이트를 파악하는 작업보다 쉽습니다.
종료 스크립트는 VM이 의도적으로 또는 예기치 않게 종료될 때 실행됩니다. 종료 스크립트를 사용하면 VM을 중지하기 전에 데이터 백업, 로그 저장, 연결 닫기와 같은 마지막 작업을 수행할 수 있습니다.
자세한 내용은 시작 스크립트 실행과 종료 스크립트 실행을 참조하세요.
데이터 백업
데이터를 정기적으로 여러 위치에 백업하세요. 파일을 Cloud Storage에 업로드하거나, 영구 디스크 스냅샷을 만들거나, 다른 리전 또는 영역의 영구 디스크에 데이터를 복제할 수 있습니다.