Модификации KVM для работы в кластере Архитектуры
Тезисы
При разработке масштабируемых решений мы столкнулись с необходимостью обеспечения отказустойчивой работы виртуализированных сервисов, а значит и динамического перераспределения виртуальных машин между физическими серверами.
К сожалению, человек не способен эффективно решать комбинаторные задачи сложнее трехмерных. На практике это означает следующее: если требуется максимально эффективно распределить виртуальные машины между серверами и параметров конфигурации больше трех (например - требуемое количество CPU, RAM, диска и пропускной способности сети), задача человеком решается неоптимально.
Мы построили Open Source распределенную систему, лишенную единственной точки отказа, позволяющую в автоматическом режиме динамически перераспределять виртуальные машины KVM между физическими серверами.
Наш алгоритм решает общеизвестную задачу наполнения рюкзака (https://ru.wikipedia.org/wiki/Задача_о_ранце) с учетом набора конфигурируемых критериев. Это значит, что любой системный администратор может самостоятельно задать набор требуемых для виртуальной машины KVM ресурсов, доступных мощностей на каждом физическом сервере, общее количество серверов в кластере, и далее не заботиться о доступности сервиса. В случае аварии или возникновения необходимости миграции виртуальная машина перезапускается автоматически.
Кроме того, наш алгоритм в автоматическим режиме позволяет запретить запуск виртуальных машин с одной ролью на одном физическом сервере. Это означает, что два фронтэнда nginx или MySQL Master и MySQL Slave никогда не будут запущены на одном физическом сервере. Таким образом мы снижаем вероятность отказа сервиса при внезапном выключении сервера.