Переподписка в динамическом выделении ёмкости

OpenStack Block Storage позволяет выбирать бэкенд томов на основе виртуальных ёмкостей для динамического выделения ресурсов с использованием коэффициента переподписки.

Механизм переподписки позволяет администраторам выделять больше виртуальной ёмкости хранилища, чем физически доступно в системе. Это особенно полезно при использовании технологии динамического выделения ёмкости (thin provisioning), когда физическое пространство выделяется только по мере записи данных, а не резервируется заранее.

Референсная реализация предоставляется для драйвера LVM по умолчанию. В примерах ниже используется драйвер LVM для демонстрации работы с переподпиской.

Настройка параметров переподписки

Для поддержки переподписки при динамическом выделении ресурсов в файл cinder.conf введён параметр max_over_subscription_ratio. Этот параметр представляет собой вещественное число, определяющее коэффициент переподписки при использовании динамического выделения ресурсов.

Значение по умолчанию составляет 20.0, что означает, что выделенная ёмкость может в 20 раз превышать общую физическую ёмкость. Коэффициент 10.5 означает, что выделенная ёмкость может в 10.5 раз превышать общую физическую ёмкость. Коэффициент 1.0 означает, что выделенная ёмкость не может превышать общую физическую ёмкость. Значение коэффициента ниже 1.0 игнорируется, и вместо него используется значение по умолчанию.

Этот параметр также можно установить как max_over_subscription_ratio=auto. При использовании значения auto Cinder автоматически рассчитывает max_over_subscription_ratio на основе выделенной ёмкости и используемого пространства. Это позволяет создавать большее количество томов в начале жизненного цикла пула и начинать ограничивать создание томов по мере приближения свободного места к нулю или зарезервированному лимиту.

Примечание

Параметр max_over_subscription_ratio можно настроить для каждого бэкенда при включении нескольких бэкендом хранилища. Он предоставляется как референсная реализация и используется драйвером LVM. Однако использование этого параметра из cinder.conf не является обязательным требованием для драйвера.

Для драйверов, поддерживающих несколько пулов на один бэкенд, параметр max_over_subscription_ratio предназначен для настройки бэкенда в целом. Такие драйверы могут сообщать этот коэффициент для каждого пула отдельно. Драйвер LVM не поддерживает несколько пулов.

При установке значения auto рассчитываемые Cinder значения могут динамически изменяться в зависимости от выделенной ёмкости пула и потребляемого пространства.

Существующий флаг reserved_percentage используется для предотвращения чрезмерного выделения ресурсов. Этот флаг представляет процент ёмкости бэкенда, который зарезервирован.

Примечание

Изменился способ использования reserved_percentage. Раньше он измерялся относительно свободной ёмкости. Теперь он измеряется относительно общей ёмкости.

Возможности драйверов

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

  • thin_provisioning_support = True (или False)

  • thick_provisioning_support = True (или False)

  • provisioned_capacity_gb = PROVISIONED_CAPACITY

  • max_over_subscription_ratio = MAX_RATIO

Где PROVISIONED_CAPACITY — это видимое выделенное пространство, указывающее, сколько ёмкости было выделено, а MAX_RATIO — максимальный коэффициент переподписки. Для драйвера LVM это значение max_over_subscription_ratio из cinder.conf.

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

Драйвер LVM сообщает thin_provisioning_support=True и thick_provisioning_support=False, если флаг lvm_type в cinder.conf установлен как thin. В противном случае он сообщает thin_provisioning_support=False и thick_provisioning_support=True.

Дополнительные спецификации типа тома

Если тип тома предоставляется как часть запроса на создание тома, он может иметь следующие определённые дополнительные спецификации:

  • 'capabilities:thin_provisioning_support': '<is> True' или '<is> False'

  • 'capabilities:thick_provisioning_support': '<is> True' или '<is> False'

Примечание

Ключ области capabilities перед thin_provisioning_support и thick_provisioning_support не является обязательным. Поэтому также работают следующие варианты:

  • 'thin_provisioning_support': '<is> True' или '<is> False'

  • 'thick_provisioning_support': '<is> True' или '<is> False'

Указанные выше дополнительные спецификации используются планировщиком для поиска бэкенда, который поддерживает динамическое выделение ресурсов, обычное выделение ресурсов или оба варианта в соответствии с потребностями конкретного типа тома.

Дополнительные спецификации репликации томов

OpenStack Block Storage имеет возможность создавать реплики томов. Администраторы могут определить политику хранения, включающую репликацию, настроив драйвер томов Cinder. Репликация томов для OpenStack Block Storage помогает защитить среды OpenStack от потери данных во время аварийного восстановления.

Чтобы включить репликацию при создании типов томов, настройте том Cinder с параметром capabilities:replication="<is> True".

Каждый том, созданный с возможностью репликации, установленной в True, создаёт копию тома на бэкенд хранилища.

Один из вариантов использования репликации включает облачную среду OpenStack, установленную в двух центрах обработки данных, расположенных рядом друг с другом. Расстояние между двумя центрами обработки данных в этом варианте использования составляет длину города.

В каждом центре обработки данных узел Cinder поддерживает службу Block Storage. Оба центра обработки данных включают бэкенд хранилища.

В зависимости от требований к хранению может быть один или два узла Cinder. Администратор обращается к файлу конфигурации /etc/cinder/cinder.conf и устанавливает capabilities:replication="<is> True".

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

Фильтр ёмкости

В фильтре ёмкости max_over_subscription_ratio используется при выборе бэкенда, если thin_provisioning_support равен True и max_over_subscription_ratio больше 1.0.

Фильтр ёмкости учитывает коэффициент переподписки при принятии решения о размещении тома. Если бэкенд поддерживает динамическое выделение ресурсов и имеет коэффициент переподписки больше единицы, фильтр будет учитывать виртуальную ёмкость вместо физической при проверке доступного места.

Взвешиватель ёмкости

Во взвешивателе ёмкости виртуальная свободная ёмкость используется для ранжирования, если thin_provisioning_support равен True. В противном случае будет использоваться реальная свободная ёмкость, как и раньше.

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