Як мігрувати віртуальні машини між хостами: міграція працюючих ВМ у KVM
Міграція віртуальних машин між хостами – критично важлива операція для забезпечення високої доступності, балансування навантаження та обслуговування інфраструктури. У цій статті ми детально розглянемо міграцію працюючих віртуальних машин (live migration) у середовищі KVM (Kernel-based Virtual Machine). Ми вивчимо необхідні умови, інструменти та покрокові інструкції, щоб ви могли безпечно та ефективно переносити віртуальні машини між вашими хостами без переривання їхньої роботи. Ви дізнаєтесь, як налаштувати мережу, перевірити сумісність та виконати міграцію за допомогою командного рядка та графічних інструментів.
Зміст:
- Підготовка до міграції
- Налаштування мережі для міграції
- Перевірка сумісності хостів
- Виконання міграції за допомогою virsh
- Діагностика та усунення проблем
Підготовка до міграції

Перш ніж приступити до міграції віртуальної машини, необхідно виконати ряд підготовчих кроків, щоб забезпечити успішне та безперебійне переміщення. Ключові аспекти підготовки включають перевірку ресурсів, налаштування спільного сховища (якщо необхідно) та налаштування прав доступу. Правильна підготовка мінімізує ризик виникнення проблем під час міграції та забезпечує мінімальний час простою для вашої віртуальної машини.
Перевірка доступності ресурсів
Переконайтеся, що цільовий хост має достатньо ресурсів (CPU, RAM, дисковий простір) для розміщення віртуальної машини. Нестача ресурсів може призвести до проблем з продуктивністю або навіть до збою міграції. Перевірте завантаження CPU, використання пам'яті та вільне місце на диску на обох хостах.
Приклад: Перевірка використання ресурсів за допомогою командиtop
top -b -n 1 | head -n 5
Ця команда відображає перші 5 рядків виводу top, показуючи загальне завантаження CPU, використання пам'яті та інші важливі показники. Параметр `-b` запускає top в пакетному режимі, а `-n 1` вказує, що потрібно виконати лише одну ітерацію. Це зручно для автоматизації та скриптів.
df
df -h /var/lib/libvirt/images
Ця команда показує використання дискового простору для каталогу `/var/lib/libvirt/images`, де зазвичай зберігаються образи віртуальних машин. Опція `-h` робить висновок більш читабельним, показуючи розміри в людино-зрозумілому форматі (наприклад, GB, MB). Переконайтеся, що на цільовому хості достатньо вільного місця для зберігання дисків віртуальної машини.
Налаштування спільного сховища (якщо необхідно)
Якщо ви використовуєте спільне сховище (наприклад, NFS, iSCSI), переконайтеся, що воно доступне та правильно налаштоване на обох хостах. Спільне сховище спрощує міграцію, оскільки віртуальна машина продовжує використовувати одні й ті ж диски, незалежно від того, на якому хості вона запущена.
Приклад: Монтування NFS-шариmount -t nfs 192.168.1.10:/exports/vm_images /var/lib/libvirt/images
Ця команда монтує NFS-шару з IP-адресою 192.168.1.10 і шляхом `/exports/vm_images` до каталогу `/var/lib/libvirt/images` на локальному хості. Щоб зробити монтування постійним, додайте відповідний запис до файлу `/etc/fstab`.
Приклад: Додавання запису до /etc/fstabecho "192.168.1.10:/exports/vm_images /var/lib/libvirt/images nfs defaults 0 0" >> /etc/fstab
Ця команда додає рядок до файлу `/etc/fstab`, який вказує, як монтувати NFS-шару під час завантаження системи. Опція `defaults` використовує стандартні параметри монтування, а `0 0` відключає резервне копіювання та перевірку файлової системи.
Налаштування прав доступу
Переконайтеся, що користувач, від імені якого виконується міграція, має необхідні права доступу на обох хостах. Зазвичай це користувач root або користувач, який входить до групи libvirt. Недостатні права доступу можуть призвести до помилок при спробі підключення до хосту або управління віртуальними машинами.
Приклад: Додавання користувача до групи libvirtusermod -a -G libvirt your_username
Ця команда додає користувача `your_username` до групи `libvirt`. Після виконання команди необхідно вийти із системи та знову увійти, щоб зміни набули чинності.
Приклад: Перевірка членства в групіgroups your_username
Ця команда показує список груп, в яких перебуває користувач `your_username`. Переконайтеся, що у списку є група `libvirt`.
Налаштування мережі для міграції

Правильне налаштування мережі є критично важливим для успішної міграції. Рекомендується використовувати виділену мережу для трафіку міграції, щоб уникнути перевантаження основної мережі та забезпечити стабільну та швидку передачу даних. У цьому розділі ми розглянемо налаштування виділеної мережі, налаштування DNS та брандмауера.
Налаштування виділеної мережі
Створіть окрему віртуальну мережу (наприклад, VLAN) або фізичну мережу, призначену виключно для трафіку міграції. Призначте кожному хосту IP-адреси в цій мережі та переконайтеся, що вони можуть зв'язуватися один з одним. Використання виділеної мережі підвищує безпеку та продуктивність міграції.
Приклад: Налаштування IP-адрес на інтерфейсах# Хост 1
ip addr add 192.168.10.1/24 dev eth1
ip link set eth1 up
# Хост 2
ip addr add 192.168.10.2/24 dev eth1
ip link set eth1 up
Ці команди призначають IP-адреси 192.168.10.1 та 192.168.10.2 інтерфейсу eth1 на хостах 1 та 2 відповідно. Переконайтеся, що інтерфейс eth1 підключений до виділеної мережі міграції. Команда `ip link set eth1 up` активує інтерфейс.
Приклад: Перевірка зв'язку між хостамиping 192.168.10.2
Ця команда перевіряє зв'язок між хостом 1 та хостом 2 по виділеній мережі. Переконайтеся, що пінги проходять успішно.
Налаштування DNS
Переконайтеся, що імена хостів правильно розрішаються в IP-адреси виділеної мережі. Це можна зробити, додавши записи до файлу `/etc/hosts` на обох хостах або налаштувавши DNS-сервер. Правильне розрішення імен спрощує процес міграції та робить його більш надійним.
Приклад: Додавання записів до /etc/hosts# Хост 1 та Хост 2
echo "192.168.10.1 host1.example.com host1" >> /etc/hosts
echo "192.168.10.2 host2.example.com host2" >> /etc/hosts
Ці команди додають записи до файлу `/etc/hosts`, пов'язуючи IP-адреси виділеної мережі з іменами хостів. Замініть `host1.example.com` та `host2.example.com` на повні доменні імена ваших хостів, а `host1` та `host2` на короткі імена хостів.
Приклад: Перевірка розв'язання іменping host2
Ця команда перевіряє, чи правильно розв'язується ім'я хоста `host2` в IP-адресу 192.168.10.2. Переконайтеся, що пінги проходять успішно.
Налаштування брандмауера
Налаштуйте брандмауер на обох хостах, щоб дозволити трафік, необхідний для міграції. Зазвичай це порти, що використовуються libvirt (наприклад, TCP 16509). Неправильно налаштований брандмауер може блокувати трафік міграції та призводити до збоїв.
Приклад: Дозволення трафіку libvirt за допомогою firewalld# Хост 1 та Хост 2
firewall-cmd --permanent --add-port=16509/tcp
firewall-cmd --reload
Ці команди додають правило до firewalld, що дозволяє трафік TCP на порту 16509. Опція `--permanent` робить правило постійним, а `--reload` перезавантажує брандмауер, щоб застосувати зміни.
Приклад: Перевірка правил брандмауераfirewall-cmd --list-all
Ця команда показує список усіх правил, налаштованих у firewalld. Переконайтеся, що в списку присутнє правило, що дозволяє трафік TCP на порту 16509.
Потрібен новий дім для ваших ВМ? Оберіть ідеальний VPS-хостинг
Після успішної міграції забезпечте вашим віртуальним машинам стабільне та потужне середовище. Відкрийте для себе наші гнучкі тарифи VPS. — from €4.49/mo.
Знайти VPS-хостинг →Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Перевірка сумісності хостів
Для успішної міграції вкрай важливо, щоб вихідний та цільовий хости були сумісні. Це включає в себе перевірку сумісності CPU, версій libvirt та QEMU. Несумісність може призвести до збоїв міграції або до нестабільної роботи віртуальної машини після міграції. У цьому розділі ми розглянемо, як перевірити сумісність за допомогою virsh та інших інструментів.
Перевірка сумісності CPU
Різні моделі CPU можуть мати різні набори інструкцій, що може призвести до проблем при міграції. Використовуйте virsh capabilities для порівняння можливостей CPU вихідного та цільового хостів. Якщо CPU несумісні, можна використовувати опцію --cpu-model при міграції, щоб вказати спільну модель CPU, що підтримується обома хостами.
virsh capabilities | grep -A 20 'cpu>'
Ця команда відображає інформацію про CPU за допомогою команди `virsh capabilities` та фільтрує вивід, щоб показати лише секцію, що починається з тегу `
virsh migrate --live vm1 qemu+ssh://host2.example.com/system --cpu-model core2duo
Ця команда виконує живу міграцію віртуальної машини `vm1` на хост `host2.example.com` та вказує, що потрібно використовувати модель CPU `core2duo`. Ця опція може бути необхідна, якщо CPU вихідного та цільового хостів не повністю сумісні. Замініть `core2duo` на модель CPU, що підтримується обома хостами.
Перевірка версій libvirt та QEMU
Переконайтеся, що версії libvirt та QEMU на вихідному та цільовому хостах сумісні. Використання різних версій може призвести до проблем з управлінням віртуальними машинами та збоїв міграції. Рекомендується використовувати однакові або близькі версії libvirt та QEMU на всіх хостах.
Приклад: Перевірка версії libvirtvirsh version
Ця команда відображає інформацію про версію libvirt та використовуваний гіпервізор (наприклад, QEMU). Перевірте версію libvirt на обох хостах та переконайтеся, що вони сумісні.
Приклад: Перевірка версії QEMUqemu-system-x86_64 --version
Ця команда відображає інформацію про версію QEMU. Перевірте версію QEMU на обох хостах та переконайтеся, що вони сумісні.
Перевірка конфігурації віртуальної машини
Перевірте конфігурацію віртуальної машини (наприклад, кількість vCPU, обсяг пам'яті, мережеві інтерфейси), щоб переконатися, що цільовий хост підтримує її. Несумісність в конфігурації може призвести до проблем із запуском віртуальної машини після міграції.
Приклад: Отримання інформації про віртуальну машину за допомогою virshvirsh dominfo vm1
Ця команда відображає інформацію про віртуальну машину `vm1`, включаючи ID, ім'я, стан, кількість vCPU, обсяг пам'яті та інші параметри. Порівняйте цю інформацію з ресурсами цільового хоста.
Приклад: Отримання XML-конфігурації віртуальної машиниvirsh dumpxml vm1
Ця команда відображає XML-конфігурацію віртуальної машини `vm1`. Ви можете використовувати цю інформацію для більш детального аналізу конфігурації та перевірки сумісності з цільовим хостом.
Виконання міграції за допомогою virsh
virsh – це потужний інструмент командного рядка для управління віртуальними машинами в середовищі KVM. Він надає широкі можливості для міграції, включаючи живу міграцію, яка дозволяє переміщувати віртуальні машини між хостами без переривання їхньої роботи. У цьому розділі ми детально розглянемо, як виконати міграцію за допомогою virsh, а також розглянемо різні опції та приклади.
Основні команди для міграції
Основна команда для міграції віртуальних машин за допомогою virsh – це virsh migrate. Вона приймає різні опції, які дозволяють налаштувати процес міграції відповідно до ваших потреб. Нижче наведено основні опції:
--live: Виконує живу міграцію, тобто переміщує віртуальну машину без переривання її роботи.--copy-storage: Копіює сховище віртуальної машини на цільовий хост.--persistent: Робить конфігурацію віртуальної машини постійною на цільовому хості.--auto-converge: Вмикає автоматичну конвергенцію, щоб зменшити час простою.--cpu-model: Вказує модель CPU для використання на цільовому хості (див. попередній розділ).
virsh migrate --live vm1 qemu+ssh://host2.example.com/system
Ця команда виконує живу міграцію віртуальної машини `vm1` на хост `host2.example.com`. Вона використовує протокол SSH для підключення до цільового хоста. Переконайтеся, що у користувача, який виконує команду, є права доступу на цільовому хості.
Міграція зі спільним сховищем
Якщо віртуальна машина використовує спільне сховище, міграція стає простішою, оскільки не потрібно копіювати диски віртуальної машини. В цьому випадку команда міграції може бути спрощена.
Приклад: Жива міграція зі спільним сховищемvirsh migrate --live vm1 qemu+ssh://host2.example.com/system
Ця команда виконує живу міграцію віртуальної машини `vm1` на хост `host2.example.com`. Оскільки використовується спільне сховище, опція `--copy-storage` не потрібна.
Міграція без спільного сховища
Якщо віртуальна машина не використовує спільне сховище, необхідно скопіювати диски віртуальної машини на цільовий хост. Це можна зробити за допомогою опції `--copy-storage` або за допомогою інших методів, таких як rsync.
virsh migrate --live --copy-storage vm1 qemu+ssh://host2.example.com/system
Ця команда виконує живу міграцію віртуальної машини `vm1` на хост `host2.example.com` і копіює сховище віртуальної машини на цільовий хост. Цей процес може зайняти деякий час, в залежності від розміру дисків віртуальної машини.
Приклад: Міграція з використанням rsync (альтернативний метод)# На вихідному хості
rsync -avz /var/lib/libvirt/images/vm1.img host2.example.com:/var/lib/libvirt/images/
# Після завершення rsync, виконати міграцію
virsh migrate --live vm1 qemu+ssh://host2.example.com/system
Цей приклад показує, як скопіювати диск віртуальної машини `vm1.img` на цільовий хост за допомогою rsync перед виконанням міграції. Опція `-avz` забезпечує архівування, рекурсивне копіювання та стиснення даних. Після завершення копіювання, виконайте команду virsh migrate без опції `--copy-storage`.
Діагностика та усунення проблем
Міграція віртуальних машин, особливо жива міграція, може зіткнутися з різними проблемами. Важливо вміти діагностувати та усувати ці проблеми, щоб забезпечити успішне переміщення віртуальних машин та уникнути простою. У цьому розділі ми розглянемо найбільш поширені проблеми та методи їх вирішення.
Проблеми з підключенням
Однією з найпоширеніших проблем є неможливість встановити з'єднання між вихідним і цільовим хостами. Це може бути пов'язано з проблемами з мережею, брандмауером або налаштуваннями DNS.
Приклад: Перевірка зв'язку за допомогою pingping host2.example.com
Переконайтеся, що хости можуть зв'язуватися один з одним по мережі. Якщо пінги не проходять, перевірте налаштування мережі, брандмауер і DNS.
Приклад: Перевірка правил брандмауераfirewall-cmd --list-all
Переконайтеся, що брандмауер не блокує трафік, необхідний для міграції (наприклад, порт 16509 для libvirt). Додайте необхідні правила і перезавантажте брандмауер.
Проблеми з ресурсами
Нестача ресурсів на цільовому хості може призвести до збою міграції. Переконайтеся, що на цільовому хості достатньо CPU, пам'яті та дискового простору для розміщення віртуальної машини.
Приклад: Перевірка використання ресурсів за допомогою toptop
Перевірте завантаження CPU і використання пам'яті на цільовому хості. Якщо ресурси сильно завантажені, звільніть їх або перенесіть частину навантаження на інший хост.
Приклад: Перевірка вільного місця на диску за допомогою dfdf -h
Переконайтеся, що на цільовому хості достатньо вільного місця для зберігання дисків віртуальної машини. Якщо місця недостатньо, збільште розмір розділу або перенесіть диски на інше сховище.
Проблеми з сумісністю CPU
Несумісність CPU між вихідним і цільовим хостами може призвести до збою міграції або до нестабільної роботи віртуальної машини після міграції. Використовуйте опцію --cpu-model при міграції, щоб вказати загальну модель CPU, підтримувану обома хостами.
virsh migrate --live vm1 qemu+ssh://host2.example.com/system --cpu-model core2duo
Вкажіть модель CPU, підтримувану обома хостами. Якщо ви не знаєте, яку модель використовувати, спробуйте host або kvm64.
Перегляд логів
Якщо міграція завершилася невдачею, перегляньте логи libvirt і QEMU для отримання додаткової інформації про помилку. Логи можуть містити підказки про причину проблеми і допомогти в її усуненні.
Приклад: Перегляд логів libvirttail -f /var/log/libvirt/libvirtd.log
Ця команда відображає останні рядки файлу логів libvirt в режимі реального часу. Шукайте повідомлення про помилки або попередження, пов'язані з міграцією.
Приклад: Перегляд логів QEMUtail -f /var/log/libvirt/qemu/vm1.log
Ця команда відображає останні рядки файлу логів QEMU для віртуальної машини `vm1` в режимі реального часу. Шукайте повідомлення про помилки або попередження, пов'язані з запуском або міграцією віртуальної машини.
Масштабуйте свої проєкти: Потужні хмарні інстанси чекають
Завершили міграцію? Тепер час розкрити весь потенціал ваших проєктів з нашими масштабованими хмарними інстансами. Почніть прямо зараз!
Запустити хмарний інстанс →