교차 데이터 센터 복제에 대한 개념적 개요는 교차 데이터 센터 복제 정보를 참조하세요.
시작하기 전에
- 기본 데이터 센터와 보조 데이터 센터 간에 안정적이고 지연 시간이 짧은 네트워크 연결이 있어야 합니다. 이는 데이터 센터 간 복제가 효과적으로 작동하는 데 중요합니다.
- 최신 버전의 AlloyDB Omni 연산자를 설치하여 기본 데이터 센터의 Kubernetes 클러스터와 보조 데이터 센터의 Kubernetes 클러스터에 AlloyDB Omni를 배포할 수 있도록 준비합니다. 데이터 센터 간 복제는 AlloyDB Omni 연산자 버전 1.5.0 이상에서 지원됩니다.
- 기본 데이터 센터의 Kubernetes 클러스터에 AlloyDB Omni 데이터베이스 클러스터를 만듭니다.
- 기본 데이터베이스 클러스터의 기본 및 대기 데이터베이스 서버에 보조 클러스터로의 복제에 필요한 WAL 파일을 수용할 수 있는 충분한 미리 쓰기 로깅(WAL) 공간이 있는지 확인합니다. 보조 클러스터로 아직 복제되지 않은 데이터는 기본 클러스터에 WAL 파일로 저장되므로 기본 클러스터와 보조 클러스터 간의 연결 속도에 따라 이 용도로 추가 디스크 공간이 필요할 수 있습니다.
보조 데이터베이스 클러스터 만들기
AlloyDB Omni 보조 데이터베이스 클러스터를 만들고 기본 데이터베이스 클러스터에서 복제를 사용 설정하려면 다음 단계를 따르세요.
- AlloyDB Omni 기본 데이터베이스 클러스터에서 외부 연결이 사용 설정되어 있는지 확인합니다. 외부 연결이 사용 설정되어 있지 않다면 데이터베이스 클러스터 매니페스트의 사양 섹션에 다음을 추가합니다. - ... spec: ... allowExternalIncomingTraffic: true 
- 고가용성(HA)이 사용 설정된 기본 데이터베이스 클러스터와 함께 교차 데이터 센터 복제를 사용하려면 기본 데이터베이스 클러스터에서 - replayReplicationSlotsOnStandbys필드가 사용 설정되어 있는지 확인하세요.- ... spec: ... availability: ... replayReplicationSlotsOnStandbys: true - 이 필드를 사용 설정하면 다음 단계에서 설명하는 - logReplicationSlots와 함께 보조 데이터베이스 클러스터에서 사용하는 복제 슬롯이 모든 HA 대기 상태로 동기화됩니다. 이 구성을 사용하면 장애 조치 또는 전환 후 보조 데이터베이스 클러스터에서 아직 사용하지 않은 미리 쓰기 로깅(WAL) 파일을 새 HA 기본 데이터베이스가 유지하여 중단 없이 복제를 재개할 수 있습니다.
- 기본 데이터베이스 클러스터에서 복제를 사용 설정하려면 기본 데이터 센터의 Kubernetes 클러스터에 다음과 유사한 매니페스트를 적용합니다. - apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-DB_CLUSTER_NAME namespace: DB_CLUSTER_NAMESPACE type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: REPLICATION_NAME namespace: DB_CLUSTER_NAMESPACE spec: dbcluster: name: DB_CLUSTER_NAME upstream: password: name: ha-rep-pw-DB_CLUSTER_NAME logReplicationSlot: true - 다음을 바꿉니다. - DB_CLUSTER_NAME: 데이터베이스 클러스터의 이름(예:- dbc-1)
- ENCODED_PASSWORD: 보조 데이터베이스에서 복제를 위해 사용할 데이터베이스 사용자의 비밀번호를 base64 문자열로 인코딩한 값(예:- Q2hhbmdlTWUxMjM= for ChangeMe123). 기본값은- alloydbreplica입니다.
- REPLICATION_NAME: 복제의 이름입니다(예:- replication-1).
- LOG_REPLICATION_SLOT: 복제 슬롯 데이터를 WAL 파일에 로깅합니다. 이 옵션을 사용 설정하려면 값을- true로 설정합니다. 기본값은- false입니다.
 - 장애 조치 또는 전환 후에도 복제가 계속 작동하도록 하려면 고가용성(HA)이 사용 설정된 기본 데이터베이스 클러스터에서 - logReplicationSlot옵션을 사용 설정하는 것이 좋습니다.- 복제 상태가 ready가 될 때까지 기다립니다. 
- 보조 데이터베이스 클러스터에서 복제를 구성하기 위해 사용되는 업스트림 연결 정보를 얻으려면, 다음 명령어를 실행합니다. - 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 보조 데이터베이스 클러스터에서 외부 연결이 사용 설정되어 있는지 확인합니다.
- 외부 연결이 사용 설정되어 있지 않다면 매니페스트의 사양 섹션에 다음을 추가합니다. - ... spec: ... allowExternalIncomingTraffic: true 
- 보조 데이터베이스 클러스터에서 복제를 사용 설정하려면 보조 데이터 센터의 Kubernetes 클러스터에 다음과 유사한 매니페스트를 적용합니다.
apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME namespace: SECONDARY_DB_CLUSTER_NAMESPACE type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: SECONDARY_REPLICATION_NAME namespace: SECONDARY_DB_CLUSTER_NAMESPACE 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 보조 데이터베이스 클러스터와 그 복제 상태에 관한 자세한 정보를 보려면 다음 명령어를 실행하세요.
kubectl get dbcluster SECONDARY_DB_CLUSTER_NAME kubectl get replication SECONDARY_REPLICATION_NAME
보조 데이터베이스 클러스터가 성공적으로 설정되어 기본 데이터베이스 클러스터로부터 스트리밍 복제를 수행하고 있는 경우 복제 상태는 ready 및 healthy 모두로 표시됩니다.
보조 데이터베이스 클러스터 승격
보조 데이터베이스 클러스터를 승격하기 전에 보조 데이터베이스 클러스터가 기본 데이터베이스 클러스터로부터 수신한 모든 트랜잭션을 적용했는지 확인하기 위해 다음 단계를 수행합니다.
- 보조 데이터베이스 클러스터의 복제 상태를 확인하여 ready 및 healthy가 모두 표시되는지 확인합니다. - 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 클러스터에 적용합니다.
apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME namespace: SECONDARY_DB_CLUSTER_NAMESPACE type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: SECONDARY_REPLICATION_NAME namespace: SECONDARY_DB_CLUSTER_NAMESPACE 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
전환 수행
전환을 수행하기 전에 두 데이터 센터에 속한 기본 및 보조 데이터베이스 클러스터가 모두 온라인 상태이며 데이터베이스 클러스터들이 healthy 상태인지 확인합니다.
전환 중 기본 및 보조 데이터베이스 클러스터의 데이터 일관성을 보장하려면 보조 데이터베이스 클러스터가 기본 데이터베이스 클러스터로부터 수신한 모든 트랜잭션을 적용했는지 확인하기 위해 다음 단계를 수행합니다.
- 보조 데이터베이스 클러스터의 복제 상태를 확인하여 ready 및 healthy가 모두 표시되는지 확인합니다. - 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;' 
전환을 수행하려면 다음 단계를 완료하세요.
- 
AlloyDB Omni 보조 데이터베이스 클러스터를 기본 데이터베이스 클러스터로 변환하려면 보조 데이터 센터의 Kubernetes 클러스터에서 해당 복제 매니페스트를 다음과 같이 업데이트하세요. apiVersion: v1 kind: Secret metadata: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME namespace: SECONDARY_DB_CLUSTER_NAMESPACE type: Opaque data: rep-user-pw: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: Replication metadata: name: SECONDARY_REPLICATION_NAME namespace: SECONDARY_DB_CLUSTER_NAMESPACE spec: dbcluster: name: SECONDARY_DB_CLUSTER_NAME upstream: password: name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME 복제 상태가 ready가 될 때까지 기다립니다. 
- 복제를 위한 업스트림 연결 정보를 얻으려면 다음 명령어를 실행합니다. - 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 복제 상태가 ready와 healthy가 될 때까지 기다립니다. 
- 복제 상태를 확인하려면 다음을 사용하세요. - kubectl get replication REPLICATION_NAME