Membuat snapshot disk yang konsisten dengan aplikasi Linux


Anda dapat membuat snapshot disk yang konsisten dengan aplikasi yang terpasang ke instance virtual machine (VM) Linux. Secara umum, kualitas snapshot disk Anda bergantung pada seberapa baik aplikasi Anda dapat pulih dari snapshot yang Anda buat selama beban kerja penulisan yang berat. Snapshot konsisten aplikasi merekam status data aplikasi pada saat pencadangan dengan semua transaksi aplikasi yang selesai dan semua penulisan tertunda yang dikosongkan ke disk.

Untuk membuat snapshot yang konsisten dengan aplikasi, jeda aplikasi atau proses sistem operasi yang menulis data ke disk, kosongkan buffering disk, dan sinkronkan sistem file sebelum Anda membuat snapshot. Bergantung pada aplikasi Anda, langkah-langkah ini dan langkah-langkah lainnya mungkin diperlukan untuk memastikan semua transaksi aplikasi selesai dan direkam dalam cadangan.

Untuk membuat snapshot disk yang konsisten dengan aplikasi, gunakan proses berikut:

  1. Agar dapat menyiapkan lingkungan tamu untuk konsistensi aplikasi, buat skrip shell kustom yang akan dijalankan sebelum dan setelah snapshot diambil
  2. Konfigurasikan setelan snapshot pada instance virtual machine (VM).
  3. Buat snapshot dengan opsi guest-flush diaktifkan. Opsi guest-flush memulai skrip sebelum dan sesudah snapshot Anda.

Sebelum memulai

  • Buat VM Linux.
  • Perbarui lingkungan tamu.
  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna mengelola snapshot standar, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk mengelola snapshot standar. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengelola snapshot standar:

  • Untuk membuat snapshot disk zona:
    • compute.snapshots.create dalam project
    • compute.disks.createSnapshot pada disk
  • Untuk membuat snapshot disk regional menggunakan data di disk:
    • compute.snapshots.create dalam project
    • compute.instances.useReadOnly di VM sumber
    • compute.disks.createSnapshot pada disk
  • Untuk membuat snapshot disk regional dari checkpoint pemulihan replika:
    • compute.snapshots.create dalam project
    • compute.disks.createSnapshot pada disk
  • Untuk membuat jadwal snapshot: compute.resourcePolicies.create di project atau organisasi
  • Untuk melampirkan jadwal snapshot ke disk:
    • compute.disks.addResourcePolicies pada disk
    • compute.resourcePolicies.use pada kebijakan resource
  • Untuk menghapus snapshot:
    • compute.snapshots.delete pada snapshot
    • compute.snapshots.list dalam project

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Batasan

Membuat snapshot yang konsisten dengan aplikasi di Linux memiliki batasan berikut:

  • Konsistensi aplikasi hanya dijamin oleh perilaku skrip sebelum dan sesudah snapshot kustom Anda, bukan oleh operasi snapshot itu sendiri.
  • Saat menggunakan opsi guest-flush dalam permintaan pembuatan snapshot, snapshot tidak akan dibuat jika skrip menampilkan error atau mencapai batas waktu tunggu.

Membuat skrip snapshot sebelum dan sesudah

Sebelum melanjutkan, update lingkungan tamu agar Anda menjalankan software terbaru di VM Linux Anda.

Untuk memfasilitasi konsistensi aplikasi, buat skrip shell snapshot sebelum dan sesudah untuk dijalankan sebelum dan setelah snapshot diambil. Gunakan skrip sebelum dan sesudah untuk operasi seperti:

  • Jeda aplikasi atau proses sistem operasi yang berjalan di VM yang menulis data ke disk.
  • Kosongkan buffering disk. Misalnya, MySQL memiliki pernyataan FLUSH. Gunakan alat apa pun yang tersedia untuk aplikasi Anda.
  • Sinkronkan sistem file Anda.

Contoh kode berikut menunjukkan skrip pra-snapshot. Perhatikan karakter #! di awal.

#!/bin/bash
sudo fsfreeze -f [example-disk-location]

Contoh kode berikut menunjukkan skrip snapshot sesudah. Perhatikan karakter #! di awal.

#!/bin/bash
sudo fsfreeze -u [example-disk-location]

Anda harus menyimpan skrip Anda pada VM di direktori /etc/google/snapshots/. Jalur lengkap skrip sebelum Anda harus berupa /etc/google/snapshots/pre.sh dan jalur lengkap skrip sesudah Anda harus berupa /etc/google/snapshots/post.sh.

Merujuk disk tertentu dalam skrip Anda

Argumen pertama yang diteruskan ke skrip snapshot sebelum dan sesudah Anda adalah daftar disk yang snapshot-nya Anda buat. Anda dapat menggunakan argumen ini dalam skrip untuk berbagai pemeriksaan. Misalnya, jika VM Anda memiliki beberapa disk yang terpasang, tetapi Anda hanya menentukan satu disk dalam permintaan snapshot, Anda dapat memeriksa disk yang snapshot-nya sedang dibuat.

Argumen diformat sebagai berikut:

  • Disk yang terpasang SCSI: daftar yang dipisahkan koma dari pasangan <target/lun>.
  • Disk yang terpasang NVME: daftar yang dipisahkan koma dari pasangan <nvme:namespace>.

Misalnya, boot disk yang terpasang SCSI mungkin muncul sebagai 1/0, sementara disk tambahan yang terpasang ke VM mungkin muncul sebagai 2/0.

Mengedit file konfigurasi lingkungan tamu

Konfigurasikan setelan snapshot yang konsisten dengan aplikasi Anda dengan mengupdate file konfigurasi tertentu pada VM.

  1. Buka atau buat file konfigurasi lingkungan tamu Anda.

    edit /etc/default/instance_configs.cfg
    
  2. Tambahkan bagian berikut ke file konfigurasi, lalu simpan perubahan Anda dan keluar dari editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Ganti kode berikut:

    • ENABLED: Tetapkan ke true untuk mengaktifkan fitur snapshot yang konsisten pada aplikasi. Nilai defaultnya adalah false.
    • TIMEOUT_SECONDS: Jumlah detik yang dapat dibutuhkan skrip sebelum atau sesudah snapshot untuk selesai berjalan sebelum waktu tunggu habis. Nilai bilangan bulat harus antara 0 dan 300. Nilai defaultnya adalah 60.

  3. Mulai ulang Agen Tamu untuk menggunakan setelan konfigurasi baru.

    $ sudo systemctl restart google-guest-agent.service
    

Membuat snapshot dengan guest-flush diaktifkan

Dengan menggunakan konsol Google Cloud, Google Cloud CLI, atau REST, buat snapshot dengan opsi guest-flush diaktifkan. Tindakan ini akan mulai menjalankan skrip sebelum dan sesudah snapshot sebelum dan sesudah snapshot diambil.

Konsol

  1. Buka halaman Create a Snapshot di Konsol Google Cloud.

    Buka halaman Create a Snapshot
  2. Masukkan Name snapshot.
  3. Pilih Snapshot type. Defaultnya adalah snapshot STANDARD, yang merupakan opsi terbaik untuk pencadangan jangka panjang dan pemulihan dari bencana.

    Pilih Archive snapshot untuk retensi data yang lebih hemat biaya.

  4. Opsional: Masukkan Deskripsi snapshot.
  5. Pada Source disk, pilih disk yang sudah ada yang ingin Anda buat snapshot-nya.
  6. Di bagian Location, pilih lokasi penyimpanan snapshot Anda.

    Lokasi default bawaan atau yang telah disesuaikan dalam setelan snapshot Anda akan otomatis dipilih. Secara opsional, Anda dapat mengganti setelan snapshot dan menyimpan snapshot Anda di lokasi penyimpanan kustom dengan melakukan hal berikut:

    1. Pilih jenis lokasi penyimpanan yang diinginkan untuk snapshot Anda.

      • Pilih Multi-regional untuk ketersediaan yang lebih tinggi dengan biaya lebih tinggi.
      • Pilih Snapshot regional untuk mendapatkan kontrol lebih besar atas lokasi fisik data Anda dengan biaya yang lebih rendah.
    2. Di kolom Select location, pilih region atau multi-region spesifik yang ingin Anda gunakan. Untuk menggunakan region atau multi-region yang paling dekat dengan disk sumber, pilih Berdasarkan lokasi disk.
  7. Centang opsi Enable application consistent snapshot.
  8. Klik Create untuk membuat snapshot.

gcloud

Anda dapat membuat snapshot dalam kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, gunakan perintah gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --guest-flush
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, sertakan tanda --storage-location untuk menunjukkan tempat penyimpanan snapshot Anda.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION \
        --guest-flush
    

    Ganti kode berikut:

    • SNAPSHOT_NAME: Nama untuk snapshot.
    • SOURCE_ZONE: Zona disk sumber.
    • SOURCE_DISK_NAME: Nama volume disk tempat Anda ingin membuat snapshot.
    • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
    • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

      Gunakan parameter --storage-location hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

REST

Anda dapat membuat snapshot dalam kebijakan lokasi penyimpanan yang ditentukan oleh setelan snapshot atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

  • Untuk membuat snapshot di lokasi default bawaan atau disesuaikan yang dikonfigurasi di setelan snapshot Anda, buat permintaan POST ke metode snapshots.insert:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "guestFlush": true,
    }
    
  • Atau, untuk mengganti setelan snapshot dan membuat snapshot di lokasi penyimpanan kustom, buat permintaan POST ke metode snapshots.insert dan sertakan properti storageLocations dalam permintaan Anda:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "storageLocations": [
          "STORAGE_LOCATION"
      ],
      "guestFlush": true,
    }
    

Ganti kode berikut:

  • DESTINATION_PROJECT_ID: ID project tempat Anda ingin membuat snapshot.
  • SNAPSHOT_NAME: Nama untuk snapshot.
  • SOURCE_PROJECT_ID: ID project disk sumber.
  • SOURCE_ZONE: Zona disk sumber.
  • SOURCE_DISK_NAME: Nama disk tempat Anda ingin membuat snapshot.
  • SNAPSHOT_TYPE: Jenis snapshot, baik STANDARD atau ARCHIVE. Jika jenis snapshot tidak ditentukan, snapshot STANDARD akan dibuat.
  • STORAGE_LOCATION: Opsional: Multi-region Cloud Storage atau region Cloud Storage tempat Anda ingin menyimpan snapshot. Anda hanya dapat menentukan satu lokasi penyimpanan.

    Gunakan parameter storageLocations hanya jika Anda ingin mengganti lokasi penyimpanan default yang telah ditentukan sebelumnya atau disesuaikan yang dikonfigurasi di setelan snapshot Anda.

Buat jadwal snapshot dengan guest-flush diaktifkan

Gunakan snapshot terjadwal untuk mencadangkan Persistent Disk zona dan regional serta Google Cloud Hyperdisk Anda secara rutin dan otomatis. Jika Anda ingin menjadwalkan snapshot yang konsisten dengan aplikasi untuk cadangan Anda, gunakan opsi --guest-flush saat Anda membuat jadwal snapshot sehingga skrip sebelum dan sesudah snapshot dijalankan sebelum dan sesudah setiap snapshot terjadwal.

Misalnya, setelah mengonfigurasi file konfigurasi lingkungan tamu dan membuat skrip kustom, perintah berikut akan membuat snapshot yang konsisten dengan aplikasi setiap jam:

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
  --description "MY HOURLY SNAPSHOT SCHEDULE" \
  --start-time 22:00 \
  --hourly-schedule 4 \
  --guest-flush \
  --max-retention-days SNAPSHOT_RETENTION_AGE

Untuk mempelajari lebih lanjut, lihat Tentang jadwal snapshot untuk disk.

Pemecahan masalah

Pecahkan masalah jadwal dan proses pembuatan snapshot dengan meninjau log dan memeriksa konfigurasi.

Meninjau log

  1. Buka halaman Logs Explorer di konsol Google Cloud:

    Buka Logs Explorer

  2. Tempel kueri berikut di Panel kueri log:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot" OR
    protoPayload.methodName="ScheduledSnapshots"
    
  3. Jalankan kueri dan selidiki log:

    kueri log pembuatan snapshot.

Memeriksa konfigurasi

Langkah selanjutnya