bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward

Як мігрувати віртуальні машини між хостами?

calendar_month October 07, 2025 schedule 11 хв. читання visibility 595 переглядів
person
Valebyte Team
Як мігрувати віртуальні машини між хостами?
summarize

TL;DR

  • Проверьте наличие свободных CPU и RAM на целевом хосте с помощью top перед началом миграции.
  • Настройте общее хранилище и идентичные сетевые мосты на обоих хостах для миграции без простоя.
  • Используйте утилиту virsh для выполнения и мониторинга процесса живой миграции через терминал.
  • Обязательно проверяйте совместимость флагов процессора между исходным и целевым гипервизорами KVM.

Як мігрувати віртуальні машини між хостами: міграція працюючих ВМ у KVM

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

Зміст:

Підготовка до міграції

Как мигрировать виртуальные машины между хостами? - Шаги подготовки к миграции работающих виртуальных машин, включая настройку общего хранилища и прав пользователя.

Перш ніж приступити до міграції віртуальної машини, необхідно виконати ряд підготовчих кроків, щоб забезпечити успішне та безперебійне переміщення. Ключові аспекти підготовки включають перевірку ресурсів, налаштування спільного сховища (якщо необхідно) та налаштування прав доступу. Правильна підготовка мінімізує ризик виникнення проблем під час міграції та забезпечує мінімальний час простою для вашої віртуальної машини.

Перевірка доступності ресурсів

Переконайтеся, що цільовий хост має достатньо ресурсів (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/fstab
echo "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. Недостатні права доступу можуть призвести до помилок при спробі підключення до хосту або управління віртуальними машинами.

Приклад: Додавання користувача до групи libvirt
usermod -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-хостинг →
rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Перевірка сумісності хостів

Для успішної міграції вкрай важливо, щоб вихідний та цільовий хости були сумісні. Це включає в себе перевірку сумісності CPU, версій libvirt та QEMU. Несумісність може призвести до збоїв міграції або до нестабільної роботи віртуальної машини після міграції. У цьому розділі ми розглянемо, як перевірити сумісність за допомогою virsh та інших інструментів.

Перевірка сумісності CPU

Різні моделі CPU можуть мати різні набори інструкцій, що може призвести до проблем при міграції. Використовуйте virsh capabilities для порівняння можливостей CPU вихідного та цільового хостів. Якщо CPU несумісні, можна використовувати опцію --cpu-model при міграції, щоб вказати спільну модель CPU, що підтримується обома хостами.

Приклад: Отримання інформації про CPU за допомогою virsh capabilities
virsh capabilities | grep -A 20 'cpu>'

Ця команда відображає інформацію про CPU за допомогою команди `virsh capabilities` та фільтрує вивід, щоб показати лише секцію, що починається з тегу ``. Параметр `-A 20` вказує, що потрібно відобразити 20 рядків після знайденого рядка.

Приклад: Міграція з вказівкою моделі CPU
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 на всіх хостах.

Приклад: Перевірка версії libvirt
virsh version

Ця команда відображає інформацію про версію libvirt та використовуваний гіпервізор (наприклад, QEMU). Перевірте версію libvirt на обох хостах та переконайтеся, що вони сумісні.

Приклад: Перевірка версії QEMU
qemu-system-x86_64 --version

Ця команда відображає інформацію про версію QEMU. Перевірте версію QEMU на обох хостах та переконайтеся, що вони сумісні.

Перевірка конфігурації віртуальної машини

Перевірте конфігурацію віртуальної машини (наприклад, кількість vCPU, обсяг пам'яті, мережеві інтерфейси), щоб переконатися, що цільовий хост підтримує її. Несумісність в конфігурації може призвести до проблем із запуском віртуальної машини після міграції.

Приклад: Отримання інформації про віртуальну машину за допомогою virsh
virsh 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.

Приклад: Перевірка зв'язку за допомогою ping
ping host2.example.com

Переконайтеся, що хости можуть зв'язуватися один з одним по мережі. Якщо пінги не проходять, перевірте налаштування мережі, брандмауер і DNS.

Приклад: Перевірка правил брандмауера
firewall-cmd --list-all

Переконайтеся, що брандмауер не блокує трафік, необхідний для міграції (наприклад, порт 16509 для libvirt). Додайте необхідні правила і перезавантажте брандмауер.

Проблеми з ресурсами

Нестача ресурсів на цільовому хості може призвести до збою міграції. Переконайтеся, що на цільовому хості достатньо CPU, пам'яті та дискового простору для розміщення віртуальної машини.

Приклад: Перевірка використання ресурсів за допомогою top
top

Перевірте завантаження CPU і використання пам'яті на цільовому хості. Якщо ресурси сильно завантажені, звільніть їх або перенесіть частину навантаження на інший хост.

Приклад: Перевірка вільного місця на диску за допомогою df
df -h

Переконайтеся, що на цільовому хості достатньо вільного місця для зберігання дисків віртуальної машини. Якщо місця недостатньо, збільште розмір розділу або перенесіть диски на інше сховище.

Проблеми з сумісністю CPU

Несумісність CPU між вихідним і цільовим хостами може призвести до збою міграції або до нестабільної роботи віртуальної машини після міграції. Використовуйте опцію --cpu-model при міграції, щоб вказати загальну модель CPU, підтримувану обома хостами.

Приклад: Міграція з вказівкою моделі CPU
virsh migrate --live vm1 qemu+ssh://host2.example.com/system --cpu-model core2duo

Вкажіть модель CPU, підтримувану обома хостами. Якщо ви не знаєте, яку модель використовувати, спробуйте host або kvm64.

Перегляд логів

Якщо міграція завершилася невдачею, перегляньте логи libvirt і QEMU для отримання додаткової інформації про помилку. Логи можуть містити підказки про причину проблеми і допомогти в її усуненні.

Приклад: Перегляд логів libvirt
tail -f /var/log/libvirt/libvirtd.log

Ця команда відображає останні рядки файлу логів libvirt в режимі реального часу. Шукайте повідомлення про помилки або попередження, пов'язані з міграцією.

Приклад: Перегляд логів QEMU
tail -f /var/log/libvirt/qemu/vm1.log

Ця команда відображає останні рядки файлу логів QEMU для віртуальної машини `vm1` в режимі реального часу. Шукайте повідомлення про помилки або попередження, пов'язані з запуском або міграцією віртуальної машини.

Масштабуйте свої проєкти: Потужні хмарні інстанси чекають

Завершили міграцію? Тепер час розкрити весь потенціал ваших проєктів з нашими масштабованими хмарними інстансами. Почніть прямо зараз!

Запустити хмарний інстанс →
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.