2.3.8 Распределение виртуальных машин по гипервизорам

Одна из функций службы планировщика (nova-scheduler) – определение, на каком хосте или узле должна запускаться виртуальная машина (ВМ).

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

В конфигурации по умолчанию служба планировщика (nova-scheduler) рассматривает хосты, соответствующие следующим критериям (фильтрам):

  • хосты находятся в запрошенной зоне доступности (AvailabilityZoneFilter);
  • запрос может обслуживаться, при условии, что служба nova-compute, обрабатывающая целевой узел, доступна и не отключена (ComputeFilter);
  • удовлетворяются условия дополнительных спецификаций, связанных с типом ВМ (ComputeCapabilitiesFilter);
  • удовлетворяются любые свойства архитектуры, типа гипервизора или режима ВМ, указанные в свойствах образа ВМ (ImagePropertiesFilter);
  • виртуальные машины находятся на разных хостах с другими ВМ группы (при требовании) (ServerGroupAntiAffinityFilter);
  • находятся в наборе групповых хостов (при требовании) (ServerGroupAffinityFilter).

Служба выбирает новый хост, когда ВМ переносится, изменяется, эвакуируется или не размещается после выгрузки.

При эвакуации экземпляров с хоста служба планировщика выполняет проверку целевого хоста, определенного администратором в команде nova evacuate. Если целевой узел не определен администратором, планировщик определяет целевой узел самостоятельно.

Планировщик Nova, известный как планировщик фильтров, поддерживает фильтрацию и взвешивание для принятия обоснованных решений о том, где должна быть размещена новая ВМ.

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

Параметр „filter_scheduler.available_filtersconfig“ предоставляет службе вычислений список фильтров, доступных для использования планировщиком. Параметр по умолчанию определяет все фильтры, включенные в службу вычислений.

Параметр „filter_scheduler.enabled_filters“ конфигурации в nova.conf определяет список фильтров, применяемых службой nova-scheduler.

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

[filter_scheduler]
available_filters = nova.scheduler.filters.all_filters
enabled_filters = AvailabilityZoneFilter,
ComputeFilter,
ComputeCapabilitiesFilter,
ImagePropertiesFilter,
ServerGroupAntiAffinityFilter,
ServerGroupAffinityFilter

2.3.9 Функционал живой миграции для разных архитектур

Живая миграция включена по умолчанию и настраивается в процессе автоматизированного разворачивания ОП TIONIX.

Функционал живой миграции подразумевает необходимость доступа к диску ВМ с разных вычислительных узлов.

Если развертывание выполняется «вручную», то необходимо настроить libvirt и nova.conf.

Имеют значение используемые процессоры на вычислительных узлах. Если инструкции/модель процессоров отличаются, то необходимо выставить наиболее старшую модель виртуального процессора, например (/etc/nova.conf):

[libvirt]
cpu_mode = custom
cpu_model = IvyBridge-IBRS

Посмотреть модели процессоров qemu можно с помощью команды:

# virsh cpu-models x86_64

2.3.9.1 Эфемерные диски

Локальные диски

Для дисков, расположенных локально (в /var/lib/nova/instances/) на каждом отдельно взятом гипервизоре, живая миграция недоступна.

Общее хранилище

Общее хранилище (shared-storage) – например NFS, примонтированный на всех вычислительных узлах (в /var/lib/nova/instances/), позволяет использовать функционал живой миграции.

2.3.9.2 Cinder диски

Для Cinder дисков доступность живой миграции определяется поддержкой драйвера хранилища. В подавляющем большинстве случаев миграция поддерживается и обеспечивается переносом подключения диска (FC-/iSCSI- LUN, RBD volume) с одного вычислительного узла на другой, с помощью драйвера Cinder.