Cadangan menjalankan KVM qcow2 VPS

9

Saya ingin metode yang kuat untuk mengambil cadangan KVM VPS dari file qcow2, ketika sedang berjalan. Setelah lama mencari saya menemukan bahwa kita dapat menggunakan rsync untuk live backup. Saya menggunakan perintah berikut untuk rsync:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

Itu bekerja dengan baik. Tapi saya khawatir itu dapat merusak cadangan gambar qcow2 jika cadangan diambil saat VPS sedang diubah karena operasi tulis dan hapus (Seperti menginstal perangkat lunak baru atau memperbarui).

Oleh karena itu mengambil cadangan dari snapshot VPS langsung sepertinya pilihan yang lebih menarik.

Saya menggunakan perintah berikut untuk mengambil cadangan menjalankan VPS:

1. Buat Snapshot:

qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2

2.Konversi snapshot dalam format gambar mentah (.img):

qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Untuk mengembalikan VPS:

3.Convert gambar mentah dalam gambar qcow2:

qemu-img convert -O qcow2 /backup/backup.img base.qcow2

Kemudian kita dapat memulai VPS dengan virsh create base.xmlperintah.

Meskipun metode ini juga berfungsi dengan baik, saya masih tidak yakin apakah ini metode yang tepat untuk mengambil cadangan menjalankan VPS. Saya menemukan dokumentasi yang bagus tentang perintah qemu-img di sini dan di sini . Tetapi mereka tidak menyebutkan apapun tentang mengonversi snapshot VPS langsung dalam gambar mentah.

Metode mana yang lebih cocok untuk cadangan VPS langsung? Apakah mengkonversi foto dalam gambar mentah aman?

Jika saya bisa mendapatkan dokumentasi terperinci yang bagus tentang bagaimana file snapshot dan file dasar berperilaku dalam kondisi tertentu yang akan sangat membantu.

Mungkin kita juga bisa mengonversi gambar dasar qcow2 menjadi file cadangan mentah alih-alih mengonversi foto. Jadi perintah aliran akan menjadi:
1. Buat snapshot
2. Konversi basis qcow2 menjadi gambar mentah cadangan
3. Ubah snapshot komit menjadi gambar dasar
4. Hapus snapshot

Saya mencoba ini dan itu bekerja dengan baik pada VPS kecil 5GB. Tetapi apakah ada kemungkinan kesalahan atau korupsi VPS ketika ukuran VPS sangat besar?

Terima kasih sebelumnya...

Bosco D'mello
sumber
2
Itulah salah satu alasan saya suka memiliki mesin virtual saya berada di volume logis. Mereka memiliki dukungan snapshot yang melekat.
Halfgaar

Jawaban:

12

Satu-satunya hal yang Anda lewatkan adalah menghentikan sistem file tamu sebelum mengambil snapshot, untuk memastikan bahwa itu konsisten. Ini dapat dilakukan dengan virsh domfsfreezejika Anda menggunakan libvirtd.

Sebagai contoh, urutan operasi adalah:

# Freeze guest filesystems
virsh domfsfreeze $VM_NAME

# Create snapshot
qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2

# Thaw guest filesystems
virsh domfsthaw $VM_NAME

# Take backup from snapshot
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Perhatikan baik-baik bahwa ini mengharuskan qemu-guest-agentdiinstal dan dijalankan di VM. Tergantung pada distribusi dan pilihan instalasi, ini mungkin atau mungkin tidak demikian.

Ini qemu-guest-agentjuga dapat diperluas; Anda dapat menambahkan skrip untuk mendukung perangkat lunak tertentu. Sebagai contoh, ini termasuk contoh skrip untuk menempatkan MySQL dalam keadaan konsisten.

Michael Hampton
sumber
Satu-satunya jawaban yang hilang adalah penghapusan snapshot setelah cadangan :)
dyasny
2
@ BoscoD'mello Kecuali jika Anda memiliki hard drive yang sangat buruk, itu harus kurang dari sepersekian detik. Itu tidak layak untuk dikhawatirkan.
Michael Hampton
1
Sayangnya, snapshot tidak berfungsi untuk saya. Ketika mencoba virsh domfsfreeze $VM_NAME, saya mendapat izin ditolak pada sistem file tamu saya. Sistem file guest saya dienkripsi, tidak yakin itu penting.
seorang pembuat kode
2
@ Edward_178118 Tergantung pada apakah beban kerja Anda dapat ditangguhkan selama sepersekian detik.
Michael Hampton
2
@ Edward_178118 Operasi jaringan latensi yang sangat rendah, mungkin? Saya tidak pernah mengalami apa pun yang menjadi masalah.
Michael Hampton
1

Ada pendekatan lain yang melibatkan pembuatan snapshot sementara selama pencadangan dan mengembalikannya setelah itu.

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

Untuk informasi lebih lanjut, lihat: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

Thuffir
sumber
1
Jika Anda memerlukan disk yang dicadangkan lagi nanti, yang berasal dari vm yang berjalan, bagaimana Anda mengembalikan? Apakah Anda tidak perlu isi ram juga untuk memulihkan?
Adrian Zaugg