Belajar KVM & QEMU - Live Migration
Episode 15 of 23

Belajar KVM & QEMU - Live Migration

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Bagaimana Live Migration Bekerja

Prinsipnya sederhana — sinkronisasi keadaan, bukan menyalin disk:

  1. Pra-migrasi: target host menyiapkan VM kosong (tanpa start).
  2. Sinkronisasi RAM: QEMU di source mengirim halaman memory ke target secara iteratif. Halaman yang berubah saat iterasi dikirim ulang (dirty pages).
  3. Stop-and-copy: ketika perubahan sudah kecil, VM di source di-pause sejenak, sisa dirty pages dikirim, lalu VM dilanjutkan di target.
  4. Cutover: koneksi dipindah; source di-shutdown; target melanjutkan dengan state persis sama.

Durasi "pause" inilah yang disebut downtime — di jaringan sehat biasanya hanya puluhan hingga ratusan milidetik.

100%

Prasyarat

Live migration tidak gratis — butuh infrastruktur yang disiapkan:

PrasyaratDetail
Shared storageDisk VM diakses kedua host (NFS, iSCSI, Ceph)
Jaringan antar hostBandwidth cukup untuk RAM VM dalam waktu wajar
libvirt remote accessSource harus bisa bicara ke libvirt target
CPU kompatibelFeature set CPU target harus mengakomodasi guest
Nama host ter-resolveHostname 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.

Menjalankan Live Migration

Sintaks dasar dengan --live:

Migrasi live VM ke host lain
virsh migrate --live web1 qemu+ssh://root@host-b/system

Opsi 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:

Cek VM di host target
virsh list
virsh dominfo web1

virsh list di host target harus menampilkan web1 (dengan --persistent), dan di host source sudah tidak ada.

Tuning: Downtime Limits dan Post-Copy

Batasi Downtime

QEMU berusaha menyeimbangkan kecepatan sinkronisasi dan downtime. Kalian bisa menetapkan batas:

Set batas downtime migrasi
virsh migrate-setmaxdowntime web1 100   # milidetik
virsh migrate-setspeed web1 0           # tanpa limit bandwidth

virsh migrate-setmaxdowntime membuat QEMU menghentikan iterasi saat downtime terestimasi sudah di bawah batas — anggun untuk workload yang sensitif.

Post-Copy

Post-copy membalik logika: RAM dikirim setelah VM start di target, dan halaman yang diminta di-pull dari source on demand:

Migrasi post-copy
virsh migrate --live --postcopy web1 qemu+ssh://root@host-b/system

Keuntungannya: 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.

Migrasi Tanpa Shared Storage

Untuk kasus tanpa NFS/iSCSI, libvirt bisa ikut menyalin disk via non-shared storage migration:

Migrasi tanpa shared storage
virsh migrate --live --copy-storage-all \
  web1 qemu+ssh://root@host-b/system

Perhatian: 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):

Paksa migrasi tanpa shared storage
virsh migrate --live --copy-storage-all --unsafe \
  web1 qemu+ssh://root@host-b/system

Danger

--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.

Common Pitfalls

  • CPU mismatch: guest berjalan dengan flag CPU host asal (misal AVX512) yang tidak ada di target → guest crash saat migrasi. Gunakan model CPU generik (-cpu host-model di episode 19) dan cek kompatibilitas.
  • Shared storage tidak benar-benar shared: dua host mount NFS yang berbeda → migrasi "berhasil" tapi guest lihat dua disk berbeda.
  • Lupa --persistent: setelah migrasi, definisi tidak ada di target — begitu reboot host target, VM raib dari manajemen.
  • Migrasi pada VM dengan passthrough: device PCI yang di-passthrough (episode 18) tidak bisa migrasi — mereka terikat hardware spesifik.

Penutup

Pada episode 15 ini, kalian telah memahami live migration.

Inti yang harus dibawa pulang:

  • Live migration = sinkronisasi RAM iteratif + stop-and-copy singkat; downtime diukur milidetik.
  • Prasyarat: shared storage, jaringan antar host, CPU kompatibel, libvirt remote.
  • virsh migrate --live [--persistent] [--undefinesource].
  • Tuning: migrate-setmaxdowntime, migrate-setspeed, dan mode --postcopy.
  • Tanpa shared storage: --copy-storage-all (lambat) dan --unsafe (berisiko).
  • VM dengan passthrough tidak bisa live migrate.

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!

Belajar KVM & QEMU - Live Migration | Belajar KVM & QEMU