Saya memiliki sejumlah mesin virtual Xen yang berjalan di sejumlah server Linux. VM ini menyimpan gambar disk mereka dalam volume LVM Linux dengan nama perangkat di sepanjang baris / dev / xenVG / SERVER001OS dan seterusnya. Saya ingin mengambil cadangan secara teratur dari gambar-gambar disk sehingga saya dapat mengembalikan VM jika kita perlu (perangkat LVM sudah dicerminkan dengan DRBD antara dua mesin fisik masing-masing, saya hanya menjadi paranoid ekstra di sini).
Bagaimana saya melakukannya? Jelas langkah pertama adalah mengambil snapshot perangkat LVM, tetapi bagaimana cara mentransfer data ke server cadangan dengan cara yang seefisien mungkin? Saya cukup menyalin seluruh perangkat, sesuatu seperti:
dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"
... tapi itu akan memakan banyak bandwidth. Apakah ada alat seperti rsync untuk menyinkronkan konten seluruh blok disk antara server jauh? Sesuatu seperti:
rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img
Jika saya memahami halaman manual rsync dengan benar, perintah di atas tidak akan berfungsi (kan?), Tetapi ini menunjukkan apa yang saya tuju. Saya mengerti opsi --device rsync adalah menyalin perangkat itu sendiri, bukan isi dari perangkat itu. Membuat salinan lokal dari gambar VM sebelum menyinkronkannya dengan server jarak jauh bukanlah suatu pilihan karena tidak ada ruang disk.
Apakah ada utilitas praktis yang dapat disinkronkan antara perangkat blok dan file cadangan di server jarak jauh? Saya bisa menulis satu jika saya harus, tetapi solusi yang ada akan lebih baik. Apakah saya melewatkan opsi rsync yang melakukan ini untuk saya?
Meskipun ada tambalan 'perangkat-tulis' dan 'perangkat-salin' untuk RSync, mereka hanya bekerja dengan baik pada gambar kecil (1-2GB). RSync akan menghabiskan waktu lama mencari-cari blok yang cocok pada gambar yang lebih besar dan hampir tidak berguna untuk 40GB atau perangkat / file yang lebih besar.
Kami menggunakan yang berikut ini untuk melakukan perbandingan checksum per 1MB dan kemudian cukup menyalin konten jika tidak cocok. Kami menggunakan ini untuk membuat cadangan server di host virtual di AS ke sistem cadangan di Inggris, melalui internet publik. Aktivitas CPU dan hit snapshot sangat singkat hanya setelah jam kerja:
Buat snapshot:
Penyemaian awal:
Pencadangan malam hari tambahan (hanya mengirim blok yang diubah):
Hapus foto:
sumber
read ARGV,$buf,1024
alih-alihread STDIN,$buf,1024
, @ sysadmin1138? (Saya mencoba menjawab stackoverflow.com/q/22693823/2987828 dan tidak mengerti ARGV di sini). Saya menggunakan varian setiap hari dalam pertanyaan stackoverflow.com/q/22693823/2987828 dan berfungsi dengan baik.Orang-orang yang tertarik melakukan ini secara khusus dengan snapshot LVM mungkin menyukai alat lvmsync saya , yang membaca daftar blok yang diubah dalam sebuah snapshot dan hanya mengirimkan perubahan itu.
sumber
Lihatlah Zumastor Linux Storage Project yang mengimplementasikan cadangan "snapshot" menggunakan biner "rsync" melalui alat ddsnap .
Dari halaman manual:
ddsnap menyediakan replikasi perangkat blok mengingat fasilitas snapshot level blok yang mampu menahan beberapa snapshot simultan secara efisien. ddsnap dapat menghasilkan daftar bidikan snapshot yang berbeda antara dua snapshot, lalu kirim perbedaan itu melalui kabel. Di server hilir, tulis data yang diperbarui ke perangkat blok yang dibidik.
sumber
Ada skrip python yang disebut blocksync yang merupakan cara sederhana untuk menyinkronkan dua perangkat blok melalui jaringan melalui ssh, hanya mentransfer perubahan.
Saya baru-baru ini meretasnya untuk membersihkannya dan mengubahnya untuk menggunakan algoritma fast-checksum yang sama dengan rsync ( Adler-32 ).
sumber
Jika Anda mencoba untuk meminimalkan jumlah ruang kosong yang Anda kirim melintasi kawat dengan sebuah dataran
dd
, tidak bisakah Anda hanya pipa ke gzip sebelum pipa itu ke ssh?mis. dd if = / dev / xenVG / SERVER001OS | gzip | ssh administrator @ backupserver "dd of = / mnt / largeDisk / SERVER001OS.img.gz"
sumber
Berhati-hatilah bahwa kinerja sistem yang memiliki snapshot LVM sebanding dengan jumlah snapshot.
Misalnya kinerja Mysql dengan snapshot lvm
sumber
Selain jawaban David Herselman - skrip berikut akan disinkronkan ke perangkat lokal:
Sejauh yang saya tahu kedua skrip pertama kali diposting di lists.samba.org .
sumber
Ini adalah pertanyaan lama, tetapi tidak ada yang menyebutkan dua alat yang sangat berguna untuk menyinkronkan dua perangkat blok secara efisien:
bdsync , yang menggunakan pendekatan diff-transfer-and-patch;
blocksync (di sini Anda dapat menemukan versi saya yang ditingkatkan ), yang menggunakan pendekatan in-place-rewrite.
Saya sangat menyarankan untuk bermain dengan kedua alat dan untuk memilih mana yang lebih baik beradaptasi dengan penggunaan yang Anda inginkan.
sumber
Setelah mencari selama beberapa tahun, saya baru-baru ini membuat alat untuk menyinkronkan foto - foto LVM antara server. Itu dirancang untuk menggunakan IO minimal dan memungkinkan sistem untuk menjalankan sementara sinkronisasi terjadi.
Ini mirip dengan ZFS kirim / terima di yang menyinkronkan perbedaan antara snapshot LVM, dan menggunakan provisi tipis sehingga dampak kinerja minimal.
Saya ingin umpan balik, jadi silakan lihat.
sumber
Ada beberapa efisiensi yang dibuat untuk skrip ini:
sumber