Разные типы дисков на одной виртуальной машине: опыт 1cloud
В нашем блоге мы неоднократно рассказывали о построении инфраструктуры провайдера облачных сервисов и о том, как стараемся облегчать пользователям взаимодействие с ней. В частности, мы писали о функции управления дисковым пространством на лету — пользователи системы могут дозаказывать дополнительные диски для своих виртуальных серверов без их остановки.
Однако на этом пути мы столкнулись и с некоторыми сложностями — например, в первой версии данной функциональности было невозможно заказывать дополнительные SSD-диски. Сегодня мы поговорим о том, зачем вообще пользователям может понадобиться виртуальный сервер с дисками разных типов и о том, как данная функция работает в нашей системе.
Зачем это нужно
Разные типы дисков могут требоваться для решения различных задач. Использование дисков различных типов может быть оправданным при создании многоуровневых систем хранения данных — данные, которые часто используются приложениями, можно размещать на более быстрых дисках.
К примеру, если существует сервис, который активно работает с базой данных, то ее имеет смысл перенести на отдельный SSD-диск — это поможет оптимизировать скорость ее работы. При этом, саму операционную систему логично оставить на более медленных SAS-дисках, а для хранения оперативных резервных копий можно подключить к серверу еще более медленный, но дешевый и больший по объёму SATA-диск.
Одновременное использование различных типов дисков позволяет сделать общее инфраструктурное решение более гибким, эффективным и оптимизированным по цене.
Как это работает в 1cloud
Опустим рассказ о процессе закупки и установке дополнительных дисковых полок в наши дисковые массивы, а сразу перейдем к описанию работы новой функции.
Дисковое пространство выдается с массивов NetApp FAS6240 / FAS8040. На уровне vCloud Director организованы отдельные Storage policy под каждый тип. Начиная c vCloud Director версии 5.6 стало доступно (но только через API) изменение storage policy для конкретных дисков.
Для реализации данной функциональности нам пришлось немного пропатчить .net SDK от VMware, поскольку в нем была выявлена ошибка (при добавлении дополнительного диска SDK пытается создать еще одну шину с нулевым идентификатором).
Ниже представлен код, иллюстрирующий корректные настройки для добавления виртуального диска. Также в обязательном порядке нужно реализовать метод для расчета идентификаторов bus и unit (если вам интересна наша реализация метода получения идентификаторов — пишите в комментариях или личным сообщением):
VirtualDisk vDisk = new VirtualDisk(10240, BusType.SCSI, BusSubType.LSI_LOGIC_SAS);
vDisk.GetItemResource().Address = null;
vDisk.GetItemResource().AddressOnParent.Value = unit.ToString(); //unit number, надо вычислять
vDisk.GetItemResource().Parent.Value = bus.ToString(); //это привязка нового диска к существующей шине
UX для клиентов
Мы неоднократно писали о том, что стремимся сделать работу с виртуальной инфраструктурой максимально легкой даже для клиентов, которые не особенно разбираются в технологиях. Именно поэтому, в частности, в ходе редизайна сайта мы отказались от отдельной страницы с тарифами, реализовав простой конфигуратор, позволяющий клиенту самому подобрать себе сервер и тут же рассчитать цену.
Аналогичным образом мы стараемся облегчать и процесс заказа услуг — например, покупку нового сервера или создание частной сети можно провести всего в пару кликов. В случае новой функции по заказу дополнительных дисков мы пошли тем же путем — заказать новый накопитель можно со страницы сервера, в закладке «Настройки», подпункт «Диски»:
Планы
Изначально мы планировали добавить возможность дозаказа SSD и SAS дополнительных дисков, но в итоге реализовали и возможность покупки SATA. В наших ближайших планах также реализация облачного хранилища данных, балансировщика нагрузки и возможности заказа физических серверов.
В предыдущих сериях: