이 문서에서는 Kubernetes 기반 AlloyDB Omni 데이터베이스 클러스터에서 고가용성 (HA)을 사용 설정하고 테스트하는 방법을 보여줍니다. 이 문서에서는 Kubernetes 매니페스트 파일 적용 및 kubectl
명령줄 도구 사용에 관한 기본 지식을 알고 있다고 가정합니다.
개요
AlloyDB Omni Kubernetes 연산자를 구성하여 기본 데이터베이스 인스턴스의 대기 복제본을 만들면 데이터베이스 클러스터에서 HA를 사용 설정할 수 있습니다. AlloyDB Omni 연산자는 이 복제본의 데이터를 지속적으로 업데이트하도록 데이터베이스 클러스터를 구성하고 기본 인스턴스의 모든 데이터 변경사항과 일치시킵니다.
HA 사용 설정
데이터베이스 클러스터에서 HA를 사용 설정하기 전에 Kubernetes 클러스터에 다음이 있는지 확인합니다.
데이터의 전체 사본 2개를 위한 스토리지
동시에 실행되는 두 데이터베이스 인스턴스의 컴퓨팅 리소스
HA를 사용 설정하려면 다음 단계를 따르세요.
spec
섹션 아래에availability
섹션을 포함하도록 데이터베이스 클러스터의 매니페스트를 수정합니다. 이 섹션에서는numberOfStandbys
매개변수를 사용하여 추가할 대기 모드의 수를 지정합니다.spec: availability: numberOfStandbys: NUMBER_OF_STANDBYS
NUMBER_OF_STANDBYS
을 추가하려는 대기 중인 앱 수로 바꿉니다. 최댓값은5
입니다. 필요한 대기 모드 수가 확실하지 않다면 먼저 값을1
또는2
로 설정합니다.매니페스트를 다시 적용합니다.
HA 사용 중지
HA를 사용 중지하려면 다음 단계를 따르세요.
클러스터의 매니페스트에서
numberOfStandbys
를0
로 설정합니다.spec: availability: numberOfStandbys: 0
매니페스트를 다시 적용합니다.
데이터베이스 클러스터에서 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 운영자는 자동 및 수동 장애 조치를 모두 지원합니다. 자동 장애 조치는 기본적으로 사용 설정되어 있습니다.
장애 조치의 결과 다음과 같은 이벤트 시퀀스가 발생합니다.
AlloyDB Omni 연산자가 기본 데이터베이스 인스턴스를 오프라인으로 전환합니다.
AlloyDB Omni 연산자는 대기 복제본을 새 기본 데이터베이스 인스턴스로 승격합니다.
AlloyDB Omni 연산자가 이전 기본 데이터베이스 인스턴스를 삭제합니다.
AlloyDB Omni 연산자가 새 대기 모드 복제본을 만듭니다.
자동 장애 조치 사용 중지
자동 페일오버는 데이터베이스 클러스터에서 기본적으로 사용 설정되어 있습니다.
페일오버를 사용 중지하려면 다음 단계를 따르세요.
클러스터의 매니페스트에서
enableAutoFailover
를false
로 설정합니다.spec: availability: enableAutoFailover: false
자동 장애 조치 트리거 설정 조정
설정을 사용하여 각 데이터베이스 클러스터의 자동 장애 조치를 조정할 수 있습니다.
AlloyDB Omni 운영자는 기본 데이터베이스 인스턴스와 모든 대기 복제본에 정기적인 상태 확인을 실행합니다. 상태 검사의 기본 빈도는 30
초입니다. 인스턴스가 자동 장애 조치 트리거 기준점에 도달하면 AlloyDB Omni 연산자가 자동 장애 조치를 트리거합니다.
기준점 값은 장애 조치가 트리거되기 전에 상태 확인에서 연속으로 실패한 횟수입니다. 상태 검사 기간 또는 임곗값을 변경하려면 클러스터 매니페스트에서 healthcheckPeriodSeconds
및 autoFailoverTriggerThreshold
필드를 정수 값으로 설정합니다.
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 운영자는 수동 전환을 지원합니다. 전환 시 다음과 같은 이벤트 순서가 발생합니다.
AlloyDB Omni 연산자가 기본 데이터베이스 인스턴스를 오프라인으로 전환합니다.
AlloyDB Omni 연산자는 대기 복제본을 새 기본 데이터베이스 인스턴스로 승격합니다.
AlloyDB Omni 운영자는 이전 기본 데이터베이스 인스턴스를 대기 복제본으로 전환합니다.
전환 수행
전환을 시작하기 전에 다음을 실행합니다.
기본 데이터베이스 인스턴스와 대기 복제본이 모두 정상 상태인지 확인합니다. 자세한 내용은 AlloyDB Omni 관리 및 모니터링을 참고하세요.
현재 HA 상태가
HAReady
상태인지 확인합니다. 자세한 내용은 데이터베이스 클러스터에서 HA 확인을 참고하세요.
전환을 실행하려면 새 전환 리소스의 매니페스트를 만들고 적용합니다.
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초입니다.
데이터베이스 클러스터를 자동으로 복구하면 기본 데이터베이스의 정상적인 연속 복제를 유지하는 데 도움이 됩니다.
인스턴스 자동 복구 사용 중지
기본적으로 데이터베이스 클러스터에서 대기 인스턴스 자동 복구가 사용 설정되어 있습니다.
자동 복구를 사용 중지하려면 다음 단계를 따르세요.
클러스터 매니페스트에서
enableAutoHeal
를false
로 설정합니다.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
로 시작하고 제한 시간 또는 연결 실패를 참조하는 오류가 발생하면 다음을 실행하여 오류를 완화할 수 있습니다.
Kubernetes 클러스터에서 관리하는 데이터베이스 클러스터 수를 줄입니다.
상태 점검이 더 자주 실행되지 않도록
healthcheckPeriodSeconds
기준 값을 늘립니다. 자세한 내용은 자동 페일오버 트리거 설정 조정하기를 참고하세요.AlloyDB Omni 연산자의 CPU 한도, 메모리 한도 또는 둘 다를 늘립니다. 자세한 내용은 자동 메모리 관리 정보 및 AlloyDB Omni 연산자 메모리 힙 사용량 분석을 참고하세요.
다음은 과도한 자동 복구로 인해 발생할 수 있는 오류의 예입니다. 이 예에서는 클러스터 이름 또는 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...
대기 모드 복제본을 읽기 전용 인스턴스로 사용
대기 중인 복제본을 읽기 전용 인스턴스로 사용하려면 다음 단계를 완료하세요.
데이터베이스 클러스터의 매니페스트에서
enableStandbyAsReadReplica
를true
로 설정합니다.spec: availability: enableStandbyAsReadReplica: true
매니페스트를 다시 적용합니다.
읽기 전용 엔드포인트가
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