데이터 센터 간 복제 작업

문서 버전을 선택합니다.

이 페이지에서는 Kubernetes에서 보조 데이터베이스 클러스터를 만들고 관리하여 교차 데이터 센터 복제를 사용하는 방법을 설명합니다.

교차 데이터 센터 복제에 대한 개념적 개요는 교차 데이터 센터 복제 정보를 참조하세요.

시작하기 전에

  • 기본 데이터 센터와 보조 데이터 센터 간에 안정적이고 지연 시간이 짧은 네트워크 연결이 있어야 합니다. 이는 데이터 센터 간 복제가 효과적으로 작동하는 데 중요합니다.
  • 최신 버전의 AlloyDB Omni 연산자를 설치하여 기본 데이터 센터의 Kubernetes 클러스터와 보조 데이터 센터의 Kubernetes 클러스터에 AlloyDB Omni를 배포할 수 있도록 준비합니다. 데이터 센터 간 복제는 AlloyDB Omni 연산자 버전 1.5.0 이상에서 지원됩니다.
  • 기본 데이터 센터의 Kubernetes 클러스터에 AlloyDB Omni 데이터베이스 클러스터를 만듭니다.
  • 기본 데이터베이스 클러스터의 기본 및 대기 데이터베이스 서버에 보조 클러스터로의 복제에 필요한 WAL 파일을 수용할 수 있는 충분한 미리 쓰기 로깅(WAL) 공간이 있는지 확인합니다. 보조 클러스터로 아직 복제되지 않은 데이터는 기본 클러스터에 WAL 파일로 저장되므로 기본 클러스터와 보조 클러스터 간의 연결 속도에 따라 이 용도로 추가 디스크 공간이 필요할 수 있습니다.

보조 데이터베이스 클러스터 만들기

AlloyDB Omni 보조 데이터베이스 클러스터를 만들고 기본 데이터베이스 클러스터에서 복제를 사용 설정하려면 다음 단계를 따르세요.

Kubernetes

  1. AlloyDB Omni 기본 데이터베이스 클러스터에서 외부 연결이 사용 설정되어 있는지 확인합니다. 외부 연결이 사용 설정되어 있지 않다면 데이터베이스 클러스터 매니페스트의 사양 섹션에 다음을 추가합니다.

      kind: DBCluster
      spec:
       allowExternalIncomingTraffic: true
    
  2. 고가용성(HA)이 사용 설정된 기본 데이터베이스 클러스터와 함께 교차 데이터 센터 복제를 사용하려면 기본 데이터베이스 클러스터에서 replayReplicationSlotsOnStandbys 필드가 사용 설정되어 있는지 확인하세요.

    kind: DBCluster
      spec:
        availability:
          replayReplicationSlotsOnStandbys: true
    

    이 필드를 사용 설정하면 다음 단계에서 설명하는 logReplicationSlots와 함께 보조 데이터베이스 클러스터에서 사용하는 복제 슬롯이 모든 HA 대기 상태로 동기화됩니다. 이 구성을 사용하면 장애 조치 또는 전환 후 보조 데이터베이스 클러스터에서 아직 사용하지 않은 미리 쓰기 로깅(WAL) 파일을 새 HA 기본 데이터베이스가 유지하여 중단 없이 복제를 재개할 수 있습니다.

  3. 기본 데이터베이스 클러스터에서 복제를 사용 설정하려면 기본 데이터 센터의 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
         logReplicationSlot: LOG_REPLICATION_SLOT
    

    다음을 바꿉니다.

    • 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가 될 때까지 기다립니다.

  4. 보조 데이터베이스 클러스터에서 복제를 구성하기 위해 사용되는 업스트림 연결 정보를 얻으려면, 다음 명령어를 실행합니다.

      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"
      }
    
  5. 출력 결과를 기록해 두세요. 이 정보는 다음 단계에서 보조 데이터베이스 클러스터의 복제를 사용 설정하는 데 필요합니다.

  6. 보조 데이터 센터의 Kubernetes 클러스터에 기본 데이터베이스 클러스터와 동일한 구성을 가진 AlloyDB Omni 클러스터를 만듭니다.

  7. AlloyDB Omni 보조 데이터베이스 클러스터에서 외부 연결이 사용 설정되어 있는지 확인합니다.

  8. 외부 연결이 사용 설정되어 있지 않다면 매니페스트의 사양 섹션에 다음을 추가합니다.

     allowExternalIncomingTraffic: true
    
  9. 보조 데이터베이스 클러스터에서 복제를 사용 설정하려면 보조 데이터 센터의 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

보조 데이터베이스 클러스터가 성공적으로 설정되어 기본 데이터베이스 클러스터로부터 스트리밍 복제를 수행하고 있는 경우 복제 상태는 ready 및 healthy 모두로 표시됩니다.

보조 데이터베이스 클러스터 승격

보조 데이터베이스 클러스터를 승격하기 전에 보조 데이터베이스 클러스터가 기본 데이터베이스 클러스터로부터 수신한 모든 트랜잭션을 적용했는지 확인하기 위해 다음 단계를 수행합니다.

Kubernetes

  • 보조 데이터베이스 클러스터의 복제 상태를 확인하여 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 클러스터에 적용합니다.

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

전환 수행

전환을 수행하기 전에 두 데이터 센터에 속한 기본 및 보조 데이터베이스 클러스터가 모두 온라인 상태이며 데이터베이스 클러스터들이 healthy 상태인지 확인합니다.

전환 중 기본 및 보조 데이터베이스 클러스터의 데이터 일관성을 보장하려면 보조 데이터베이스 클러스터가 기본 데이터베이스 클러스터로부터 수신한 모든 트랜잭션을 적용했는지 확인하기 위해 다음 단계를 수행합니다.

Kubernetes

  • 보조 데이터베이스 클러스터의 복제 상태를 확인하여 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;'

전환을 수행하려면 다음 단계를 완료하세요.

Kubernetes

  1. 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
    

    복제 상태가 ready가 될 때까지 기다립니다.

  2. 복제를 위한 업스트림 연결 정보를 얻으려면 다음 명령어를 실행합니다.

    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"
     }
    
  3. 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가 될 때까지 기다립니다.

  4. 복제 상태를 확인하려면 다음을 사용하세요.

    kubectl get replication REPLICATION_NAME