Mencadangkan dan memulihkan di Kubernetes

Halaman ini menunjukkan cara mencadangkan dan memulihkan data AlloyDB Omni menggunakan Operator Kubernetes AlloyDB Omni. Hal ini memerlukan pengetahuan dasar tentang cara mengupdate cluster Kubernetes menggunakan file manifes dan alat command line kubectl. Untuk informasi selengkapnya tentang cara menginstal dan menjalankan AlloyDB Omni di cluster Kubernetes, lihat Menginstal AlloyDB di Kubernetes.

Untuk mengaktifkan pencadangan dan pemulihan berkelanjutan AlloyDB Omni, Anda harus membuat rencana cadangan untuk setiap cluster database. Pencadangan dilakukan berdasarkan jadwal pencadangan yang ditentukan dalam resource backupPlan. Jika tidak ada jadwal pencadangan yang ditentukan dalam rencana pencadangan, pencadangan berkelanjutan akan dilakukan setiap hari secara default. Anda dapat memulihkan atau meng-clone pencadangan dari stempel waktu apa pun dalam periode pemulihan dengan tingkat perincian detik.

Untuk informasi tentang cara mencadangkan dan memulihkan data AlloyDB Omni di deployment non-Kubernetes, lihat Menginstal dan mengonfigurasi Barman.

Mengaktifkan dan menjadwalkan pencadangan

Pencadangan berkelanjutan diaktifkan saat Anda membuat resource rencana cadangan untuk cluster database. Anda harus membuat resource backupPlan untuk setiap cluster database agar pencadangan berkelanjutan untuk cluster tersebut dapat diaktifkan. Resource rencana pencadangan ini menentukan parameter berikut:

  • Lokasi penyimpanan cadangan oleh Operator AlloyDB Omni. Ini dapat berupa lokal untuk cluster Kubernetes Anda, atau untuk bucket Cloud Storage.

  • Opsi untuk menetapkan beberapa jadwal pencadangan yang otomatis membuat pencadangan full, incremental, dan differential. Anda dapat menjeda jadwal ini kapan saja, termasuk saat pertama kali menentukan rencana pencadangan. Jika rencana cadangan dijeda, pencadangan terjadwal tidak akan dibuat, tetapi Anda masih dapat menggunakannya untuk membuat cadangan secara manual.

    Jika tidak ada jadwal pencadangan yang ditentukan, default-nya adalah "0 0 * * *", yang melakukan satu pencadangan penuh harian pada tengah malam, waktu lokal.

  • Periode retensi untuk cadangan yang disimpan. Periode ini dapat berkisar dari satu hari hingga 90 hari. Nilai defaultnya adalah 14.

Cluster database Anda dapat memiliki beberapa rencana cadangan, yang masing-masing memiliki nama dan konfigurasi sendiri. Jika Anda membuat beberapa resource backupPlan dengan jadwal pencadangan yang berbeda untuk cluster database, Anda harus menentukan lokasi cadangan yang unik untuk setiap resource cadangan.

Membuat rencana untuk menyimpan cadangan secara lokal

Untuk mengaktifkan pencadangan yang disimpan secara lokal, terapkan manifes berikut:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: BackupPlan
    metadata:
      name: BACKUP_PLAN_NAME
      namespace: NAMESPACE
    spec:
      dbclusterRef: DB_CLUSTER_NAME
      backupSchedules:
        full: "FULL_CRON_SCHEDULE"
        differential: "DIFF_CRON_SCHEDULE"
        incremental: "INCR_CRON_SCHEDULE"
      backupRetainDays: RETENTION_DAYS
      paused: PAUSED_BOOLEAN

Ganti kode berikut:

  • BACKUP_PLAN_NAME: nama untuk resource rencana cadangan ini—misalnya, backup-plan-1.

  • NAMESPACE: namespace Kubernetes untuk rencana cadangan ini. Nama ini harus cocok dengan namespace cluster database.

  • DB_CLUSTER_NAME: nama cluster database, yang Anda tetapkan saat membuatnya.

  • FULL_CRON_SCHEDULE: jadwal pencadangan untuk membuat cadangan penuh, yang berisi semua data, yang dinyatakan dalam format cron. Misalnya, tetapkan ke "0 0 * * 0" untuk melakukan pencadangan penuh pada pukul 00.00 setiap hari Minggu.

  • DIFF_CRON_SCHEDULE: jadwal pencadangan untuk membuat cadangan yang awalnya merupakan cadangan penuh. Pencadangan berikutnya bersifat diferensial, berdasarkan perubahan intervensi pada data, yang dinyatakan dalam format cron. Misalnya, tetapkan ke "0 22 * * 3" untuk membuat cadangan diferensial pada pukul 22.00 setiap hari Rabu.

  • INCR_CRON_SCHEDULE: jadwal pencadangan untuk membuat cadangan yang menyertakan data yang telah berubah dari pencadangan penuh, diferensial, atau inkremental terakhir. Nilai ini dinyatakan dalam format cron. Misalnya, tetapkan ke "0 21 * * *" untuk membuat cadangan inkremental pada pukul 21.00 setiap hari.

  • RETENTION_DAYS: jumlah hari yang diperlukan Operator AlloyDB Omni untuk menyimpan cadangan ini. Nilai ini harus berupa bilangan bulat antara 1 dan 90. Nilai defaultnya adalah 14.

  • PAUSED_BOOLEAN: menentukan apakah rencana cadangan dijeda atau tidak. Berikan salah satu nilai berikut:

    • true: pencadangan dijeda dan tidak ada pencadangan terjadwal yang dibuat.

    • false: Operator AlloyDB Omni membuat cadangan sesuai dengan jadwal yang ditentukan oleh cronSchedule. Ini adalah nilai default, jika tidak ditetapkan secara eksplisit ke true.

    Nilai defaultnya adalah false.

Membuat rencana yang menyimpan cadangan di Cloud Storage

Untuk mengaktifkan pencadangan yang disimpan di Cloud Storage, ikuti langkah-langkah berikut:

  1. Membuat bucket Cloud Storage. Catat nama yang Anda tetapkan ke bucket ini; Anda memerlukannya di langkah berikutnya.

  2. Buat akun layanan untuk menambahkan pencadangan ke bucket.

  3. Berikan peran Identity and Access Management storage.objectAdmin ke akun layanan.

  4. Buat kunci untuk akun layanan. Tindakan ini akan mendownload kunci pribadi ke lingkungan lokal Anda.

  5. Ganti nama file kunci yang didownload menjadi key.json.

  6. Buat secret Kubernetes yang berisi kunci pribadi:

    kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE

    Ganti kode berikut:

    • SECRET_NAME: nama secret Kubernetes yang Anda buat—misalnya, gcs-key.

    • KEY_PATH: jalur sistem file lokal ke file key.json yang Anda download di langkah sebelumnya.

    • NAMESPACE: namespace cluster database.

  7. Terapkan manifes berikut:

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: BackupPlan
      metadata:
        name: BACKUP_PLAN_NAME
        namespace: NAMESPACE
      spec:
        dbclusterRef: DB_CLUSTER_NAME
        backupSchedules:
          full: "FULL_CRON_SCHEDULE"
          differential: "DIFF_CRON_SCHEDULE"
          incremental: "INCR_CRON_SCHEDULE"
        backupRetainDays: RETENTION_DAYS
        paused: PAUSED_BOOLEAN
        backupLocation:
          type: GCS
          gcsOptions:
            bucket: BUCKET_URL
            key: BACKUP_PATH
            secretRef:
              name: SECRET_NAME
              namespace: NAMESPACE
    

    Ganti kode berikut:

    • BACKUP_PLAN_NAME: nama untuk resource rencana cadangan ini—misalnya, backup-plan-1.

    • NAMESPACE: namespace Kubernetes untuk rencana cadangan ini. Nama ini harus cocok dengan namespace cluster database.

    • DB_CLUSTER_NAME: nama cluster database, yang Anda tetapkan saat membuatnya.

    • FULL_CRON_SCHEDULE: jadwal pencadangan untuk membuat cadangan penuh, yang berisi semua data, yang dinyatakan dalam format cron. Misalnya, tetapkan ke "0 0 * * 0" untuk melakukan pencadangan penuh pada pukul 00.00 setiap hari Minggu.

    • DIFF_CRON_SCHEDULE: jadwal pencadangan untuk membuat cadangan yang awalnya merupakan cadangan penuh. Pencadangan berikutnya bersifat diferensial, berdasarkan perubahan intervensi pada data, yang dinyatakan dalam format cron. Misalnya, tetapkan ke "0 22 * * 3" untuk membuat cadangan diferensial pada pukul 22.00 setiap hari Rabu.

    • INCR_CRON_SCHEDULE: jadwal pencadangan untuk membuat cadangan yang menyertakan data yang telah berubah dari pencadangan penuh, diferensial, atau inkremental terakhir. Nilai ini dinyatakan dalam format cron. Misalnya, tetapkan ke "0 21 * * *" untuk membuat cadangan inkremental pada pukul 21.00 setiap hari.

    • RETENTION_DAYS: jumlah hari yang diperlukan Operator AlloyDB Omni untuk menyimpan cadangan ini. Nilai ini harus berupa bilangan bulat antara 1 dan 90. Nilai defaultnya adalah 14.

    • PAUSED_BOOLEAN: menentukan apakah rencana cadangan dijeda atau tidak. Berikan salah satu nilai berikut:

      • true: pencadangan dijeda dan tidak ada pencadangan terjadwal yang dibuat.

      • false: Operator AlloyDB Omni membuat cadangan sesuai dengan jadwal yang ditentukan oleh cronSchedule. Ini adalah nilai default, jika tidak ditetapkan secara eksplisit ke true.

      Nilai defaultnya adalah false.

    • BUCKET_URL: nama bucket Cloud Storage yang Anda buat di langkah sebelumnya. Ini bukan URL lengkap ke bucket; jangan beri awalan nama bucket dengan gs://.

    • BACKUP_PATH: jalur direktori tempat Operator AlloyDB Omni menulis cadangan, dalam bucket Cloud Storage. Jalur harus bersifat absolut, dimulai dengan /.

    • SECRET_NAME: nama yang Anda pilih untuk secret Kubernetes yang Anda buat di langkah sebelumnya.

Membuat cadangan secara manual

Anda dapat membuat resource cadangan secara manual kapan saja, menggunakan rencana cadangan yang telah Anda terapkan ke cluster database. Operator AlloyDB Omni menerapkan lokasi penyimpanan dan periode retensi rencana pencadangan yang dipilih ke pencadangan manual baru.

Untuk membuat cadangan secara manual, terapkan manifes berikut:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
  name: BACKUP_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME
  backupPlanRef: BACKUP_PLAN_NAME
  manual: true
  physicalBackupSpec:
    backupType: BACKUP_TYPE

Ganti kode berikut:

  • BACKUP_NAME: nama untuk pencadangan ini—misalnya, backup-1.

  • NAMESPACE: namespace Kubernetes dari pemulihan ini. Nama tersebut harus cocok dengan namespace cluster database.

  • BACKUP_PLAN_NAME: nama resource rencana cadangan yang dimiliki cadangan ini. Nama ini harus cocok dengan nama yang Anda pilih saat membuat rencana pencadangan.

  • DB_CLUSTER_NAME: nama cluster database, yang Anda tetapkan saat membuatnya.

  • BACKUP_TYPE: menentukan jenis pencadangan manual yang ingin Anda buat. Pilih dari salah satu nilai berikut:

    • full: Membuat pencadangan penuh, yang berisi semua data.

    • diff: Membuat cadangan diferensial yang bergantung pada pencadangan penuh terakhir. Cadangan berikutnya bersifat diferensial, berdasarkan perubahan yang terjadi pada data.

    • incr: Membuat cadangan inkremental yang bergantung pada cadangan penuh atau diferensial sebelumnya untuk menyertakan data yang telah berubah dari cadangan penuh atau diferensial terakhir.

Memantau dan mencantumkan pencadangan

Rencana cadangan dan cadangan Anda adalah semua resource di cluster Kubernetes. Untuk melihat informasi tentangnya, gunakan perintah kubectl get.

Melihat ringkasan rencana cadangan

Untuk melihat informasi tentang rencana pencadangan cluster database Anda, jalankan perintah berikut:

kubectl get backupplan.alloydbomni.dbadmin.goog -n NAMESPACE

Ganti NAMESPACE dengan namespace cluster database.

Outputnya akan terlihat seperti berikut:

NAME               PHASE   LASTBACKUPTIME         NEXTBACKUPTIME
backup-plan-prod   Ready   2023-10-26T17:26:43Z   2023-10-27T00:00:00Z

Melihat Daftar Cadangan

Untuk melihat daftar cadangan yang tersedia untuk cluster database Anda, jalankan perintah berikut:

kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE

Ganti NAMESPACE dengan namespace cluster database.

Outputnya akan terlihat seperti berikut:

NAME                              PHASE       COMPLETETIME
backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
manual-backup-2                   InProgress

Setiap baris dalam tabel output mewakili resource cadangan, dengan atribut berikut:

  • Nama pencadangan.
  • Status pencadangan, dengan Succeeded menandai pencadangan yang siap untuk dipulihkan.
  • Stempel waktu pembuatan cadangan.

Memulihkan dari cadangan

AlloyDB memungkinkan Anda memulihkan dari cadangan individual atau meng-clone cluster menggunakan cadangan dari titik waktu tertentu.

Memulihkan dari cadangan yang diberi nama

Untuk memulihkan dari cadangan, yang akan mengganti data di cluster database Anda dengan data dalam cadangan, ikuti langkah-langkah berikut.

  1. Mencantumkan semua cadangan yang fasenya Succeeded.

    kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE | grep Succeeded

    Ganti NAMESPACE dengan namespace cluster database.

    Jika ada minimal satu kandidat cadangan yang bagus, output-nya akan mirip dengan berikut:

    backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
    manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
    
  2. Pilih salah satu cadangan yang tercantum di langkah sebelumnya sebagai cadangan yang akan dipulihkan. Catat namanya, yang akan Anda gunakan di langkah berikut.

  3. Terapkan manifes berikut:

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: Restore
      metadata:
        name: RESTORE_NAME
        namespace: NAMESPACE
      spec:
        sourceDBCluster: DB_CLUSTER_NAME
        backup: BACKUP_NAME
    

    Ganti kode berikut:

    • RESTORE_NAME: nama yang akan digunakan dengan resource pemulihan data yang dibuat manifes ini—misalnya, restore-1.

    • DB_CLUSTER_NAME: nama cluster database, yang Anda tetapkan saat membuatnya.

    • BACKUP_NAME: nama cadangan yang Anda pilih di langkah sebelumnya.

Meng-clone cluster dari titik waktu

AlloyDB Omni Operator memungkinkan Anda meng-clone data cluster dari titik mana saja dalam periode pemulihan. Durasi periode pemulihan ditentukan langsung oleh periode retensi.

Misalnya, jika periode retensi ditetapkan ke 14 hari, Anda tidak dapat memulihkan data yang lebih lama dari 14 hari. Anda dapat memulihkan ke titik waktu mana pun dalam periode pemulihan. Operator AlloyDB Omni mempertahankan cadangan dan log selama satu hari lebih lama dari nilai yang ditentukan.

  1. Pantau periode pemulihan untuk mengidentifikasi titik pemulihan:

    kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
    

    Berikut adalah contoh respons:

    recoveryWindow:
    begin: "2024-01-31T02:54:35Z"
    

    Nilai stempel waktu dalam format stempel waktu RFC 3339 digunakan dalam resource pemulihan.

  2. Buat dan terapkan manifes resource pemulihan berikut:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Restore
    metadata:
      name: RESTORE_NAME
      namespace: NAMESPACE
    spec:
      sourceDBCluster: DB_CLUSTER_NAME
      pointInTime: "DATE_AND_TIME_STAMP"
      clonedDBClusterConfig:
        dbclusterName: NEW_DB_CLUSTER_NAME
    

    Ganti kode berikut:

    • RESTORE_NAME: nama yang akan digunakan dengan resource pemulihan data yang dibuat manifes ini—misalnya, restore-1.

    • DB_CLUSTER_NAME: nama cluster database, yang Anda tetapkan saat membuatnya.

    • DATE_AND_TIME_STAMP: stempel waktu RFC 3339 pada tingkat perincian menit dari pencadangan berkelanjutan yang ingin Anda pulihkan—misalnya, 2024-03-05T15:32:10Z.

    • NEW_DB_CLUSTER_NAME: nama cluster database baru.

Melihat status pemulihan

  1. Lihat progres operasi pemulihan:

    kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE

    Ganti NAMESPACE dengan namespace cluster database.

    Untuk menjalankan perintah secara terus-menerus, tambahkan flag -Aw.

    Outputnya akan terlihat seperti berikut:

    NAME        PHASE               COMPLETETIME   RESTOREDPOINTINTIME
    restore-1   RestoreInProgress
    

    Jika nilai kolom PHASE dalam tabel output membaca ProvisionSucceeded, pemulihan akan selesai.

  2. Lihat progres cluster database yang dipulihkan atau di-clone yang sedang online:

    kubectl get dbclusters -A -n NAMESPACE

    Ganti NAMESPACE dengan namespace cluster database.

    Untuk menjalankan perintah secara terus-menerus, tambahkan flag -Aw.

    Outputnya akan terlihat seperti berikut:

    NAMESPACE   NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    default     db-cluster-1       10.128.0.55       Ready          DBClusterReady
    

    Jika nilai kolom DBCLUSTERPHASE dalam tabel output membaca DBClusterReady, cluster database yang dipulihkan atau di-clone siap digunakan.

Menghapus cadangan

Biasanya, Anda tidak perlu menghapus cadangan secara manual. Operator AlloDB Omni akan otomatis menghapus cadangan yang lebih lama dari periode retensi yang Anda tentukan saat membuat rencana cadangan.

Jika Anda ingin menghapus cadangan secara manual, cadangan tersebut harus memenuhi persyaratan berikut:

  • Cadangan ini bukan satu-satunya cadangan yang disimpan untuk rencana cadangannya. Operator AlloDB Omni memerlukan setidaknya satu cadangan per rencana cadangan.

  • Cadangan tidak memiliki cadangan lain yang bergantung padanya. Misalnya, pencadangan penuh dengan pencadangan diferensial atau inkremental yang bergantung padanya; atau pencadangan inkremental dengan pencadangan diferensial yang bergantung padanya.

Untuk menghapus cadangan, jalankan perintah berikut:

kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE

Ganti kode berikut:

  • BACKUP_NAME: nama cadangan yang akan dihapus.

  • NAMESPACE: namespace cluster database.

Mengubah ukuran disk cadangan

Untuk mengubah ukuran disk lokal yang menyimpan cadangan Anda di cluster Kubernetes, selesaikan langkah-langkah berikut:

  1. Perbarui kolom resources.disks manifes DBCluster sebagai berikut:

    spec:
      primarySpec:
        resources:
          disks:
            - name: BACKUP_DISK
              size: 10Gi
    

    Ganti BACKUP_DISK dengan nama disk yang menyimpan cadangan Anda.

  2. Terapkan manifes untuk menerapkan update.

    Operator AlloyDB Omni akan segera menerapkan spesifikasi yang diperbarui ke DBCluster Anda.

Batasan berikut berlaku untuk mengubah disk cadangan cluster database yang sedang berjalan:

  • Anda hanya dapat meningkatkan ukuran disk jika storageClass yang ditentukan mendukung perluasan volume.
  • Anda tidak dapat mengurangi ukuran disk.

Memperbarui rencana cadangan

Setiap rencana pencadangan adalah resource Kubernetes. Untuk mengupdate konfigurasinya, lakukan salah satu langkah berikut:

  • Edit dan terapkan ulang file manifes rencana cadangan.

  • Gunakan perintah kubectl patch.

Misalnya, untuk menjeda rencana pencadangan yang sedang berjalan, ubah atribut paused manifesnya menjadi true, lalu terapkan kembali manifes.

Menghapus rencana cadangan

Untuk menghapus rencana cadangan dan menghapus semua resource cadangannya, jalankan perintah berikut:

kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE

Ganti kode berikut:

  • BACKUP_PLAN_NAME: nama rencana cadangan yang akan dihapus.

  • NAMESPACE: namespace cluster database.

Untuk menjeda rencana pencadangan tanpa menghapusnya, tetapkan atribut paused dari resource rencana pencadangan ke true. Rencana pencadangan yang dijeda akan terus menyimpan cadangan dan memungkinkan pembuatan cadangan manual.