이 페이지에서는 Kubernetes에서 보조 데이터베이스 클러스터를 만들고 이를 사용하여 교차 데이터 센터 복제를 사용하는 방법을 설명합니다.
교차 데이터 센터 복제에 관한 개념적 개요는 교차 데이터 센터 복제 정보를 참고하세요.
시작하기 전에
- AlloyDB Omni Operator 버전 1.1.0 이상을 설치하여 기본 데이터 센터의 Kubernetes 클러스터와 보조 데이터 센터의 Kubernetes 클러스터에 AlloyDB Omni를 배포합니다.
- 기본 데이터 센터의 Kubernetes 클러스터에 AlloyDB Omni 데이터베이스 클러스터를 만듭니다.
보조 데이터베이스 클러스터 만들기
AlloyDB Omni 보조 데이터베이스 클러스터를 만들고 기본 데이터베이스 클러스터에서 복제를 사용 설정하려면 다음 단계를 따르세요.
Kubernetes
AlloyDB Omni 기본 데이터베이스 클러스터에서 외부 연결이 사용 설정되어 있는지 확인합니다. 외부 연결이 사용 설정되지 않은 경우 데이터베이스 클러스터 매니페스트의 사양 섹션에 다음을 추가합니다.
kind: DBCluster spec: allowExternalIncomingTraffic: true
기본 데이터베이스 클러스터에서 복제를 사용 설정하려면 다음과 유사한 매니페스트를 기본 데이터 센터의 Kubernetes 클러스터에 적용합니다.
apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-DB_CLUSTER_NAME type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: REPLICATION_NAME spec: dbcluster: name: DB_CLUSTER_NAME upstream: password: name: ha-rep-pw-DB_CLUSTER_NAME
다음을 바꿉니다.
DB_CLUSTER_NAME
: 데이터베이스 클러스터의 이름입니다(예:dbc-1
).ENCODED_PASSWORD
: 보조 데이터베이스에서 복제하는 데 사용할 데이터베이스 사용자의 비밀번호로, base64 문자열로 인코딩됩니다(예:Q2hhbmdlTWUxMjM= for ChangeMe123
). 기본값은alloydbreplica
입니다.REPLICATION_NAME
: 복제의 이름입니다(예:replication-1
).
복제 상태가 준비될 때까지 기다립니다.
보조 데이터베이스 클러스터에서 복제를 구성하는 데 사용되는 업스트림 연결 정보를 가져오려면 다음 명령어를 실행합니다.
kubectl get replication REPLICATION_NAME
kubectl get replication REPLICATION_NAME -o json | jq .status.upstream
샘플 출력은 다음과 유사합니다.
{ "host": "35.230.32.36", "password": { "name": "ha-rep-pw-dbc-1" }, "port": 5432, "replicationSlotName": "dbc_1_replication_1", "username": "alloydbreplica" }
다음 단계에서 보조 데이터베이스 클러스터에 복제를 사용 설정하는 데 필요하므로 출력을 기록해 둡니다.
보조 데이터 센터의 Kubernetes 클러스터에서 기본 데이터베이스 클러스터와 구성이 동일한 AlloyDB Omni 클러스터를 만듭니다.
AlloyDB Omni 보조 데이터베이스 클러스터에서 외부 연결이 사용 설정되어 있는지 확인합니다.
외부 연결이 사용 설정되지 않은 경우 매니페스트의 사양 섹션에 다음을 추가합니다.
allowExternalIncomingTraffic: true
보조 데이터베이스 클러스터에서 복제를 사용 설정하려면 보조 데이터 센터의 Kubernetes 클러스터에 다음과 유사한 매니페스트를 적용합니다.
apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: SECONDARY_REPLICATION_NAME spec: dbcluster: name: SECONDARY_DB_CLUSTER_NAME downstream: host: PRIMARY_HOST port: PRIMARY_PORT username: alloydbreplica password: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME replicationSlotName: PRIMARY_REPLICATION_SLOT control: setup
다음을 바꿉니다.
SECONDARY_DB_CLUSTER_NAME
: 보조 데이터베이스 클러스터의 이름입니다(예:dbc-2
).ENCODED_PASSWORD
: 기본 데이터베이스 클러스터 복제에 사용할 데이터베이스 사용자의 비밀번호로, base64 문자열로 인코딩됩니다(예:Q2hhbmdlTWUxMjM= for ChangeMe123
). 기본값은alloydbreplica
입니다.SECONDARY_REPLICATION_NAME
: 복제의 이름입니다(예:replication-2
).PRIMARY_HOST
: 보조 데이터베이스가 복제를 위해 액세스할 수 있는 3단계의 출력에서 기본 데이터베이스 클러스터의 연결 엔드포인트입니다.PRIMARY_PORT
: 보조 데이터베이스가 복제를 위해 액세스할 수 있는 3단계의 출력에서 기본 데이터베이스 클러스터의 연결 포트입니다.PRIMARY_REPLICATION_SLOT
: 보조 데이터베이스에서 복제에 사용할 수 있는 3단계의 출력에서 기본 데이터베이스 클러스터의 복제 슬롯 이름입니다.
보조 데이터베이스 클러스터에서 복제 보기
AlloyDB Omni 보조 데이터베이스 클러스터 및 복제 상태에 관한 자세한 정보를 보려면 다음 명령어를 실행합니다.
Kubernetes
kubectl get dbcluster SECONDARY_DB_CLUSTER_NAME
kubectl get replication SECONDARY_REPLICATION_NAME
보조 데이터베이스 클러스터가 설정되고 기본 데이터베이스 클러스터에서 스트리밍 복제가 이루어지면 복제 상태가 준비되고 정상입니다.
보조 데이터베이스 클러스터 승격
보조 데이터베이스 클러스터를 승격하기 전에 다음 단계를 수행하여 보조 데이터베이스 클러스터에 기본 데이터베이스 클러스터에서 수신된 모든 트랜잭션이 적용되었는지 확인합니다.
Kubernetes
보조 데이터베이스 클러스터의 복제 상태를 확인하여 준비되고 정상적인지 확인합니다.
kubectl get replication SECONDARY_REPLICATION_NAME
기본 데이터베이스 클러스터에 대한 모든 쓰기를 중지합니다. 기본 데이터베이스 클러스터에서 다음 쿼리를 실행하여 보조 데이터베이스의 복제 지연을 확인합니다. 결과에 최소 지연이 표시되는지 확인합니다.
지연 값이 0이면 이상적입니다. 지연 시간이 0보다 크면 보조 데이터베이스 클러스터를 승격할 수 있지만, 이 경우 기본 데이터베이스 클러스터에서 이미 커밋된 일부 최근 트랜잭션이 손실될 위험이 있습니다.
psql -h PRIMARY_HOST -U postgres -d postgres -c 'SELECT application_name, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag FROM pg_stat_replication;'
보조 데이터베이스 클러스터를 기본 데이터베이스 클러스터로 승격하려면 보조 데이터베이스 클러스터의 복제 매니페스트의 control 필드를 promote
로 업데이트하고 보조 데이터 센터의 Kubernetes 클러스터에 적용합니다.
Kubernetes
apiVersion: v1
kind: Secret
metadata:
name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
type: Opaque
data:
rep-user-pw: "ENCODED_PASSWORD"
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Replication
metadata:
name: SECONDARY_REPLICATION_NAME
spec:
dbcluster:
name: SECONDARY_DB_CLUSTER_NAME
downstream:
host: PRIMARY_HOST
port: PRIMARY_PORT
username: alloydbreplica
password:
name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
replicationSlotName: PRIMARY_REPLICATION_SLOT
control: promote
전환 수행
전환을 실행하기 전에 두 데이터 센터에 속한 기본 및 보조 데이터베이스 클러스터가 모두 온라인 상태이고 데이터베이스 클러스터가 정상 상태인지 확인합니다.
전환 중에 기본 데이터베이스 클러스터와 보조 데이터베이스 클러스터의 데이터 일관성을 보장하려면 다음 단계에 따라 보조 데이터베이스 클러스터에 기본 데이터베이스 클러스터에서 수신된 모든 트랜잭션이 적용되었는지 확인합니다.
Kubernetes
보조 데이터베이스 클러스터의 복제 상태를 확인하여 준비되고 정상적인지 확인합니다.
kubectl get replication SECONDARY_REPLICATION_NAME
기본 데이터베이스 클러스터에 대한 모든 쓰기를 중지합니다. 기본 데이터베이스 클러스터에서 다음 쿼리를 실행하여 보조 데이터베이스의 복제 지연을 확인합니다. 결과에 지연 값
0
가 표시되는지 확인합니다.psql -h PRIMARY_HOST -U postgres -d postgres -c 'SELECT application_name, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag FROM pg_stat_replication;'
전환을 수행하려면 다음 단계를 완료하세요.
Kubernetes
AlloyDB Omni 보조 데이터베이스 클러스터를 기본 데이터베이스 클러스터로 변환하려면 다음과 같이 보조 데이터 센터의 Kubernetes 클러스터에서 복제 매니페스트를 업데이트합니다.
apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: SECONDARY_REPLICATION_NAME spec: dbcluster: name: SECONDARY_DB_CLUSTER_NAME upstream: password: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
복제 상태가 준비될 때까지 기다립니다.
복제의 업스트림 연결 정보를 가져오려면 다음 명령어를 실행합니다.
kubectl get replication SECONDARY_REPLICATION_NAME
kubectl get replication SECONDARY_REPLICATION_NAME -o json | jq .status.upstream
샘플 출력은 다음과 유사합니다.
{ "host": "34.23.207.137", "password": { "name": "ha-rep-pw-dbc-2" }, "port": 5432, "replicationSlotName": "dbc_2_replication_2", "username": "alloydbreplica" }
AlloyDB Omni 기본 데이터베이스 클러스터를 보조 데이터베이스 클러스터로 변환하려면 다음과 같이 기본 데이터 센터의 Kubernetes 클러스터에서 복제 매니페스트를 업데이트합니다.
apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-DB_CLUSTER_NAME type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: REPLICATION_NAME spec: dbcluster: name: DB_CLUSTER_NAME downstream: host: SECONDARY_HOST port: SECONDARY_PORT username: alloydbreplica password: name: ha-rep-pw-DB_CLUSTER_NAME replicationSlotName: SECONDARY_REPLICATION_SLOT control: rewind
복제 상태가 준비되고 정상적으로 작동할 때까지 기다립니다.
복제 상태를 확인하려면 다음을 사용하세요.
kubectl get replication REPLICATION_NAME