Halaman ini menjelaskan cara menggunakan replikasi lintas pusat data dengan membuat dan menggunakan cluster database sekunder di Kubernetes. Untuk ringkasan konseptual replikasi lintas pusat data, lihat [Tentang replikasi lintas pusat data](/alloydb/omni/containers/16.3.0/docs/cross-data-center-replication/about-cross-data-center-replication). ## Sebelum memulai {: #before-you-begin } - Pastikan Anda memiliki konektivitas jaringan yang andal dan latensi rendah antara pusat data utama dan sekunder, yang sangat penting agar replikasi lintas pusat data dapat berfungsi secara efektif. - [Instal](/alloydb/omni/containers/16.3.0/docs/deploy-kubernetes) operator AlloyDB Omni versi terbaru untuk men-deploy AlloyDB Omni di cluster Kubernetes di pusat data utama dan cluster Kubernetes di pusat data sekunder. Replikasi lintas pusat data didukung di operator AlloyDB Omni versi 1.5.0 atau yang lebih tinggi. - [Buat cluster database AlloyDB Omni](/alloydb/omni/containers/16.3.0/docs/deploy-kubernetes#create) di cluster Kubernetes di pusat data utama. - Pastikan server database utama dan standby di cluster database utama Anda memiliki ruang Write-Ahead Logging (WAL) yang memadai yang dapat mengakomodasi file WAL yang diperlukan untuk replikasi ke cluster sekunder. Data apa pun yang belum direplikasi ke cluster sekunder disimpan di cluster utama sebagai file WAL, sehingga bergantung pada kecepatan koneksi antara cluster utama dan sekunder, Anda mungkin memerlukan ruang disk tambahan untuk tujuan ini. ## Membuat cluster database sekunder {: #secondary-db-cluster-instance } Untuk membuat cluster database sekunder AlloyDB Omni dan mengaktifkan replikasi dari cluster database utama, ikuti langkah-langkah berikut:
Pastikan konektivitas eksternal diaktifkan di cluster database utama AlloyDB Omni. Jika konektivitas eksternal tidak diaktifkan, tambahkan hal berikut ke bagian spec manifes cluster database:
... spec: ... allowExternalIncomingTraffic: true
Untuk menggunakan replikasi lintas pusat data dengan cluster database utama yang mengaktifkan ketersediaan tinggi (HA), pastikan kolom
replayReplicationSlotsOnStandbysdiaktifkan di cluster database utama:... spec: ... availability: ... replayReplicationSlotsOnStandbys: true
Mengaktifkan kolom ini, bersama dengan
logReplicationSlotsyang dijelaskan pada langkah berikut, akan menyinkronkan slot replikasi yang digunakan oleh cluster database sekunder ke semua standby HA. Konfigurasi ini membantu HA utama yang baru mempertahankan file Write-Ahead Logging (WAL) yang belum digunakan oleh cluster database sekunder setelah failover atau peralihan, sehingga memungkinkan HA utama melanjutkan replikasi tanpa gangguan.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 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
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 adalahalloydbreplica.REPLICATION_NAME: Nama replikasi—misalnya,replication-1.LOG_REPLICATION_SLOT: Data slot replikasi log ke file WAL. Untuk mengaktifkan opsi ini, tetapkan nilainya ketrue. Nilai defaultnya adalahfalse.
Sebaiknya aktifkan opsi
logReplicationSlotdengan cluster database utama yang mengaktifkan ketersediaan tinggi (HA) untuk memastikan replikasi dapat terus berfungsi setelah failover atau peralihan.Tunggu hingga status replikasi siap.
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
Output contoh terlihat mirip dengan berikut:
{ "host": "35.230.32.36", "password": { "name": "ha-rep-pw-dbc-1" }, "port": 5432, "replicationSlotName": "dbc_1_replication_1", "username": "alloydbreplica" }- Catat outputnya karena Anda memerlukannya untuk mengaktifkan replikasi di cluster database sekunder pada langkah berikut.
- Buat cluster AlloyDB Omni di cluster Kubernetes di pusat data sekunder dengan konfigurasi yang identik dengan cluster database utama.
- Pastikan konektivitas eksternal diaktifkan di cluster database sekunder AlloyDB Omni
Jika konektivitas eksternal tidak diaktifkan, tambahkan hal berikut ke bagian spec manifesnya:
... spec: ... allowExternalIncomingTraffic: true
- 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 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
Ganti kode berikut:
SECONDARY_DB_CLUSTER_NAME: Nama cluster database sekunder—misalnya,dbc-2.ENCODED_PASSWORD: Sandi untuk pengguna database yang akan digunakan untuk replikasi cluster database utama, yang dienkode sebagai string base64—misalnya,Q2hhbmdlTWUxMjM= for ChangeMe123. Nilai defaultnya adalahalloydbreplica.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 oleh database sekunder untuk replikasi.PRIMARY_REPLICATION_SLOT: nama slot replikasi di cluster database utama dari output di langkah 3 yang dapat digunakan oleh 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:
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 sehat.
Mempromosikan cluster database sekunder
Sebelum mempromosikan cluster database sekunder, lakukan langkah-langkah berikut untuk memverifikasi bahwa cluster database sekunder telah menerapkan semua transaksi yang diterima dari cluster database utama:
Periksa status replikasi cluster database sekunder, untuk memastikan bahwa statusnya siap dan sehat.
kubectl get replication SECONDARY_REPLICATION_NAME
Hentikan semua penulisan ke cluster database utama. Jalankan kueri berikut di cluster database utama untuk memeriksa latensi replikasi database sekunder. Pastikan hasilnya menunjukkan latensi minimal.
Nilai latensi 0 adalah yang ideal. Jika latensi lebih besar dari 0, Anda masih dapat mempromosikan cluster database sekunder, dengan risiko kehilangan beberapa transaksi terbaru yang sudah di-commit di cluster database utama.
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 manifes replikasi cluster database sekunder ke promote, dan terapkan di cluster Kubernetes di pusat data sekunder.
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
Melakukan peralihan
Sebelum melakukan peralihan, pastikan cluster database utama dan sekunder yang berada di kedua pusat data sedang online dan cluster database dalam keadaan sehat.
Untuk memastikan konsistensi data cluster database utama dan sekunder selama peralihan, lakukan langkah-langkah berikut untuk memverifikasi bahwa cluster database sekunder telah menerapkan semua transaksi yang diterima dari cluster database utama:
Periksa status replikasi cluster database sekunder, untuk memastikan bahwa statusnya siap dan sehat.
kubectl get replication SECONDARY_REPLICATION_NAME
Hentikan semua penulisan ke cluster database utama. Jalankan kueri berikut di cluster database utama untuk memeriksa latensi replikasi database sekunder. Pastikan hasilnya menunjukkan nilai latensi
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 peralihan, selesaikan langkah-langkah berikut:
-
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 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
Tunggu hingga status replikasi siap.
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
Output contoh terlihat mirip dengan berikut:
{ "host": "34.23.207.137", "password": { "name": "ha-rep-pw-dbc-2" }, "port": 5432, "replicationSlotName": "dbc_2_replication_2", "username": "alloydbreplica" }-
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 menjadi siap dan sehat.
Untuk memverifikasi status replikasi, gunakan:
kubectl get replication REPLICATION_NAME