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입니다. 필요한 대기 모드 수가 확실하지 않다면 먼저 값을 1 또는 2로 설정합니다.

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

HA 사용 중지

HA를 사용 중지하려면 다음 단계를 따르세요.

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

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

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

데이터베이스 클러스터에서 HA 상태를 확인하려면 HAReady 상태를 확인합니다. HAReady의 상태가 True이면 HA가 클러스터에서 사용 설정되어 작동 중인 것입니다. False인 경우 사용 설정되었지만 설정 중이기 때문에 준비되지 않은 것입니다.

kubectl 명령줄을 사용하여 HAReady 상태를 확인하려면 다음 명령어를 실행합니다.

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

다음을 바꿉니다.

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

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

대기 인스턴스로 장애 조치

구성 가능한 기간 동안 기본 인스턴스를 사용할 수 없게 되면 AlloyDB Omni 운영자는 기본 데이터베이스 인스턴스에서 대기 인스턴스로 자동으로 장애 조치됩니다. 다음 매개변수는 자동 장애 조치를 시작할 시점을 결정합니다.

  • 상태 점검 간격 (기본값: 30초)

  • 연속으로 실패한 상태 확인 횟수입니다 (기본값: 3).

자동 장애 조치는 지정된 횟수만큼 연속으로 상태 확인에 실패한 후 각 상태 확인 실패 간에 지정된 시간이 지나면 시작됩니다. 기본값이 유지되면 30초 간격으로 3회 연속 상태 점검에 실패하면 자동으로 장애 조치가 발생합니다.

예상치 못한 장애로부터 빠르게 복구하고 다운타임을 최소화하려면 수동 장애 조치를 실행하는 것이 좋습니다.

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

장애 조치의 결과 다음과 같은 이벤트 시퀀스가 발생합니다.

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

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

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

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

자동 장애 조치 사용 중지

자동 페일오버는 데이터베이스 클러스터에서 기본적으로 사용 설정되어 있습니다.

페일오버를 사용 중지하려면 다음 단계를 따르세요.

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

    spec:
      availability:
        enableAutoFailover: false
    

자동 장애 조치 트리거 설정 조정

설정을 사용하여 각 데이터베이스 클러스터의 자동 장애 조치를 조정할 수 있습니다.

AlloyDB Omni 운영자는 기본 데이터베이스 인스턴스와 모든 대기 복제본에 정기적인 상태 확인을 실행합니다. 상태 검사의 기본 빈도는 30초입니다. 인스턴스가 자동 장애 조치 트리거 기준점에 도달하면 AlloyDB Omni 연산자가 자동 장애 조치를 트리거합니다.

기준점 값은 장애 조치가 트리거되기 전에 상태 확인에서 연속으로 실패한 횟수입니다. 상태 검사 기간 또는 임곗값을 변경하려면 클러스터 매니페스트에서 healthcheckPeriodSecondsautoFailoverTriggerThreshold 필드를 정수 값으로 설정합니다.

spec:
  availability:
    healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
    autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD

다음을 바꿉니다.

  • HEALTHCHECK_PERIOD: 각 상태 확인 간에 기다릴 초 수를 나타내는 정수 값입니다. 기본값은 30입니다. 최솟값은 1이고 최댓값은 86400(1일과 같음)입니다.

  • AUTOFAILOVER_TRIGGER_THRESHOLD: 페일오버가 트리거되기 전에 상태 점검에서 연속으로 실패한 횟수에 관한 정수 값입니다. 기본값은 3입니다. 최솟값은 0입니다. 최대값은 없습니다. 이 필드가 0로 설정되면 기본값 3이 대신 사용됩니다.

수동 장애 조치 트리거

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

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: STANBDY_REPLICA_NAME

다음을 바꿉니다.

  • SWITCHOVER_NAME: 이 전환 리소스의 이름입니다(예: switchover-1).

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

  • STANBDY_REPLICA_NAME: 새 기본으로 승격하려는 데이터베이스 인스턴스의 이름입니다.

    대기 중인 복제본 이름을 확인하려면 다음 명령어를 실행합니다.

    kubectl get instances.alloydbomni.internal.dbadmin.goog

대기 인스턴스 자동 복구

대기 인스턴스를 사용할 수 없게 되면 AlloyDB Omni 운영자는 이전 대기 복제본을 삭제하고 그 자리에 새 대기 복제본을 만들어 인스턴스를 복구합니다. 자동 복구를 트리거하는 기본 시간은 90초입니다.

데이터베이스 클러스터를 자동으로 복구하면 기본 데이터베이스의 정상적인 연속 복제를 유지하는 데 도움이 됩니다.

인스턴스 자동 복구 사용 중지

기본적으로 데이터베이스 클러스터에서 대기 인스턴스 자동 복구가 사용 설정되어 있습니다.

자동 복구를 사용 중지하려면 다음 단계를 따르세요.

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

    spec:
      availability:
        enableAutoHeal: false
    

자동 복구 트리거 설정 조정

각 데이터베이스 클러스터의 설정을 사용하여 자동 복구를 조정할 수 있습니다.

AlloyDB Omni 연산자는 구성할 수 있는 정기적인 상태 점검을 실행합니다. 자세한 내용은 자동 페일오버 트리거 설정 조정하기를 참고하세요. 대기 복제본이 자동 복구 트리거 기준점에 도달하면 AlloyDB Omni 운영자가 자동 복구를 트리거합니다.

기준점 값은 복구가 트리거되기 전에 상태 확인에서 연속으로 실패한 횟수입니다. 기준값을 변경하려면 클러스터의 매니페스트에서 autoHealTriggerThreshold를 설정합니다.

spec:
  availability:
    autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD

다음을 바꿉니다.

  • AUTOHEAL_TRIGGER_THRESHOLD: 복구가 트리거되기 전에 상태 점검에서 연속으로 실패한 횟수에 관한 정수 값입니다. 기본값은 3입니다. 대기 상태 상태 확인에서 일시적인 일회성 오류가 발생할 수 있으므로 최솟값은 2입니다.

인스턴스 복구 문제 해결

단일 Kubernetes 클러스터에서 다수의 데이터베이스 클러스터를 사용하는 경우 자동 복구가 처리할 수 없을 수도 있습니다 (가능성은 낮음). HealthCheckProber: health check for instance failed로 시작하고 제한 시간 또는 연결 실패를 참조하는 오류가 발생하면 다음을 실행하여 오류를 완화할 수 있습니다.

다음은 과도한 자동 복구로 인해 발생할 수 있는 오류의 예입니다. 이 예에서는 클러스터 이름 또는 IP 주소와 같이 오류 소스를 식별하는 데 도움이 되는 환경 세부정보를 생략합니다.

  • HealthCheckProber: health check for instance failed" err="DBSE0005: DBDaemon Client Error. secure dbdaemon connection failed: context deadline exceeded...

  • HealthCheckProber: health check for instance failed" err="rpc error: code = Code(10303) desc = DBSE0303: Healthcheck: Health check table query failed. dbdaemon/healthCheck: read healthcheck table: timeout...

  • HealthCheckProber: health check for instance failed" err="rpc error: code = Code(12415) desc = DBSE2415: Postgres: failed to connect to database. dbdaemon/healthCheck: failed to connect...

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

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

  1. 데이터베이스 클러스터의 매니페스트에서 enableStandbyAsReadReplicatrue로 설정합니다.

    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