리전 영구 디스크로 복원력이 우수한 워크로드를 위한 설계 고려 사항

Last reviewed 2020-09-23 UTC

이 문서에서는 스테이트풀(Stateful) 애플리케이션, 상태 확인 에이전트, 리전 영구 디스크를 배포하여 영역 장애 조치를 모니터링하고 조정하기 위해 사용되는 애플리케이션 특정 리전 제어 영역 간의 동작과 상호작용을 설명합니다.

이 문서는 리전 영구 디스크를 사용하는 고가용성 옵션의 후속 작업으로서 리전 영구 디스크를 사용하여 HA 데이터베이스 서비스 빌드 섹션에 설명된 설계 및 아키텍처를 확장하는 애플리케이션 개발자를 대상으로 합니다. 특히 설계 고려사항비용 비교, 성능, 복원력 섹션을 포함하여 해당 문서를 먼저 읽어보는 것이 좋습니다.

스테이트리스(Stateless) 애플리케이션은 하나 이상의 보조 가상 머신(VM) 인스턴스가 다른 Compute Engine 영역에서 실행되도록 함으로써 복원력을 높여줍니다. 기본 VM 인스턴스가 실패하면 애플리케이션이 보조 VM 인스턴스에서 계속 실행됩니다. 스테이트풀(Stateful) 애플리케이션은 VM 인스턴스를 재시작할 때 상태를 복구할 수 있도록 애플리케이션 상태를 영역 영구 디스크에 저장할 수 있습니다. 복원력을 높이기 위해 스테이트풀(Stateful) 애플리케이션은 애플리케이션 상태를 보조 VM 인스턴스에 저장해야 합니다.

다음 다이어그램은 두 영역 간에 복제되는 일반적인 2노드 스테이트풀(Stateful) 애플리케이션을 보여줍니다. 각 영역의 애플리케이션에는 애플리케이션 상태를 캡처하기 위한 영역 영구 디스크가 있고, 노드 간 애플리케이션 상태 변경사항을 동기화하도록 VM 인스턴스 간 네트워킹 연결이 있습니다.

부하 분산기는 애플리케이션 상태를 서로 다른 영역에 있는 기본 및 보조 VM에 복제하기 위해 사용됩니다.

리전 영구 디스크 추가

스테이트풀(Stateful) 애플리케이션의 애플리케이션 상태를 동기화하는 또 다른 방법은 리전 영구 디스크를 추가하는 것입니다. 애플리케이션이 애플리케이션 상태를 리전 영구 디스크에 기록할 때 Google Cloud는 블록 스토리지를 다른 영역과 자동으로 동기화합니다. 또한 리전 영구 디스크 스토리지는 두 영역 간에 VM 인스턴스가 한 번에 하나만 리전 영구 디스크에 연결되도록 보장하는 데 도움이 됩니다.

다음 다이어그램은 스테이트풀(Stateful) 데이터베이스 애플리케이션의 아키텍처를 보여줍니다.

리전 영구 디스크는 두 영역 간 2개의 VM 인스턴스에 연결됩니다.

앞의 다이어그램에 표시된 것처럼 아직 기본 VM 인스턴스와 보조 VM 인스턴스의 두 가지 애플리케이션 VM 인스턴스가 두 영역에 배포되어 있습니다. 애플리케이션 상태 스토리지를 위해 리전 영구 디스크를 사용하는 것 외에도 지금은 추가 항목인 애플리케이션 특정 리전 제어 영역이 있습니다. 애플리케이션 특정 리전 제어 영역은 리전 영구 디스크가 연결되는 VM 인스턴스와 현재 기본 VM 인스턴스인 VM 인스턴스를 결정합니다. 이 아키텍처는 기본 VM 인스턴스만 리전 영구 디스크에 애플리케이션 상태를 커밋할 수 있기 때문에 활성-수동 구성입니다.

VM 인스턴스 및 스테이트풀(Stateful) 애플리케이션

앞의 아키텍처 다이어그램은 핫 활성-수동 데이터베이스 애플리케이션을 보여줍니다. 다음 구성도 가능합니다.

  • 복구 시간 목표(RTO)에 따라 보조 VM 인스턴스를 시작하는 데 추가적인 지연 시간이 허용되는 경우, 활성 VM 인스턴스만 실행하여 Compute Engine 비용을 절약할 수 있습니다. 장애 조치의 경우 애플리케이션 특정 리전 제어 영역은 보조 VM 인스턴스를 시작하고 리전 영구 디스크를 연결합니다.
  • 리전 영구 디스크로 진행 상태를 체크포인트로 지정하는 일괄 또는 스트림 처리 워크로드입니다. 장애 조치에서는 애플리케이션이 마지막 체크포인트에서부터 처리를 재개합니다.

VM 인스턴스 시작 관리

한 번에 하나의 VM 인스턴스에만 리전 영구 디스크를 연결할 수 있기 때문에 체계적인 방식으로 VM 인스턴스를 시작하고 리전 영구 디스크를 연결해야 합니다. 한 가지 권장사항은 VM 인스턴스와 애플리케이션 시작을 리전 영구 디스크 연결과 분리하는 것입니다. VM 인스턴스 시작 스크립트는 리전 영구 디스크 연결을 시작하지 않아야 합니다. 대신 시작 스크립트가 상태 확인 에이전트를 시작하고 리전 영구 디스크가 연결될 때까지 기다려야 합니다.

시작 시 VM 인스턴스는 다음 순차적 단계를 수행해야 합니다.

  1. 상태 확인 에이전트를 시작합니다.
  2. 리전 영구 디스크가 연결될 때까지 기다립니다.
  3. 리전 영구 디스크가 연결되면 파일 시스템을 마운트합니다.
  4. 파일 시스템이 마운트되면 애플리케이션을 시작합니다.

이 단계에는 시스템 시작이 포함되지만 장애 조치도 있습니다. 장애 조치 중 리전 영구 디스크는 보조 VM 인스턴스에 강제로 연결됩니다. 또한 리전 영구 디스크가 기본 VM 인스턴스에서 강제로 삭제되고 파일 시스템에 대한 I/O 작업이 실패합니다. 이제 VM 인스턴스를 종료하거나 다시 시작해야 합니다.

상태 확인 에이전트 및 상태 확인 실행

이전 섹션에서 설명한 것처럼 VM 인스턴스는 리전 영구 디스크가 연결될 때까지 기다린 후 애플리케이션을 시작합니다. 애플리케이션 특정 리전 제어 영역은 리전 영구 디스크를 연결하지만 디스크가 연결될 때까지 기다리는 중인 VM 인스턴스에만 연결합니다. 디스크가 연결되면 애플리케이션 특정 제어 영역이 애플리케이션 상태를 모니터링하고 애플리케이션이 비정상 상태가 되면 장애 조치를 시작합니다.

각 VM 인스턴스에는 다음 상태 중 하나가 포함됩니다.

  • 중지됨
  • 시작 중
  • 디스크 대기 중
  • 애플리케이션 실행 중

상태 확인 에이전트는 VM 인스턴스의 현재 상태를 보고합니다. 단일 상태 확인을 통해 이러한 두 상태를 보고하는 대신 두 번의 바이너리 상태 확인을 실행할 수 있습니다. VM 인스턴스가 리전 영구 디스크를 연결할 준비가 되었거나 리전 영구 디스크가 연결되었고 쓰기 가능한 상태이면, VM 인스턴스 상태 확인이 정상 상태를 보고합니다. 애플리케이션이 실행 중이고 애플리케이션 상태를 리전 영구 디스크에 쓸 수 있으면, 애플리케이션 상태 확인이 정상 상태를 보고합니다.

2개의 바이너리 상태 확인을 사용하면 몇 가지 이점이 있습니다.

  • Compute Engine 관리형 상태 확인 서비스를 사용하여 상태 확인 에이전트를 폴링하고 임곗값 수를 통해 일시적인 오류도 확인할 수 있습니다.
  • 관리형 인스턴스 그룹(MIG)은 인스턴스 상태 확인을 모니터링하고 비정상 VM 인스턴스를 자동 복구할 수 있습니다.
  • 부하 분산기는 애플리케이션 상태 확인을 모니터링하고 활성 애플리케이션 인스턴스로 트래픽을 라우팅할 수 있습니다.

상태 확인 보고 빈도를 줄이거나 한 수준에서 다른 수준으로 전환하기 위해 필요한 반복 신호의 임곗값을 늘려서 일시적인 오류에 시스템이 반응하지 못하도록 방지할 수 있습니다. 두 방식 모두 시스템이 중단에 반응하지 못하도록 지연시키고 복구 시간을 늘려 줍니다. 이러한 매개변수를 테스트하고 측정하여 시스템 복구 시간에 맞게 상태 확인 매개변수를 조정할 수 있습니다.

애플리케이션 특정 리전 제어 영역 이해

아키텍처의 마지막 조각은 다음 두 기능을 담당하는 애플리케이션 특정 리전 제어 영역입니다.

  • 기본 및 보조 VM 인스턴스의 수명 주기 관리
  • 애플리케이션 상태 확인의 상태를 모니터링하여 장애 조치가 필요한지 여부를 결정합니다.

장애 조치가 필요하면 애플리케이션 특정 리전 제어 영역이 다음 단계에 따라 장애 조치를 조정합니다.

  1. 보조 VM 인스턴스가 실행 중이고 리전 영구 디스크가 연결될 때까지 기다리는 중인지 확인합니다.
  2. 리전 영구 디스크를 보조 VM 인스턴스에 강제로 연결합니다.
  3. 실패한 기본 VM 인스턴스를 모니터링하고 다시 시작합니다. VM 인스턴스가 다시 시작되면 제어 영역이 필요에 따라 장애 복구를 시작합니다.

애플리케이션 특정 리전 제어 영역 자체는 애플리케이션이 실행되는 두 영역 간에 가용성이 높아야 합니다. 온프레미스 데이터 센터에서 고가용성(HA)은 종종 쿼럼을 빌드하고, 기본 VM 인스턴스가 될 VM 인스턴스를 결정하고, 장애 조치를 조정하기 위해 추가 서버를 배포함으로써 얻을 수 있는 경우가 많습니다. 이 방식에서는 Heartbeat, Pacemaker, Keepalived와 같은 HA 모니터링 도구가 자주 사용됩니다.

클라우드 어디에서든 애플리케이션 특정 리전 제어 영역을 사용할 수 있지만 Google Cloud는 이러한 방식의 구현을 쉽게 해주는 다음과 같은 관리형 서비스 및 리전별로 제공되는 서비스를 제공합니다.

  • 관리 및 배포가 쉬운 App Engine, Cloud Run, Cloud Run 함수와 같은 Google Cloud 서버리스 제품
  • 애플리케이션 인스턴스의 모니터링을 오프로드하는 관리형 상태 확인
  • 서버 인스턴스의 수명 주기를 관리하는 관리형 인스턴스 그룹

다음 다이어그램은 스테이트풀(Stateful) 관리형 인스턴스 그룹 및 관리형 상태 확인과 함께 애플리케이션 특정 리전 제어 영역에 대한 Cloud Run 함수 사용을 보여줍니다.

애플리케이션 특정 리전 제어 영역은 기본 및 보조 VM을 관리합니다.

앞의 다이어그램은 애플리케이션에 대해 기본 및 보조의 두 가지 VM 인스턴스를 보여줍니다. 각 VM 인스턴스는 개별 영역에서 실행되며 스테이트풀(Stateful) 리전 MIG에 따라 관리됩니다. 리전 영구 디스크는 두 영역에서 동일하게 제공됩니다. 두 관리형 상태 확인 서비스가 실행됩니다. 하나의 관리형 상태 확인 서비스는 VM 인스턴스 상태를 모니터링하며 스테이트풀(Stateful) MIG에서 사용됩니다. 다른 상태 확인 서비스는 애플리케이션 상태를 모니터링하며 부하 분산기의 대상 풀에서 사용됩니다.

애플리케이션 특정 리전 제어 영역은 대상 풀 애플리케이션 상태 및 스테이트풀(Stateful) 리전 MIG와 상호작용하여 애플리케이션 상태를 모니터링하고 현재 정상 VM 인스턴스에 리전 영구 디스크 연결을 시작합니다.

다음 단계