Halaman ini menunjukkan cara meng-clone cluster database di satu server menggunakan cadangan lokal.
Langkah-langkah di halaman ini mengasumsikan bahwa cluster database Kubernetes sumber dibuat di Google Kubernetes Engine, dan disk cadangan adalah persistent disk Compute Engine. Contoh ini juga mengasumsikan bahwa server tunggal AlloyDB Omni target diinstal di virtual machine (VM) Compute Engine.
Jika Anda menggunakan lingkungan lain, lihat dokumentasi masing-masing untuk mereplikasi langkah-langkah ini di lingkungan Anda.
Alur kerja berikut menjelaskan langkah-langkah cloning:
- Identifikasi informasi disk cadangan, seperti nama volume persisten dan pengendali persistent disk Compute Engine, untuk disk cadangan cluster database sumber.
- Pasang disk cadangan cluster database sumber ke server target.
- Gunakan perintah
pgBackRest
untuk memverifikasi bahwa cadangan sumber dapat diakses. - Gunakan perintah
pgBackRest
untuk memulihkan cadangan ke cluster database target.
Sebelum memulai
- Pastikan Anda memiliki akses ke disk cadangan tempat cadangan cluster database sumber Anda disimpan.
- Cluster database AlloyDB Omni target server tunggal dibuat. Untuk informasi selengkapnya tentang cara menginstal AlloyDB Omni di Kubernetes, lihat Menginstal AlloyDB Omni.
- Pastikan Anda login ke database sebagai pengguna
postgres
.
Mendapatkan informasi disk cadangan sumber
Sebagai bagian dari proses pemulihan, tentukan nama Persistent Volume Claim (PVC) disk cadangan untuk cluster database sumber Anda. PVC digunakan dalam Kubernetes untuk mengelola penyimpanan persisten untuk aplikasi.
Contoh perintah berikut membantu menentukan nama PV yang mendasari dan pengendali persistent disk Compute Engine menggunakan nama PVC disk cadangan.
Hubungkan ke cluster GKE tempat Anda membuat cluster database sumber AlloyDB Omni:
kubectl get pvc -n DB_CLUSTER_NAMESPACE | grep DB_CLUSTER_NAME | grep backupdisk
Ganti kode berikut:
DB_CLUSTER_NAMESPACE
: namespace Kubernetes untuk pencadangan ini. Nama ini harus cocok dengan namespace cluster database.DB_CLUSTER_NAME
: nama cluster database ini—misalnya,my-db-cluster
.
Berikut adalah contoh responsnya.
backupdisk-al-fe8c-dbcluster-sample-0 Bound pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a 10Gi RWO standard-rwo 5d21h ```
Gunakan nama disk cadangan dari langkah sebelumnya—misalnya,
backupdisk-al-fe8c-dbcluster-sample-0
, untuk menemukan nama PV yang mendasarinya:kubectl get pvc/PVC_NAME -n DB_CLUSTER_NAMESPACE -o jsonpath={.spec.volumeName}
Ganti kode berikut:
PVC_NAME
: nama PVC disk cadangan dari respons di langkah sebelumnya—misalnyabackupdisk-al-fe8c-dbcluster-sample-0
.
Temukan pengendali persistent disk Compute Engine yang mendasarinya:
kubectl get pv/$PV_NAME -o json | jq -r .spec.csi.volumeHandle
Ganti kode berikut:
PV_NAME
: nama PV disk cadangan dari respons di langkah sebelumnya.
Berikut adalah contoh respons:
projects/my-project/zones/us-central1-a/disks/pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3
Ekspor nama disk cadangan sebagai variabel yang digunakan di bagian berikutnya:
export BACKUP_DISK=pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3
Memasang disk cadangan ke server target
Dengan asumsi bahwa server target adalah server AlloyDB Omni yang diinstal di virtual machine Compute Engine, pasang disk cadangan ke server.
Jalankan perintah
gcloud compute instances attach-disk
untuk memasang disk:gcloud compute instances attach-disk GCE_INSTANCE_NAME \ --disk ${BACKUP_DISK} \ --zone=$GCE_ZONE
Ganti kode berikut:
GCE_INSTANCE_NAME
: nama instance tempat server target Anda diinstal di virtual machine Compute Engine.GCE_ZONE
: zona tempat instance virtual machine Compute Engine Anda berada.
Pasang disk cadangan ke server target:
lsblk mkdir -p /mnt/disks/backupdisk mount -o discard,defaults /dev/sdb /mnt/disks/backupdisk
Tambahkan pemasangan bind kustom ke file
dataplane.conf
AlloyDB Omni di direktori/var/alloydb/config
:PG_BIND_MOUNTS=/mnt/disks/backupdisk:/mnt/disks/backups:rshared
Untuk informasi selengkapnya tentang pemasangan bind di docker, lihat Pemasangan bind.
- Mulai ulang server target:
Docker
docker restart CONTAINER_NAME
Ganti CONTAINER_NAME
dengan nama penampung AlloyDB Omni baru—misalnya, my-omni-1
.
Podman
podman restart CONTAINER_NAME
Ganti CONTAINER_NAME
dengan nama penampung AlloyDB Omni baru—misalnya, my-omni-1
.
Memperbarui file konfigurasi pgBackRest
Perbarui file pgBackRest
yang ada di direktori disk cadangan dengan jalur repositori baru.
Di server target, buka direktori
/mnt/disks/backupdisk
:cd /mnt/disks/backupdisk
Perbarui jalur
pg1-path
ke direktori sementara dalam filepgbackrest.conf
untuk menghindari menimpa data yang ada. Direktoridata-restored
dibuat secara otomatis sebagai bagian dari proses pemulihan:sudo sed -i 's|.*pg1-path.*|pg1-path=/mnt/disks/pgsql/data-restored|' pgbackrest.conf
Perbarui jalur
repo1-path
ke direktori sementara dalam filepgbackrest.conf
:sudo sed -i 's|.*repo1-path.*|repo1-path=/mnt/disks/backups/repo|' conf.d/repo1-local-backupplan.conf
Memverifikasi cadangan sumber di cluster database target
Login ke server target, dan jalankan perintah pgBackRest
untuk memverifikasi bahwa cadangan cluster database sumber dapat diakses di server target:
Docker
sudo docker exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 info
Podman
sudo podman exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 info
Berikut adalah contoh respons:
stanza: db
status: ok
cipher: none
db (current)
wal archive min/max (15): 000000010000000000000002/00000001000000000000000D
full backup: 20240213-231400F
timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00
wal start/stop: 000000010000000000000003 / 000000010000000000000003
database size: 38.7MB, database backup size: 38.7MB
repo1: backup set size: 4.6MB, backup size: 4.6MB
incr backup: 20240213-231400F_20240214-000001I
timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00
wal start/stop: 00000001000000000000000D / 00000001000000000000000D
database size: 38.7MB, database backup size: 488.3KB
repo1: backup set size: 4.6MB, backup size: 84.2KB
backup reference list: 20240213-231400F
Stempel waktu dalam respons digunakan untuk memulihkan cadangan lengkap atau memulihkan dari titik waktu dari periode pemulihan.
Memulihkan cadangan di server target
Setelah Anda mengidentifikasi cadangan atau titik waktu yang ingin Anda pulihkan, jalankan perintah pgBackRest
di server target. Untuk informasi selengkapnya
tentang perintah ini, lihat Perintah
Pemulihan.
Berikut adalah beberapa contoh perintah pemulihan pgBackRest
:
Memulihkan dari cadangan
pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
Memulihkan dari titik waktu
pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info
Menyalin data ke server target
Setelah perintah pemulihan berhasil diselesaikan, Anda dapat menyalin data dari direktori sementara data-restored
ke direktori data AlloyDB saat ini.
Di server target, hentikan layanan database:
Docker
docker stop CONTAINER_NAME
Podman
podman stop CONTAINER_NAME
Ganti nama direktori data saat ini menjadi nama lain sebagai praktik terbaik:
mv ~/alloydb-data/data ~/alloydb-data/data-old
Ganti nama direktori sementara
data-restored
menjadi direktori data saat ini:mv ~/alloydb-data/data-restored ~/alloydb-data/data
Perbarui nilai
pg1-path
dalam filepostgresql.auto.conf
untuk memuat data yang dipulihkan:vim ~/alloydb-data/data/postgresql.auto.conf # Verify postgresql.auto.conf. # Do not edit this file manually! # It will be overwritten by the ALTER SYSTEM command. # Recovery settings generated by pgBackRest restore on 2024-03-13 20:47:11 restore_command = 'pgbackrest --config-path=/mnt/disks/pgsql --pg1-path=/mnt/disks/pgsql/data --repo=1 --stanza=db archive-get %f "%p"' recovery_target = 'immediate' recovery_target_action = 'promote' recovery_target_timeline = 'current'
Di server target, mulai layanan database:
Docker
docker start CONTAINER_NAME
Podman
podman start CONTAINER_NAME
Setelah layanan database dimulai, Anda dapat terhubung ke instance utama dan menjalankan kueri untuk memverifikasi bahwa data dipulihkan dari pencadangan. Untuk informasi selengkapnya, lihat Menghubungkan ke AlloyDB Omni di satu server.