Membuat snapshot disk yang konsisten dengan aplikasi Linux


Anda dapat membuat snapshot konsisten aplikasi dari disk yang terpasang pada 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 tulis yang berat. Snapshot Konsisten aplikasi merekam status data aplikasi pada saat pencadangan dengan semua transaksi aplikasi selesai dan semua penulisan yang tertunda di-flush ke disk.

Untuk membuat snapshot yang konsisten dengan aplikasi, jeda aplikasi atau proses sistem operasi yang menulis data ke disk, hapus buffer 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 yang konsisten dari disk Anda, 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. Konfigurasi setelan snapshot pada instance virtual machine (VM) Anda.
  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.
  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    gcloud

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. Menetapkan region dan zona default.

    REST

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

      Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

Peran dan izin yang diperlukan

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

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

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

Izin yang diperlukan

Izin berikut diperlukan untuk mengelola snapshot standar:

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

Anda mung juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaanlainnya.

Batasan

Membuat snapshot yang konsisten dari 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.

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 menampilkan skrip snapshot postingan. 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 pra dan pasca Anda adalah daftar disk tempat Anda membuat snapshot. 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 mana yang dibuat untuk snapshot tersebut.

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 di SCSI mungkin muncul sebagai 1/0, sedangkan 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.

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

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Ganti kode berikut:

    • ENABLED: Tetapkan ke true untuk mengaktifkan fitur snapshot konsisten aplikasi. Nilai defaultnya adalah false.
    • TIMEOUT_SECONDS: Jumlah detik yang dapat diperlukan oleh skrip snapshot sebelum atau sesudah untuk menyelesaikan operasi sebelum waktu 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

Menggunakan Google Cloud Console, Google Cloud CLI, atau REST, buat snapshot dengan opsi guest-flush yang 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 (disaster recovery).

    Pilih Archive snapshot untuk retensi data yang lebih hemat biaya.

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

    Lokasi default yang telah ditentukan sebelumnya atau disesuaikan yang ditentukan di 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 lebih tinggi dengan biaya lebih tinggi.
      • Pilih Snapshot regional untuk mendapatkan kontrol lebih besar atas lokasi fisik data dengan biaya yang lebih rendah.
    2. Di kolom Select location, pilih region atau multi-region tertentu yang ingin Anda gunakan. Untuk menggunakan region atau multi-region yang terdekat dengan disk sumber, pilih Based on disk's location.
  7. Centang opsi Aktifkan snapshot konsisten aplikasi.
  8. Klik Create untuk membuat snapshot.

gcloud

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

  • Untuk membuat snapshot di lokasi default yang telah ditentukan sebelumnya 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 flag --storage-location untuk menunjukkan tempat untuk menyimpan 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, STANDARD atau Arsip. 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 Anda atau menggunakan lokasi penyimpanan alternatif pilihan Anda. Untuk informasi selengkapnya, lihat Memilih lokasi penyimpanan snapshot.

  • Untuk membuat snapshot di lokasi default yang telah ditentukan sebelumnya 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 volume disk tempat Anda ingin membuat snapshot.
  • SNAPSHOT_TYPE: Jenis snapshot, STANDARD atau Arsip. 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 secara rutin dan otomatis mencadangkan Persistent Disk zona dan regional Anda serta Hyperdisk Google Cloud. Jika Anda ingin menjadwalkan snapshot konsisten aplikasi untuk cadangan Anda, gunakan opsi --guest-flush saat membuat jadwal snapshot sehingga skrip snapshot sebelum dan sesudah dieksekusi sebelum dan sesudah setiap snapshot terjadwal.

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

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

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

Pemecahan masalah

Gunakan langkah-langkah berikut untuk memecahkan masalah proses pembuatan snapshot.

  • Tinjau log dari peristiwa pembuatan snapshot Anda:

    1. Di konsol Google Cloud, buka halaman Google Cloud Observability Logging > Logs:
      Buka Logs Explorer
    2. Buka Logs Explorer di navigasi sebelah kiri.
    3. Di daftar Filter by label or text search, pilih Convert to advanced filter.

    Ubah ke filter lanjutan.

    Ganti kolom filter dengan teks berikut:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • Jika skrip tidak ditemukan, snapshot tidak akan dibuat. Pastikan Anda telah mengikuti langkah-langkah di Membuat skrip sebelum dan sesudah snapshot.

  • Jika terjadi error skrip atau waktu tunggu, tidak ada snapshot yang dibuat. Tinjau Menyiapkan snapshot yang konsisten. Perhatikan bahwa periode waktu tunggu maksimum yang dapat Anda konfigurasi di setelan adalah 300 detik. Coba ulangi seluruh proses menggunakan skrip contoh.

  • Disk harus terpasang ke VM untuk mengambil snapshot disk dengan guest-flush diaktifkan. Untuk mempelajari cara membuat VM Linux dan memasang disk, lihat Membuat VM.

Langkah selanjutnya