Когда виртуализацию изучают всерьёз — например, на лабораторных в вузе — первый «взрослый» вопрос всегда один: что произойдёт с виртуальными машинами, если упадёт сервер? Именно это спросили преподаватели кафедры защищённых систем связи СПбГУТ им. Бонч-Бруевича на нашей рабочей встрече: распространяется ли отказоустойчивость на пользовательские ВМ, а не только на сам центр управления. Вопрос точный — и ответ на него отличает зрелую платформу от набора скриптов поверх гипервизора.
Что такое отказоустойчивый кластер
Отказоустойчивый кластер (High Availability, HA) — это группа серверов-узлов, объединённых так, что отказ одного из них не приводит к долгому простою виртуальных машин. При отказе узла HA автоматически перезапускает его виртуальные машины на доступных узлах. Для самих машин это перерыв в работе: активные сессии прерываются, пользователи подключаются заново после загрузки гостевой ОС. Время восстановления зависит от конфигурации и загрузки ОС.
Ключевое слово здесь — автоматически. Отказоустойчивость измеряется не наличием резервного сервера, а тем, насколько предсказуемо и без участия человека система переживает аварию. И вот здесь у разных платформ всё устроено по-разному.
Что происходит с виртуальными машинами при отказе сервера
В Inscale режим HA включается при настройке кластера и распространяется на обычные пользовательские виртуальные машины, а не только на управляющие. При отказе сервера платформа автоматически перезапускает защищённые машины на доступных узлах. Восстановление каждой машины состоит из нескольких шагов: обнаружение отказа, безопасное переключение, повторная загрузка гостевой ОС и запуск приложений.
Машины на уцелевших серверах продолжают работать. Они продолжают работать и тогда, когда временно недоступно само управление, — но для новых подключений пользователей и операций администратора управляющие сервисы должны быть доступны. Поэтому управление в Inscale тоже распределено между несколькими серверами — об этом ниже.
Если сервис должен оставаться доступным даже на время перезапуска, его экземпляры размещают в разных виртуальных машинах на независимых серверах, а репликацию и переключение настраивают на уровне приложения.
Три условия автоматического перезапуска ВМ
Чтобы перезапуск сработал, должны выполняться три условия.
- Доступность дисков. Узел, на котором машина запустится заново, должен видеть её актуальные диски. Это даёт общее хранилище; машину на одиночном локальном диске перезапустить на другом сервере нельзя.
- Запас ресурсов. После потери любого одного сервера оставшимся должно хватить процессора, памяти и производительности хранилища. Для одинаковых серверов обычно закладывают N+1; для разнородных проверяют размещение после отказа каждого узла. В VDI отдельно считают утренний «шторм входов», когда к рабочей нагрузке добавляется одновременная загрузка машин потерянного хоста.
- Защита от двойного запуска. Перед аварийным запуском платформа должна убедиться, что прежний экземпляр остановлен или отрезан от общих дисков, — за это отвечает механизм изоляции (fencing).
Split-Brain: самый коварный сценарий
Худший случай в кластере — это не падение узла, а Split-Brain: ситуация, когда хосты теряют сетевую связь друг с другом, но при этом все живы и подключены к общей системе хранения. Без правильной обработки два узла могут одновременно решить, что они «главные», и запустить одну и ту же ВМ дважды — с повреждением данных на общем хранилище.
Защиту от одновременного запуска машины на двух серверах обеспечивают кворум и механизм изоляции (fencing): прежде чем запустить машину заново, платформа должна убедиться, что прежний экземпляр остановлен или отрезан от общих дисков. Это третье из условий выше, и на пилоте его проверяют отдельно: сервер оставляют работающим, отключают ему сеть управления и смотрят, что происходит с его машинами.
Для учебной среды это отличная иллюстрация того, почему отказоустойчивость — это про дисциплину принятия решений, а не про дублирование серверов.
Отказоустойчивость и катастрофоустойчивость — не одно и то же
Важно не путать два уровня защиты:
- Отказоустойчивость (HA) — защита внутри одной площадки: отказал узел — его виртуальные машины перезапускаются на соседних.
- Катастрофоустойчивость (DR) — защита от потери всей площадки: резервный ЦОД, репликация или восстановление из резервных копий.
Это разные задачи и разные механизмы, и проектируют их отдельно. О том, из каких компонентов вообще складывается такая платформа, мы подробно рассказали в разборе российской системы виртуализации, а про ядро, на котором всё это работает, — в статье про российский гипервизор на базе KVM.
Как проверить отказоустойчивость на пилоте
Программу испытаний согласуют до старта: для каждого отказа задают ожидаемый результат и время восстановления, а измеряют готовность приложения или рабочего места, а не факт «машина запущена». Минимальный набор проверок:
- отказ хоста по питанию — перезапуск машин и время до готовности рабочих мест;
- изоляция хоста — отключение сети управления при работающем сервере, проверка защиты от двойного запуска;
- отказ управляющего экземпляра и его узла — кворум, консоль, новые подключения;
- потеря пути к хранилищу, затем полная недоступность хранилища;
- отказ сетевого интерфейса и коммутатора;
- обновление платформы под рабочей нагрузкой;
- отказ хоста в момент массового входа пользователей.
Пилот должен повторять целевую архитектуру: приёмку трёхузловой схемы проводят на трёх серверах, а не на двух.
Почему это важно для бизнеса и для учёбы
Для бизнеса отказоустойчивый кластер — это прямая экономия: час простоя критичного сервиса часто стоит дороже, чем вся лицензия на платформу за год. Для вуза — это лучший учебный полигон: студенту полезно своими руками «убить» узел и увидеть, как виртуальные машины перезапускаются на других узлах, как срабатывает защита от двойного запуска и как управление сохраняет кворум.
Именно поэтому мы бесплатно даём вузам платформу для практики: отказоустойчивость нельзя понять по слайдам — её нужно ломать и чинить руками.
Если вы выбираете платформу виртуализации и для вас критичен непрерывный сервис — напишите нам: покажем на демо-стенде, как ведёт себя HA-кластер при отказе узла.
HA-кластер Inscale — отказоустойчивость виртуальных машин.