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
(하루에 해당)입니다.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: STANDBY_REPLICA_NAME
다음을 바꿉니다.
SWITCHOVER_NAME
: 이 전환 리소스의 이름입니다(예:switchover-1
).DB_CLUSTER_NAME
: 스위치오버 작업이 적용되는 기본 데이터베이스 인스턴스의 이름입니다.STANDBY_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
: 복구가 트리거되기 전 상태 점검의 연속 실패 횟수를 나타내는 정수 값입니다. 기본값은5
입니다. 대기 상태 점검에서 일시적인 일회성 오류가 발생할 수 있으므로 최솟값은2
입니다.
인스턴스 복구 문제 해결
단일 Kubernetes 클러스터에서 많은 수의 데이터베이스 클러스터를 사용하거나 프로비저닝이 부족한 데이터베이스 클러스터가 있는 경우 자동 복구로 인해 AlloyDB Omni 연산자 또는 데이터베이스 클러스터를 사용할 수 없게 될 수 있습니다. HealthCheckProber: health check for instance failed
로 시작하는 오류가 표시되고 오류에서 제한 시간 또는 연결 실패를 참조하는 경우 다음 권장 수정사항을 시도해 보세요.
Kubernetes 클러스터에서 관리하는 데이터베이스 클러스터 수를 줄입니다.
상태 점검이 자주 발생하지 않도록
healthcheckPeriodSeconds
기준 값을 늘립니다. 자세한 내용은 자동 장애 조치 트리거 설정 조정하기를 참고하세요.자동 복구가 더 적은 빈도로 발생하도록
autoHealTriggerThreshold
값을 늘립니다. 자세한 내용은 자동 복구 트리거 설정 조정하기를 참고하세요.데이터베이스 클러스터에서 자동 복구를 사용 중지합니다. 자세한 내용은 인스턴스 자동 복구 사용 중지를 참고하세요.
AlloyDB Omni 연산자의 CPU 한도, 메모리 한도 또는 둘 다를 늘립니다. 자세한 내용은 자동 메모리 관리 정보 및 AlloyDB Omni 연산자 메모리 힙 사용량 분석을 참고하세요.
AlloyDB Omni 데이터베이스 클러스터의 리소스 한도를 늘립니다. 자세한 내용은 Kubernetes 기반 데이터베이스 클러스터 크기 조절을 참고하세요.
다음은 과도한 자동 복구로 인해 발생할 수 있는 오류의 예입니다. 이러한 예에서는 클러스터 이름이나 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