Memindahkan VM antar host tanpa downtime dengan virsh migrate --live, memahami persyaratan shared storage dan jaringan, tuning downtime limits serta post-copy, dan migrasi tanpa shared storage dengan --unsafe

VM yang harus dimatikan saat host akan dirawat adalah mimpi buruk operasional. Live migration adalah jawaban KVM+QEMU: memindahkan VM berjalan dari satu host ke host lain dengan downtime diukur dalam milidetik. Inilah alasan KVM dipakai cloud provider — mereka bisa memperbaiki host tanpa pernah men-downtime kan VM pelanggan.
Episode 15 membahas konsep dan praktik live migration dengan libvirt: syaratnya, cara menjalankan virsh migrate --live, tuning, dan apa yang terjadi jika storage tidak shared.
Prinsipnya sederhana — sinkronisasi keadaan, bukan menyalin disk:
Durasi "pause" inilah yang disebut downtime — di jaringan sehat biasanya hanya puluhan hingga ratusan milidetik.
Live migration tidak gratis — butuh infrastruktur yang disiapkan:
| Prasyarat | Detail |
|---|---|
| Shared storage | Disk VM diakses kedua host (NFS, iSCSI, Ceph) |
| Jaringan antar host | Bandwidth cukup untuk RAM VM dalam waktu wajar |
| libvirt remote access | Source harus bisa bicara ke libvirt target |
| CPU kompatibel | Feature set CPU target harus mengakomodasi guest |
| Nama host ter-resolve | Hostname target dikenal source |
Warning
Tanpa shared storage, migrasi hanya memindahkan RAM — host target tidak punya disk VM. Hasilnya guest boot kosong atau migrasi gagal di tengah. Siapkan dulu NFS/iSCSI/Ceph untuk storage bersama.
Sintaks dasar dengan --live:
virsh migrate --live web1 qemu+ssh://root@host-b/systemOpsi umum yang perlu dikuasai:
--live — migrasi tanpa downtime (default modern).--p2p — peer-to-peer, source langsung hubungi target.--persistent — definisi VM ikut dipindah ke target.--undefinesource — hapus definisi di source setelah sukses.--migrateuri tcp://host-b:49152 — jalur data khusus (pisah dari control).Verifikasi setelah migrasi:
virsh list
virsh dominfo web1virsh list di host target harus menampilkan web1 (dengan --persistent), dan di host source sudah tidak ada.
QEMU berusaha menyeimbangkan kecepatan sinkronisasi dan downtime. Kalian bisa menetapkan batas:
virsh migrate-setmaxdowntime web1 100 # milidetik
virsh migrate-setspeed web1 0 # tanpa limit bandwidthvirsh migrate-setmaxdowntime membuat QEMU menghentikan iterasi saat downtime terestimasi sudah di bawah batas — anggun untuk workload yang sensitif.
Post-copy membalik logika: RAM dikirim setelah VM start di target, dan halaman yang diminta di-pull dari source on demand:
virsh migrate --live --postcopy web1 qemu+ssh://root@host-b/systemKeuntungannya: total migrasi lebih cepat untuk RAM besar, karena tidak menunggu iterasi selesai. Kekurangannya: jika jaringan putus selama post-copy, VM di target tidak bisa lanjut (butuh source). Gunakan untuk VM RAM besar di jaringan stabil.
Untuk kasus tanpa NFS/iSCSI, libvirt bisa ikut menyalin disk via non-shared storage migration:
virsh migrate --live --copy-storage-all \
web1 qemu+ssh://root@host-b/systemPerhatian: waktu migrasi kini mengikuti ukuran disk, bukan RAM — bisa berjam-jam untuk disk besar, dan downtime tak lagi hanya milidetik. Flag --unsafe memaksa jalan meski libvirt menganggap kondisi berisiko (misal cache tidak konsisten):
virsh migrate --live --copy-storage-all --unsafe \
web1 qemu+ssh://root@host-b/systemDanger
--unsafe menanggalkan verifikasi keamanan libvirt. Pakai hanya saat kalian benar-benar memahami risiko — misal migrasi satu kali dari host lama, bukan sebagai prosedur rutin. Untuk rutinitas, bangun shared storage yang benar.
-cpu host-model di episode 19) dan cek kompatibilitas.--persistent: setelah migrasi, definisi tidak ada di target — begitu reboot host target, VM raib dari manajemen.Pada episode 15 ini, kalian telah memahami live migration.
Inti yang harus dibawa pulang:
virsh migrate --live [--persistent] [--undefinesource].migrate-setmaxdowntime, migrate-setspeed, dan mode --postcopy.--copy-storage-all (lambat) dan --unsafe (berisiko).Di episode 16 selanjutnya, kita akan mendalami networking lanjut — Linux bridge khusus (custom bridge), --network bridge=br0, macvtap untuk direct passthrough, integrasi Open vSwitch, dan VLAN tagging untuk isolasi. Sampai jumpa di episode 16!