Некоторое время назад возникла необходимость решить проблему миграции виртуальных машин KVM с одного кластера Proxmox VE на другой с минимальным временем простоя. В PVE из коробки такой возможности нет, но оказалось, что онлайн-миграцию виртуальных машин между кластерами можно осуществить средствами KVM. Я подробно опишу процедуру переноса в этом руководстве.

Важные заметки

  1. Процедура протестирована для Proxmox VE 6.x

  2. Серверы кластера, между которыми выполняется миграция, должны быть настроены на SSH-соединение без пароля.

Соглашения

  • пве-01 — сервер с которого будем мигрировать

  • пве-02 — сервер, на который мы будем выполнять миграции

  • 100 — исходный идентификатор виртуальной машины

  • 120 — Идентификатор виртуальной машины после миграции

  • ПК-i440fx-2.11 — чипсет виртуальной машины, в вашем случае может отличаться, ниже покажу как определить

  • 192.168.0.3 — IP-адрес сервера, на который мы будем мигрировать виртуальную машину

Процедура

  1. SSH на оба сервера

  2. На серверы пве-01 найти чипсет, который эмулируется для нашей виртуальной машины. В нашем случае это будет ПК-i440fx-2.11

    cat << EOF | socat STDIO UNIX:/run/qemu-server/$SRCID.qmp | grep --color current
    { "execute": "qmp_capabilities" }
    { "execute": "query-commands" }
    { "execute": "query-machines" }
    EOF
  3. Для удобства установите переменные окружения на обоих серверах

    SRCID=100
    DSTID=120
    CHIPSET=pc-i440fx-2.11
    DSTIP=192.168.0.3
    DSTPORT=60000
  4. Получить его на сервере пве-01 команда запуска виртуальной машины

    ps ax | grep $SRCID
  5. Копировать из пве-01 на пве-02 файл конфигурации виртуальной машины. После выполнения этого шага веб-интерфейс PVE отобразит конфигурацию виртуальной машины с идентификатором $DSTID

    scp /etc/pve/local/qemu-server/$SRCID.conf $DSTIP:/etc/pve/local/qemu-server/$DSTID.conf
  6. В интерфейсе сервера PVE пве-02 из конфигурации виртуальной машины $DSTID Удалите все жесткие диски и добавьте такое же количество жестких дисков одинакового размера.

  7. В консоли сервера пве-02 запустить виртуальную машину $DSTID Ожидается миграция. Для этого модифицируем строку запуска, полученную на шаге 4:

    1. $SRCID заменен на $DSTID

    2. Удалить с канала ,x509 Если там есть

    3. Убедитесь, что строка запуска содержит -machine type=$CHIPSET получено на шаге 2

    4. Добавлять -incoming tcp:$DSTIP:$DSTPORT -S

    /usr/bin/kvm -id $DSTID <остальные параметры> -incoming tcp:$DSTIP:$DSTPORT -S
  8. Начнем миграцию

    qm monitor $SRCID
    # Опционально можно ограничить скорость передачи данных
    qm> migrate_set_speed 100M
    qm> migrate -b tcp:$DSTIP:$DSTPORT
    
    # Прогресс можно наблюдать командой
    qm> info migrate
  9. Давайте работать qm monitor к серверам пве-02для отслеживания прогресса. Когда копирование данных завершено, исходная виртуальная машина переходит в состояние VM status: paused (postmigrate)

    qm monitor $DSTID
    qm> info status
    
    VM status: paused (postmigrate)
  10. В qm monitor к серверам пве-02 запустить мигрированную виртуальную машину

    qm> c
  11. На серверы пве-01 выключите исходную виртуальную машину

    qm stop $SRCID
  12. Проверяем, что после миграции все работает как положено и удаляем исходную виртуальную машину

    qm destroy $SRCID

Я надеюсь, что это руководство поможет сэкономить время и нервы инженерам, столкнувшимся с подобной задачей.

ЧИТАТЬ   В Египте выяснят причины ненормального поведения акулы, напавшей на россиянина

Source

От admin