Перейти к содержанию

Обеспечение высокой доступности (high availability)#

Описание механизма высокой доступности#

Механизм обеспечения высокой доступности (далее – Механизм НА) является набором автоматических характеристик, спроектированных для учёта ситуаций (проблем), которые делают серверы недоступными, а также для безопасного восстановления функционирования пула после таких ситуаций. Механизм HA применяется для автоматического восстановления административного контроля над пулом в случае, если мастер пула становится недоступным или его работа становится нестабильной.

Обязательное использование механизма HA

Механизм НА должен ВСЕГДА использоваться в системах с многоканальным подключением к хранилищу (multipathing) и агрегацией сетевых интерфейсов. При этом настройка Multipathing и агрегированных сетевых интерфейсов должна производиться до активации высокой доступности.

Примеры применения механизма HA#

Механизм HA используется при нестабильной работе или недоступности сервера (например, при физических разрывах передачи данных по сети или неполадок аппаратного обеспечения хоста). В этом случае запущенные ВМ прекращают работу на текущем сервере и возобновляют работу на другом стабильном сервере. Для удобства последовательного запуска сервисов ВМ могут распределяться в группы по приоритетам запуска (это даёт возможность сначала запускать административные ВМ, затем зависящие от них ВМ. Например, запускать сервер DHCP раньше, чем зависящий от него сервер SQL). При этом можно избежать сценария, когда ВМ начинают работу (автоматически или вручную) на новом сервере, а предыдущий их сервер восстанавливает работу, что может привести к запуску экземпляров ВМ на разных серверах с высокой вероятностью порчи и потери данных ВМ.

Также механизм HA защищает от переполнения пула. Пул считается переполненным (overcommitted), если работающие ВМ не могут перезапуститься на одном из прочих серверов пула вследствие достижения в пуле критического количества отказов хостов. Данный показатель задаётся администратором.

Подробнее про защиту от переполнения пула

Переполнение происходит, если не хватает свободной оперативной памяти в пуле для запуска ВМ, испытывающих отказ. Могут существовать другие малозаметные изменения, ухудшающие работу НА: изменения в виртуальных блочных устройствах (VBD) и сетях могут повлиять на выбор хоста, на котором будет перезапущена ВМ. В настоящий момент Numa vServer не может контролировать все действия, которые ведут к нарушению требований работы НА. При нарушении работы НА высылается асинхронное уведомление.

Numa vServer в реальном времени разрабатывает и осуществляет план обеспечения отказоустойчивости серверов в пуле (failover plan), определяющий действия в случае отказа некоторого количества серверов пула за некоторое заданное время. Важным для понимания является параметр максимального некритического количества отказов хостов (host failures to tolerate). Например, если пул ресурсов состоит из 6 серверов и некритическое количество отказов равняется 3, то пул рассчитывает план обеспечения отказоустойчивости, который позволяет при отказе любых трёх серверов продолжить работу ВМ на других серверах. Если отказывает большее количество, пул считается переполненным. План динамически пересчитывается с учётом анализа операций рабочего цикла и миграций ВМ. Если в процессе изменений (например, добавления новых ВМ в пул) появляется опасность переполнения пула, то система может выслать предупреждение (например, по электронной почте).

Предупреждение о переполнении

Если при старте или продолжении работы ВМ пул переполняется (overcommitted), система предупреждает об этом. Это предупреждение отображается при отсутствии доступного графического интерфейса в терминал API. Если заданы соответствующие настройки, сообщение может быть отправлено администратору по электронной почте. Затем будет предложено закончить операцию или продолжить ее. Продолжение операции приведет к переполнению пула. Количество информации, используемой ВМ с различными приоритетами, будет отображено в пуле и на хостах.

Изоляция сервера

В случае если происходит отказ сервера, теряется структура коммутации сети или возникает проблема с управляющим стеком, сервер самоизолируется (самоогораживается) для того, чтобы исключить запуск одних ВМ на двух серверах одновременно. После запуска изоляции сервер немедленно перезагружается, а работа всех ВМ прекращается. Остальные серверы регистрируют остановку ВМ и далее ВМ перезагружаются в соответствии с определенными для них приоритетами. Изолированный сервер начинает процесс перезагрузки и после перезапуска пытается войти заново в пул ресурсов.

Требования к конфигурации механизма HA#

Конфигурация инфраструктуры#

Для настройки механизма HA необходимо наличие:

  • пула из не менее чем 3 серверов (обеспечивает высокую доступность на уровне сервера в рамках одного пула ресурсов);
  • статические IP-адреса для всех серверов;
  • общее хранилище, доступное по протоколам iSCSI, NFS, SMB или Fibre Channel, для создания служебных томов (heartbeat SR) объемом 365 Mб или более.

    Механизм высокой доступности создаёт два тома на heartbeat SR:

    • том объёмом 4 Мбайт на heartbeat;
    • том объёмом 256 Мбайт для хранения метаданных мастера пула, которые будут использованы в случае отказа мастера.

    Примечания

    1. Для большей надежности настоятельно рекомендуется для heartbeat SR использовать общие хранилища данных на основе протоколов NFS или iSCSI, которые не используются в других целях.
    2. Хранилище, подключенное с использованием протоколов SMB или iSCSI, при проверке подлинности с использованием CHAP не может использоваться в качестве heartbeat SR.
    3. В случае использования хранилищ на основе NetApp или EqualLogic необходимо вручную задать адрес дискового устройства (LUN) NFS или iSCSI в массиве данных для использования в качестве хранилища под heartbeat SR.
  • для максимальной надежности рекомендуется использовать выделенный сетевой интерфейс для сети управления высокой доступностью.

Конфигурация ВМ#

Чтобы виртуальная машина была защищена механизмом высокой доступности, она должна быть мобильной. Это означает, что:

  • виртуальные диски ВМ должны быть в общем хранилище. Можно использовать любой тип общего хранилища. Только для диска на основе iSCSI, NFS или Fibre Chanel, который предполагается использовать для heartbeat SR, требуется номер логического устройства (Logical Unit Number, LUN). Опционально эти диски также могут быть использованы в качестве обычных виртуальных дисков;
  • ВМ могут использовать живую миграцию;
  • у ВМ отсутствует соединение с физическими DVD-приводом и USB-устройствами;
  • у ВМ есть собственные виртуальные сетевые интерфейсы в сети пула.

Примечание

При включенном механизме НА настоятельно рекомендуется заранее агрегировать интерфейс управления на серверах пула, а также использовать многопоточные (multipath) хранилища в основе heartbeat SR.

При создании VLAN и агрегированных интерфейсов они могут оказаться не подключенными. В этой ситуации ВМ не будут под защитой механизма НА. В этом случае нужно использовать команду xe pif-plug для ввода VLAN и PIF-объектов агрегаций сервера в действие, благодаря чему ВМ смогут стать мобильными. Точно определить, почему ВМ не являются мобильными, можно, используя команду xe diagnostic-vm-status для анализа существующих ограничений.

Активация механизма высокой доступности в пуле#

Для включения механизма HA для выбранного пула выполните следующую последовательность действий:

  1. Убедитесь, что пул состоит не менее чем из трех серверов.
  2. Проверьте, что к пулу присоединено совместимое общее хранилище данных. Совместимыми являются хранилища на основе протоколов iSCSI, NFS или Fibre Channel (подробнее см. Создание и настройка хранилищ данных).
  3. Для каждой виртуальной машины, которую необходимо защитить, установите приоритет перезапуска и порядок запуска:

    xe vm-param-set uuid=<vm_uuid> ha-restart-priority=<restart|best-effort> order=<число>
    

    Приоритет и порядок запуска ВМ

    Подробнее про:

  4. Включите механизм HA в пуле и при необходимости укажите время ожидания:

    xe pool-ha-enable heartbeat-sr-uuids=<sr-uuid> ha-config:timeout=<время-в-секундах>
    
    где heartbeat-sr-uuids – UUID общего хранилища;
    timeout – это период, в течение которого сеть или хранилище недоступны узлам в пуле.

    Если не указать timeout при включении высокой доступности, то timeout по умолчанию будет 30 секунд. Если какой-либо сервер не может получить доступ к сети или хранилищу в течение времени ожидания, он самостоятельно перезапустится.

  5. Выполните команду, которая вернет максимальное количество отказов хоста, допустимое с точки зрения механизма HA:

    xe pool-ha-compute-max-host-failures-to-tolerate
    

    Допустимое (некритическое) количество отказов определяется моментом отправки тревоги: система пересчитывает план отказоустойчивости в зависимости от изменения состояния пула и таким образом система определяет объём памяти пула для определения количества некритических отказов для надежной работы защищенных ВМ. Система сигнализирует о тревоге, если расчетный уровень падает ниже заданного для ha-host-failures-to-tolerate.

  6. Задайте значение параметра допустимого количества отказов в пуле. Оно должно быть не более рассчитанного на предыдущем шаге значения:

    xe pool-param-set ha-host-failures-to-tolerate=<допустимое-число-отказов-серверов> uuid=<pool-uuid>
    

Обратите внимание

При активации механизма НА некоторые операции, которые могут негативно сказаться на плане перезапуска ВМ (например, извлечение сервера из пула), могут бездействовать.

Отключения механизма высокой доступности в пуле#

Для отключения механизма высокой доступности в пуле выполните команду:

xe pool-ha-disable

Приоритет запуска и перезапуска ВМ#

Виртуальные машины могут иметь приоритеты запуска protected (защищенная), best-effort (лучшая попытка) или unprotected (незащищенная). Приоритет задается через параметр ha-restart-priority в настройках виртуальной машины. Поведение перезапуска для виртуальных машин в каждом приоритете отличается.

Для задания значение свойства ha-restart-priority виртуальной машины выполните команду:

xe vm-param-set uuid=<vm_uuid> ha-restart-priority=<restart|best-effort|пустая-строка> 

Обратите внимание

Если в пуле возникают сбои сервера и число допустимых сбоев падает до нуля, защищенным виртуальным машинам не гарантируется запуск. В таких случаях генерируется системное предупреждение. Если происходит другой сбой, все виртуальные машины, для которых установлен приоритет protected, ведут себя в соответствии с приоритетом best-effort.

Примечание

Механизм высокой доступности никогда не останавливает и не мигрирует работающие виртуальные машины для освобождения ресурсов в пуле для запуска виртуальных машин с приоритетами protected и best-effort.

Приоритет protected#

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

Если защищенная виртуальная машина не может быть запущена (например, при переполнении пула), механизм высокой доступности будет пытаться запустить виртуальную машину до тех пор, пока ВМ не запустится на освободившихся или дополнительных ресурсах пула.

Значение: ha-restart-priority=restart

Приоритет best-effort#

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

Попытка запуска выполняется один раз, если она не удалась, то ВМ остается в выключенном состоянии и попытки запуска больше не выполняются.

Значение: ha-restart-priority=best-effort

Приоритет unprotected#

Если незащищенная виртуальная машина или сервер, на котором она работает, остановлена, механизм высокой доступности не будет пытаться перезапустить виртуальную машину.

Значение: ha-restart-priority=<пустая-строка>

Порядок запуска ВМ#

Порядок запуска – это порядок, в котором серверы с включенным механизмом HA будут пытаться перезапустить защищенные ВМ при возникновении сбоя. Порядок запуска задается в параметре order для каждой защищенной ВМ с помощью команды:

xe vm-param-set uuid=<vm_uuid> order=<число>
где order – целое число. Значение по умолчанию равно 0, что является наивысшим приоритетом. Защищенные ВМ со значением order=0 перезапускаются первыми. Чем выше значение свойства order, тем позже в последовательности перезапускается виртуальная машина.

Задать параметр order можно каждой ВМ, но механизм HA использует этот параметр только для защищенных ВМ.

Вывод ВМ из механизма высокой доступности#

Для вывода ВМ из механизма высокой доступности выполните:

xe vm-param-set ha-always-run=false uuid=<vm-uuid>

При необходимости можно снова включить высокую доступность для виртуальной машины, установив для параметра ha-restart-priority значение restart или best-effort.

xe vm-param-set uuid=<vm-uuid> ha-restart-priority=<restart|best-effort>

Восстановление недоступного сервера#

Если по какой-то причине сервер не может получить доступ к файлу состояния высокой доступности, то возможно он стал недоступен. Для восстановления недоступного сервера сначала деактивируйте высокую доступность следующей командой:

xe host-emergency-ha-disable --force

Если сервер был мастером пула, он должен возобновить работу с деактивированной высокой доступностью. Подчиненные серверы соединяются заново и автоматически деактивируют высокую доступность. Если сервер был подчиненным участником пула и не может соединиться с мастером, принудительно перезагрузите сервер как мастер пула и/или направьте к новому мастеру:

xe pool-emergency-transition-to-master uuid=<host-uuid>
xe pool-emergency-reset-master master-address=<new-master-hostname-or-ip-address>

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

xe pool-ha-enable heartbeat-sr-uuid=<sr-uuid>

Выключение сервера при активированном механизме высокой доступности#

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

  1. Деактивируйте сервер:
    xe host-disable host=<host-name>
    
  2. Извлеките сервер:
    xe host-evacuate uuid=<host-uuid>
    
  3. Завершите его работу.
    xe host-shutdown host=<host-name>
    

Возможные ошибки#

Ошибки при работе с Multipathing и агрегированными сетевыми интерфейсами#

Механизм НА спроектирован для работы с многоканальным подключением хранилищ и агрегированными сетевыми интерфейсами, и они должны быть сконфигурированы ПЕРЕД активацией НА. Если этого не было сделано, то вследствие нестабильности сетевого оборудования может возникнуть непредвиденное поведение хоста при перезагрузке (так называемое самоизолирование, selffensing).

Сбой мастера пула#

При возникновении сбоя мастер-сервера:

  1. Замените вышедшего из строя мастера пула работающим рядовым сервером. Для этого в консоли рядового сервера выполните:
    xe pool-emergency-transition-to-master
    
  2. Подключите остальные серверы к новому мастеру пула:
    xe pool-recover-slaves
    
  3. Перезапустите ВМ, которые находились на вышедшем из строя сервере:
    xe vm-reset-powerstate vm=<vm_uuid> --force
    

Ошибка "The uuid you supplied was invalid"#

В случае получения сообщения 'The uuid you supplied was invalid' последовательно выполните следующие команды:

xe host-emergency-ha-disable --force
xe-toolstack-restart
xe pool-ha-disable

Изменение IP-адреса сервера при включенном механизме HA#

Если IP-адрес сервера изменяется, когда включена высокая доступность, механизм высокой доступности предположит, что сеть хоста вышла из строя. Изменение IP-адреса может заблокировать хост и оставить его в не загружаемом состоянии. Чтобы исправить эту ситуацию:

  1. Отключите механизм высокой доступности:
    xe host-emergency-ha-disable
    
  2. Сбросьте мастера пула:
    xe pool-emergency-reset-master
    
  3. Затем снова включите высокую доступность:
    xe pool-ha-enable heartbeat-sr-uuids=<sr_uuid>
    

Выключение ВМ с приоритетом protected#

ВМ с приоритетом protected не может завершить работу при активированной высокой доступности в пуле. Для корректного завершения работы ВМ:

  1. Деактивируйте высокую доступность в пуле
    xe pool-ha-disable
    
  2. Выключите ВМ
    xe vm-shutdown uuid=<vm-uuid>
    

Примечание

Если завершить работу ВМ из гостевой системы, то ВМ автоматически перезапустится. Для завершения работы следует сначала деактивировать высокую доступность в параметрах ВМ.