Menggunakan replikasi lintas-data center

Halaman ini menjelaskan cara menggunakan replikasi lintas-data center dengan membuat dan menggunakan cluster database sekunder di Kubernetes.

Untuk ringkasan konseptual tentang replikasi lintas-data center, lihat Tentang replikasi lintas-data center.

Sebelum memulai

  • Instal Operator AlloyDB Omni versi 1.1.0 atau yang lebih tinggi untuk men-deploy AlloyDB Omni di cluster Kubernetes di pusat data utama dan cluster Kubernetes di pusat data sekunder.
  • Buat cluster database AlloyDB Omni di cluster Kubernetes di pusat data utama.

Membuat cluster database sekunder

Untuk membuat cluster database sekunder AlloyDB Omni dan mengaktifkan replikasi dari cluster database utama, ikuti langkah-langkah berikut:

Kubernetes

  1. Pastikan konektivitas eksternal diaktifkan di cluster database utama AlloyDB Omni Anda. Jika konektivitas eksternal tidak diaktifkan, tambahkan hal berikut ke bagian spesifikasi manifes cluster database:

      kind: DBCluster
      spec:
       allowExternalIncomingTraffic: true
    
  2. Untuk mengaktifkan replikasi di cluster database utama, terapkan manifes yang mirip dengan berikut ke cluster Kubernetes di pusat data utama:

     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
    

    Ganti kode berikut:

    • DB_CLUSTER_NAME: Nama cluster database—misalnya, dbc-1.
    • ENCODED_PASSWORD: Sandi untuk pengguna database yang akan digunakan untuk replikasi dari database sekunder, yang dienkode sebagai string base64—misalnya, Q2hhbmdlTWUxMjM= for ChangeMe123. Nilai defaultnya adalah alloydbreplica.
    • REPLICATION_NAME: nama replikasi—misalnya, replication-1.

    Tunggu hingga status replikasi siap.

  3. Untuk mendapatkan informasi koneksi upstream yang digunakan untuk mengonfigurasi replikasi di cluster database sekunder, jalankan perintah berikut:

      kubectl get replication REPLICATION_NAME
      kubectl get replication REPLICATION_NAME -o json | jq .status.upstream

    Contoh output terlihat mirip dengan yang berikut ini:

      {
       "host": "35.230.32.36",
       "password": {
         "name": "ha-rep-pw-dbc-1"
       },
       "port": 5432,
       "replicationSlotName": "dbc_1_replication_1",
       "username": "alloydbreplica"
      }
    
  4. Catat output karena Anda memerlukannya untuk mengaktifkan replikasi di cluster database sekunder pada langkah berikut.

  5. Buat cluster AlloyDB Omni di cluster Kubernetes di pusat data sekunder dengan konfigurasi yang identik dengan cluster database utama Anda.

  6. Pastikan konektivitas eksternal diaktifkan di cluster database sekunder AlloyDB Omni Anda.

  7. Jika konektivitas eksternal tidak diaktifkan, tambahkan kode berikut ke bagian spesifikasi manifesnya:

     allowExternalIncomingTraffic: true
    
  8. Untuk mengaktifkan replikasi di cluster database sekunder, terapkan manifes yang mirip dengan berikut ke cluster Kubernetes di pusat data sekunder:

      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
    

    Ganti kode berikut:

    • SECONDARY_DB_CLUSTER_NAME: Nama cluster database sekunder—misalnya, dbc-2.
    • ENCODED_PASSWORD: Sandi untuk pengguna database yang akan digunakan untuk mereplikasi cluster database utama, yang dienkode sebagai string base64—misalnya, Q2hhbmdlTWUxMjM= for ChangeMe123. Nilai defaultnya adalah alloydbreplica.
    • SECONDARY_REPLICATION_NAME: nama replikasi—misalnya, replication-2.
    • PRIMARY_HOST: endpoint koneksi cluster database utama dari output di langkah 3 yang dapat diakses oleh database sekunder untuk replikasi.
    • PRIMARY_PORT: port koneksi cluster database utama dari output di langkah 3 yang dapat diakses database sekunder untuk replikasi.
    • PRIMARY_REPLICATION_SLOT: nama slot replika di cluster database utama dari output di langkah 3 yang dapat digunakan database sekunder untuk replikasi.

Melihat replikasi di cluster database sekunder

Untuk melihat informasi mendetail tentang cluster database sekunder AlloyDB Omni dan status replikasinya, jalankan perintah berikut:

Kubernetes

kubectl get dbcluster SECONDARY_DB_CLUSTER_NAME
kubectl get replication SECONDARY_REPLICATION_NAME

Jika cluster database sekunder berhasil disiapkan dan memiliki replikasi streaming dari cluster database utama, status replikasi akan siap dan baik.

Mempromosikan cluster database sekunder

Sebelum Anda mempromosikan cluster database sekunder, lakukan langkah-langkah berikut untuk memverifikasi bahwa cluster database sekunder telah menerapkan semua transaksi yang diterima dari cluster database utama:

Kubernetes

  • Periksa status replikasi cluster database sekunder, untuk memastikan cluster tersebut siap dan responsif.

    kubectl get replication SECONDARY_REPLICATION_NAME
  • Hentikan semua penulisan ke cluster database utama. Jalankan kueri berikut di cluster database utama untuk memeriksa jeda replikasi database sekunder. Pastikan hasilnya menunjukkan jeda minimal.

    Nilai jeda 0 adalah ideal. Jika jeda lebih besar dari 0, Anda masih dapat mempromosikan cluster database sekunder, dengan risiko kehilangan beberapa transaksi terbaru yang telah di-commit di cluster database primer.

     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;'

Untuk mempromosikan cluster database sekunder ke cluster database utama, perbarui kolom control dari manifes replikasi cluster database sekunder Anda ke promote, dan terapkan di cluster Kubernetes Anda di pusat data sekunder.

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

Melakukan pengalihan

Sebelum melakukan peralihan, pastikan cluster database primer dan sekunder yang termasuk dalam kedua pusat data tersebut online dan cluster database dalam status yang baik.

Untuk memastikan konsistensi data cluster database utama dan sekunder selama pengalihan, lakukan langkah-langkah berikut untuk memverifikasi bahwa cluster database sekunder telah menerapkan semua transaksi yang diterima dari cluster database utama:

Kubernetes

  • Periksa status replikasi cluster database sekunder, untuk memastikan cluster tersebut siap dan responsif.

    kubectl get replication SECONDARY_REPLICATION_NAME
  • Hentikan semua penulisan ke cluster database utama. Jalankan kueri berikut di cluster database utama untuk memeriksa jeda replikasi database sekunder. Pastikan bahwa hasilnya menunjukkan nilai jeda 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;'

Untuk melakukan pengalihan, selesaikan langkah-langkah berikut:

Kubernetes

  1. Untuk mengonversi cluster database sekunder AlloyDB Omni menjadi cluster database utama, perbarui manifes replikasinya di cluster Kubernetes di pusat data sekunder sebagai berikut:

       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
    

    Tunggu hingga status replikasi siap.

  2. Untuk mendapatkan informasi koneksi upstream untuk replikasi, jalankan perintah berikut:

    kubectl get replication SECONDARY_REPLICATION_NAME
    kubectl get replication SECONDARY_REPLICATION_NAME -o json | jq .status.upstream

    Contoh output terlihat mirip dengan yang berikut ini:

     {
       "host": "34.23.207.137",
       "password": {
         "name": "ha-rep-pw-dbc-2"
       },
       "port": 5432,
       "replicationSlotName": "dbc_2_replication_2",
       "username": "alloydbreplica"
     }
    
  3. Untuk mengonversi cluster database utama AlloyDB Omni menjadi cluster database sekunder, perbarui manifes replikasinya di cluster Kubernetes di pusat data utama yang mirip dengan berikut:

        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
    

    Tunggu hingga status replikasi siap dan responsif.

  4. Untuk memverifikasi status replikasi, gunakan:

    kubectl get replication REPLICATION_NAME