Kubernetes에서 고가용성 관리

문서 버전을 선택합니다.

이 페이지에서는 Kubernetes 기반 AlloyDB Omni 데이터베이스 클러스터에서 고가용성(HA)을 사용 설정하고 테스트하는 방법을 보여줍니다. 여기에 설명된 태스크를 수행하려면 Kubernetes 매니페스트 파일 적용 및 kubectl 명령줄 도구 사용에 대한 기본 지식이 필요합니다.

개요

AlloyDB Omni Kubernetes 연산자가 기본 데이터베이스 인스턴스의 대기 복제본을 만들도록 지시하여 데이터베이스 클러스터에서 HA를 사용 설정할 수 있습니다. AlloyDB Omni 연산자는 이 복제본의 데이터를 지속적으로 업데이트하도록 데이터베이스 클러스터를 구성해 기본 인스턴스의 모든 데이터 변경사항과 일치시킵니다.

HA 사용 설정

데이터베이스 클러스터에서 HA를 사용 설정하기 전에 Kubernetes 클러스터에 다음이 있는지 확인합니다.

  • 데이터의 전체 복사본 2개를 저장할 수 있는 스토리지
  • 동시에 실행되는 두 데이터베이스 인스턴스의 컴퓨팅 리소스

HA를 사용 설정하려면 다음 단계를 수행합니다.

  1. spec 섹션 아래에서 availability 섹션이 포함되도록 데이터베이스 클러스터 매니페스트를 수정합니다. 이 섹션에서는 numberOfStandbys 파라미터를 설정하여 추가할 대기 수를 정의합니다.

    spec:
      availability:
        numberOfStandbys: NUMBER_OF_STANDBYS
    

    NUMBER_OF_STANDBYS를 추가하려는 대기 수로 바꿉니다. 최댓값은 5입니다. HA를 설정했지만 필요한 대기 수를 잘 모르겠으면 값을 1 또는 2로 설정하여 시작합니다.

  2. 매니페스트를 다시 적용합니다.

HA 사용 중지

HA를 사용 중지하려면 다음 단계를 수행합니다.

  1. 클러스터 매니페스트에서 numberOfStandbys0으로 설정합니다.

    spec:
      availability:
        numberOfStandbys: 0
    
  2. 매니페스트를 다시 적용합니다.

데이터베이스 클러스터에서 HA 확인

데이터베이스 클러스터의 현재 HA 상태를 보려면 클러스터 상태의 HAReady 조건을 확인합니다. 이 값의 statusTrue로 설정된 경우 HA가 데이터베이스 클러스터에서 설정되고 작동하는 것입니다.

명령줄에서 이 값을 확인하려면 다음 명령어를 실행합니다.

kubectl get dbcluster.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -o jsonpath={.status.conditions[?(@.type == \'HAReady\')]} -n NAMESPACE

다음을 바꿉니다.

  • DB_CLUSTER_NAME: 데이터베이스 클러스터의 이름입니다.

  • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.

대기 인스턴스로 장애 조치

기본 인스턴스를 90초 넘게 사용할 수 없게 되면 AlloyDB Omni 연산자가 기본 데이터베이스 인스턴스에서 대기 인스턴스로 자동 장애 조치합니다.

장애 조치는 백업이 완전히 업데이트되기 전에 기본 데이터베이스를 사용할 수 없게 되는 경우 소량의 데이터가 손실될 수 있더라도 예기치 않은 장애에서 신속하게 복구하고 다운타임을 최소화하려는 경우에 적합한 옵션입니다.

AlloyDB Omni 연산자는 자동 장애 조치와 수동 장애 조치 모두 지원합니다. 자동 장애 조치는 기본적으로 사용 설정되어 있습니다.

장애 조치로 인해 다음과 같은 이벤트가 순서대로 발생합니다.

  1. AlloyDB Omni 연산자는 기본 데이터베이스 인스턴스를 오프라인으로 전환합니다.

  2. AlloyDB Omni 연산자는 대기 복제본을 새 기본 데이터베이스 인스턴스로 승격합니다.

  3. AlloyDB Omni 연산자는 이전 기본 데이터베이스 인스턴스를 삭제합니다.

  4. AlloyDB Omni 연산자는 새 대기 복제본을 만듭니다.

자동 장애 조치 사용 중지

데이터베이스 클러스터에서는 자동 장애 조치가 기본적으로 사용 설정되어 있습니다.

장애 조치를 사용 중지하려면 다음 단계를 수행합니다.

  1. 클러스터 매니페스트에서 enableAutoFailoverfalse로 설정합니다.

    spec:
      availability:
        enableAutoFailover: false
    
  2. 매니페스트를 다시 적용합니다.

수동 장애 조치 트리거

수동 장애 조치를 트리거하려면 새 장애 조치 리소스 매니페스트를 만들어 적용합니다.

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Failover
metadata:
  name: FAILOVER_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME

다음을 바꿉니다.

  • FAILOVER_NAME: 이 리소스 이름(예: failover-1)

  • NAMESPACE: 이 장애 조치 리소스의 네임스페이스. 적용되는 데이터베이스 클러스터 네임스페이스와 일치해야 합니다.

  • DB_CLUSTER_NAME: 장애 조치할 데이터베이스 클러스터의 이름

장애 조치를 모니터링하려면 다음 명령어를 실행합니다.

kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACE

다음을 바꿉니다.

  • FAILOVER_NAME: 장애 조치 리소스를 만들 때 할당한 이름

  • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.

새 기본 데이터베이스 인스턴스를 사용할 준비가 되면 명령어에서 Success를 반환합니다. 새 대기 인스턴스 상태를 모니터링하려면 다음 섹션을 참조하세요.

대기 인스턴스로 전환

전환은 재해 복구 설정이나 기본 데이터베이스와 대기 복제본의 역할을 전환해야 하는 기타 계획된 활동을 테스트할 때 수행됩니다.

전환이 완료되면 기본 데이터베이스 인스턴스와 대기 복제본의 역할이 복제 방향과 함께 반대로 바뀝니다. 데이터 손실 없이 재해 복구 설정 테스트 프로세스를 더 잘 제어하려면 전환을 선택해야 합니다.

AlloyDB Omni 연산자는 수동 전환을 지원합니다.

전환으로 인해 다음과 같은 이벤트가 순서대로 발생합니다.

  1. AlloyDB Omni 연산자는 기본 데이터베이스 인스턴스를 오프라인으로 전환합니다.

  2. AlloyDB Omni 연산자는 대기 복제본을 새 기본 데이터베이스 인스턴스로 승격합니다.

  3. AlloyDB Omni 연산자는 이전 기본 데이터베이스 인스턴스를 대기 복제본으로 전환합니다.

전환 수행

전환을 수행하기 전에 다음을 확인합니다.

전환을 수행하려면 새 전환 리소스 매니페스트를 만들어 적용합니다.

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Switchover
metadata:
    name: SWITCHOVER_NAME
spec:
     dbclusterRef: DB_CLUSTER_NAME
     NewPrimary: STANDBY_REPLICA_NAME

다음을 바꿉니다.

  • SWITCHOVER_NAME: 이 전환 리소스 이름(예: switchover-1)

  • DB_CLUSTER_NAME: 전환 작업이 적용되는 기본 데이터베이스 인스턴스의 이름

  • STANDBY_REPLICA_NAME: 새 기본으로 승격할 데이터베이스 인스턴스의 이름

    대기 복제본 이름을 확인하려면 posix-terminal kubectl get instances.alloydbomni.internal.dbadmin.goog 명령어를 실행합니다.

대기 복제본을 읽기 전용 인스턴스로 사용

대기 복제본을 읽기 전용 인스턴스로 사용하려면 다음 단계를 완료합니다.

  1. 데이터베이스 클러스터 매니페스트를 수정하여 enableStandbyAsReadReplica 파라미터를 true로 설정합니다.

    spec:
      availability:
        enableStandbyAsReadReplica: true
    
  2. 매니페스트를 다시 적용합니다.

  3. 읽기 전용 엔드포인트가 DBCluster 객체의 status 필드에 보고되는지 확인합니다.

    kubectl describe dbcluster -n NAMESPACE DB_CLUSTER_NAME

    다음 응답 예시에서는 읽기 전용 인스턴스의 엔드포인트를 보여줍니다.

      Status:
      [...]
      Primary:
        [...]
        Endpoints:
          Name: Read-Write
          Value: 10.128.0.81:5432
          Name: Read-Only
          Value: 10.128.0.82:5432