6.9.1. Эвакуация

Под эвакуацией следует понимать процесс ручного или автоматического переноса виртуальной машины (принудительной миграции), в случае выявления проблем на том вычислительном узле, ресурсы которого предоставлены гипервизором [1]. Перенос осуществляется на другие доступные вычислительные узлы ОИ, но только при наличии свободных ресурсов [2].

Обычная эвакуация подразумевает плановый перенос ВМ с приостановкой её работы (Раздел 6.9.1.1). Она также может называться холодной миграцией [3].

Экстренная (автоматическая) эвакуация происходит автоматически, если разрешена; используется резервный гипервизор или другой, имеющий свободные ресурсы (Раздел 6.9.1.2).

Для ручной миграции виртуальной машины необходимо подключиться к вычислительному узлу, на котором находится машина. Перейдите в директорию, в которой расположены файлы образов (виртуальных дисков) – /var/lib/nova/instances/$UUID.

6.9.1.1. Эвакуация (вручную)

Остановите эвакуируемую виртуальную машину. Выполните команду:

nova stop $VM_UUID

Убедитесь, достаточное ли количество свободных ресурсов имеется на вычислительном узле, на который будет осуществляться перенос ВМ.

Также необходимо убедится, что на обоих гипервизорах присутствует образ, из которого была создана машина. Проверить это можно следующим образом:

  1. Перейдите в каталог с виртуальной машиной:

    cd /var/lib/nova-compute/instances/UUID/
    
  2. Выполните команду:

    qemu-img info disk
    

Примерный вывод команды:

image: disk

 file format: qcow2
 virtual size: 32G (34359738368 bytes)
 disk size: 1.3G
 cluster_size: 65536
 backing file: /var/lib/nova/instances/_base/d00[...]61
 Format specific information:
   compat: 1.1
   lazy refcounts: false

В данном выводе нас интересует строка backing file с именем диска.

  1. Синхронизируйте образы на исходном и целевом гипервизорах:

    rsync -r --progress /var/lib/nova/instances/_base/d00[...]61 -e ssh $new_node:/var/lib/nova/instances/_base/d00[...]61
    
  2. Выставите необходимые права на скопированный файл:

    chown nova:nova /var/lib/nova/instances/_base/d00[...]61
    

Необходимо убедится, что на узле, куда будет осуществляться перенос – в директории /var/lib/nova-compute/instances/$UUID – имеется эвакуируемая виртуальная машина.

Если ее (ВМ) нет, то необходимо скопировать ее командой:

rsync -r --progress $VM_UUID -e ssh $node_name:/var/lib/nova-compute/instances/

Установите необходимые разрешения для скопированных файлов:

chown nova:nova /var/lib/nova-compute/instances/$VM_UUID
chown nova:nova /var/lib/nova-compute/instances/$VM_UUID/disk.info
chown nova:nova /var/lib/nova-compute/instances/libvirt.xml

chown libvirt:kvm /var/lib/nova-compute/instances/$VM_UUID/console.log
chown libvirt:kvm /var/lib/nova-compute/instances/$VM_UUID/disk
chown libvirt:kvm /var/lib/nova-compute/instances/$VM_UUID/disk.config

Далее, необходимо внести изменения в базу данных:

mysql nova
update instances set node='$new_node', host='$new_node' where uuid='$VM_UUID';

Проверьте, что машина успешно переместилась на новый гипервизор командой:

nova show

Запустите виртуальную машину на новом гипервизоре командой:

nova start $VM_UUID

6.9.1.2. Автоэвакуация

Для нормальной работы автоэвакуации должны быть соблюдены следующие условия:

  1. настроен shared-storage (СХД с Cinder тоже подходит);
  2. настроен модуль TIONIX.NodeControl;
  3. заведен доступ к узлам через сеть IPMI;
  4. настроено хранилище проверки доступности (ХПД, Раздел 6.5.3.4).

При выходе из строя гипервизора будет включаться запасной, взятый из доступных резервов (Раздел 6.5.3.3). Если резервных гипервизоров не найдено, то замена не произойдет, о чем будет сообщено в лог-файлах модуля TIONIX.NodeControl.

При смене статуса гипервизора на «down» модулем отрабатываяется следующий алгоритм:

  1. Определяется число потерянных ВУ, которое рассчитывается как число всех ВУ, находящихся в статусе «down», за исключением резервных;
  2. Если число потерянных ВУ превышает число, указанное в параметре „MAX_DOWN_HOSTS“, то алгоритм прерывается;
  3. Если не выставлен параметр „ALLOW_HOST_AUTO_POWER_OFF“, то выполняется автоэвакуация с включением резервного ВУ:
  1. Выполняется поиск резервного ВУ и его включение;
  2. Выполняется функция эвакуации всех виртуальных машин, находящихся на ВУ.
  1. Иначе (параметр „ALLOW_HOST_AUTO_POWER_OFF“ выставлен) выполняются следующие действия:
  1. Выполняется поиск на гипервизоре всех виртуальных машин, находящихся в статусе «Active»;
  2. Выполняется перезапуск ВУ узла с ожиданием таймаута, указанного в параметре „HOST_RESTART_TIMEOUT“;
  3. Опрашивается статус ВУ:
  • если статус – «up», то выполняется перезагрузка всех виртуальных машин вычислительного узла, которые находились в статусе «Active»;
  • если статус – «down», то выполняется автоэвакуация с включением резервного ВУ.

Сноски

[1]https://docs.openstack.org/nova/victoria/admin/evacuate.html
[2]https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vcenterhost.doc/GUID-98C18721-A4B0-4BD2-96BF-1BBC29391B3E.html
[3]https://sugerent.tistory.com/507
[4]https://docs.openstack.org/nova/pike/admin/manage-logs.html
[5]https://docs.openstack.org/nova/rocky/admin/evacuate.html