Использование аффинитетных групп Cloud2 для построения отказоустойчивых и высокопроизводительных систем

Новые виртуальные машины в Cloud2 размещаются на наименее загруженных узлах. Обычно, это то, что вы хотите и это работает отлично. Однако, бывают случаи, когда пользователи хотят, чтобы машины не размещались в едином домене отказа, то есть не выходили из строя одновременно при каких-либо проблемах в облаке, или, наоборот, пользователь может хотеть, чтобы машины размещались на одном хосте, чтобы уменьшить сетевую задержку между ними и увеличить полосу пропускания — в Cloud2 действует бэкбон-сеть между машинами одного аккаунта, которая в рамках одного хоста не имеет ограничений в 10Gbit/s.

В Cloud2 домен отказа — это вычислительный хост. При отказе хоста, машины размещенные на других хостах не подвержены проблеме. В настоящее время мы не используем разделяемые хранилища, поскольку стремимся обеспечивать высочайшие показатели IOPS и минимальные задержки при I/O, что не возможно с использованием удаленных, разделяемых хранилищ.

В настоящее время мы поддерживаем два вида групп условного размещения виртуальных машин (аффинитетных групп):

  • Host anti-affinity — размещает все машины, добавленные в нее на разные узлы, в настоящее время максимальное количество машин, которые можно указать в данной группе — 3;
  • Host affinity — размещает все машины на одном узле.

С помощью интерфейса CloudStack вы можете создавать аффинитетные группы, а при создании машин, можете помещать их в них. Каждая машина может быть в одной или более группах.

Пример 1. Создана host anti-affinity группа mysql-galera, в нее добавлено 3 узла db1, db2, db3. В результате, каждая машина будет размещена на уникальном узле Cloud2.

Пример 2. Создано две группы:

  • host anti-affinitymysql-master-slave,
  • host affinity: apps.

В группу mysql-master-slave добавлены виртуальные машины db-master, db-slave. В группу apps добавлены две машины db-master, app-server.

В результате app-server будет размещен на том же хосте, где и db-master, а db-slave будет размещен на хосте, отличном от того, где размещен db-master.

Рассмотрим работу с аффинитетными группами с помощью интерфейса CloudStack.

Создадим необходимые группы. Перейдем в раздел аффинитетных групп. Как видно, групп нет.

Создадим две группы из примера 2.

Создадим, три виртуальные машины, поместив их в нужные группы. Сначала app-server, который добавлен в группу app-at-master:

Затем db-slave в группе mysql-master-slave:

и db-master в групах mysql-master-slave и app-at-master:

Теперь, если кликнуть на группу и перейти в раздел View Instances, то можно увидеть машины, которые в группе находятся.