Meng-clone cluster database di satu server menggunakan cadangan lokal

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:

  1. Identifikasi informasi disk cadangan, seperti nama volume persisten dan pengendali persistent disk Compute Engine, untuk disk cadangan cluster database sumber.
  2. Pasang disk cadangan cluster database sumber ke server target.
  3. Gunakan perintah pgBackRest untuk memverifikasi bahwa cadangan sumber dapat diakses.
  4. 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.

  1. 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
      ```
  2. 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—misalnya backupdisk-al-fe8c-dbcluster-sample-0.
  3. 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
  4. 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.

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

  2. Pasang disk cadangan ke server target:

       lsblk
       mkdir -p /mnt/disks/backupdisk
       mount -o discard,defaults /dev/sdb /mnt/disks/backupdisk
  3. 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.

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

  1. Di server target, buka direktori /mnt/disks/backupdisk:

      cd /mnt/disks/backupdisk
  2. Perbarui jalur pg1-path ke direktori sementara dalam file pgbackrest.conf untuk menghindari menimpa data yang ada. Direktori data-restored dibuat secara otomatis sebagai bagian dari proses pemulihan:

      sudo sed -i 's|.*pg1-path.*|pg1-path=/mnt/disks/pgsql/data-restored|' pgbackrest.conf
  3. Perbarui jalur repo1-path ke direktori sementara dalam file pgbackrest.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.

  1. Di server target, hentikan layanan database:

    Docker

    docker stop CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
  2. Ganti nama direktori data saat ini menjadi nama lain sebagai praktik terbaik:

      mv ~/alloydb-data/data  ~/alloydb-data/data-old
  3. Ganti nama direktori sementara data-restored menjadi direktori data saat ini:

      mv ~/alloydb-data/data-restored ~/alloydb-data/data
  4. Perbarui nilai pg1-path dalam file postgresql.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'
  5. 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.

Langkah selanjutnya