Product SiteDocumentation Site

26.6.6. Пулы Ceph

Пул — это логическая группа для хранения объектов. Он содержит набор объектов, известных как группы размещения (PG, pg_num).

26.6.6.1. Создание и редактирование пула

Создавать и редактировать пулы можно в командной строке или в веб-интерфейсе любого узла PVE в разделе УзелCephПулы.
Создание пула
Следующие параметры доступны при создании пула, а также частично при редактировании пула (в скобках приведены соответствующие опции команды pveceph pool create):
  • Имя — имя пула. Имя должно быть уникальным и не может быть изменено впоследствии;
  • Размер (-size) — количество реплик на объект. Ceph всегда пытается иметь указанное количество копий объекта (по умолчанию 3);
  • Режим автоматического масштабирования групп размещения — автоматический режим масштабирования PG пула. Если установлено значение warn, выводится предупреждающее сообщение, если в пуле неоптимальное количество PG (по умолчанию warn);
  • Добавить как хранилище (-add_storages) — настроить хранилище с использованием нового пула. Доступно только при создании пула (по умолчанию true);
  • Мин. Размер (-min_size) — минимальное количество реплик для объекта. Ceph отклонит ввод-вывод в пуле, если в PG меньше указанного количества реплик (по умолчанию 2);
  • Crush Rule (Правило Crush) (-crush_rule) — правило, используемое для сопоставления размещения объектов в кластере. Эти правила определяют, как данные размещаются в кластере;
  • # of PGs (Количество PG) (-pg_num) — количество групп размещения, которые должен иметь пул в начале (по умолчанию 128);
  • Целевое соотношение (-target_size_ratio) — соотношение ожидаемых данных в пуле. Автомасштабирование PG использует соотношение относительно других наборов соотношений. Данный параметр имеет приоритет над целевым размером, если установлены оба;
  • Целевой размер (-target_size) — предполагаемый объем данных, ожидаемых в пуле. Автомасштабирование PG использует этот размер для оценки оптимального количества PG;
  • Min # of PGs (Мин. количество PG) (-pg_num_min) — минимальное количество групп размещения. Этот параметр используется для точной настройки нижней границы количества PG для этого пула. Автомасштабирование PG не будет объединять PG ниже этого порогового значения.

Примечание

Не следует устанавливать min_size равным 1. Реплицированный пул с min_size равным 1 разрешает ввод-вывод для объекта, при наличии только одной реплики, что может привести к потере данных, неполным PG или ненайденным объектам.
Рекомендуется либо включить режим автоматического масштабирования PG (PG autoscaler), либо рассчитать количество PG на основе ваших настроек.
PG autoscaler может автоматически масштабировать количество PG для пула в фоновом режиме. Установка параметров Целевой размер или Целевое соотношение помогает PG Autoscaler принимать более обоснованные решения.
Команда создания пула в командной строке:
# pveceph pool create <pool-name> -add_storages

26.6.6.2. Пулы EC

Erasure coding (EC) — это метод коррекции ошибок, используемый для обеспечения надежности и восстановления данных в системах хранения. Основная цель EC — повысить доступность данных, минимизировав их избыточное копирование. Пулы EC могут предложить больше полезного пространства по сравнению с реплицированными пулами, но они делают это за счет производительности.
В классических реплицированных пулах хранится несколько реплик данных (size), тогда как в пуле EC данные разбиваются на k фрагментов данных с дополнительными m фрагментами кодирования (проверки). Эти фрагменты кодирования можно использовать для воссоздания данных, если фрагменты данных отсутствуют.
Количество фрагментов кодирования m определяет, сколько OSD может быть потеряно без потери данных. Общее количество хранимых объектов равно k + m.
Пулы EC можно создавать с помощью команды pveceph. При планировании пула EC необходимо учитывать тот факт, что они работают иначе, чем реплицированные пулы.
По умолчанию значение min_size для пула EC зависит от параметра m. Если m = 1, значение min_size для пула EC будет равно k. Если m > 1, значение min_size будет равно k + 1. В документации Ceph рекомендуется использовать консервативное значение min_size, равное k + 2.
Если доступно меньше, чем min_size OSD, любой ввод-вывод в пул будет заблокирован до тех пор, пока снова не будет достаточно доступных OSD.

Примечание

При планировании пула EC необходимо следить за min_size, так как он определяет, сколько OSD должно быть доступно. В противном случае ввод-вывод будет заблокирован.
Например, пул EC с k = 2 и m = 1 будет иметь size = 3, min_size = 2 и останется работоспособным, если один OSD выйдет из строя. Если пул настроен с k = 2, m = 2, будет иметь size = 4 и min_size = 3 и останется работоспособным, если один OSD будет потерян.
Команда для создания пула EC:
# pveceph pool create <pool-name> --erasure-coding k=<integer> ,m=<integer> \
[,device-class=<class>] [,failure-domain=<domain>] [,profile=<profile>]
В результате выполнения этой команды будет создан новый пул EC для RBD с сопутствующим реплицированным пулом для хранения метаданных (<pool name>-data и <pool name>-metada). По умолчанию также будет создано соответствующее хранилище. Если такое поведение нежелательно, отключить создание хранилища можно, указав параметр --add_storages 0. При настройке конфигурации хранилища вручную необходимо будет задать параметр data-pool, только тогда пул EC будет использоваться для хранения объектов данных.

Примечание

Необязательные параметры --size, --min_size и --crush_rule будут использоваться для реплицированного пула метаданных, но не для пула данных EC. Если нужно изменить min_size в пуле данных, это можно будет сделать позже. Параметры size и crush_rule нельзя изменить в пулах EC.
Изменить настройки профиля EC нельзя, в этом случае нужно создать новый пул с новым профилем.
Если необходимо дополнительно настроить профиль EC, можно создать его напрямую с помощью инструментов Ceph и указать профиль в параметре profile. Например:
# pveceph pool create <pool-name> --erasure-coding profile=<profile-name>
Существующий пул EC можно добавить в качестве хранилища в PVE:
# pvesm add rbd <storage-name> --pool <replicated-pool> --data-pool <ec-pool>

Примечание

Для любых внешних кластеров Ceph, не управляемых локальным кластером PVE, также следует указывать параметры keyring и monhost.

26.6.6.3. Удаление пула

Чтобы удалить пул в веб-интерфейсе, необходимо в разделе УзелCephПулы выбрать пул, который нужно удалить и нажать кнопку Уничтожить. Для подтверждения уничтожения пула, нужно в открывшемся диалоговом окне ввести имя пула и нажать кнопку Удалить:
Удаление пула
Команда для удаления пула:
# pveceph pool destroy <name>
Следующая команда уничтожит OSD (можно указать параметр -cleanup, чтобы дополнительно уничтожить таблицу разделов):
# pveceph osd destroy <ID>
Чтобы также удалить связанное хранилище следует указать опцию -remove_storages.

Примечание

Удаление пула выполняется в фоновом режиме и может занять некоторое время.

26.6.6.4. Автомасштабирование PG

Автомасштабирование PG позволяет кластеру учитывать объем (ожидаемых) данных, хранящихся в каждом пуле, и автоматически выбирать соответствующие значения pg_num.

Примечание

Может потребоваться активировать модуль pg_autoscaler:
# ceph mgr module enable pg_autoscaler
Список запущенных модулей можно посмотреть, выполнив команду:
# ceph mgr module ls
Автомасштабирование настраивается для каждого пула и имеет следующие режимы:
  • warn — предупреждение о работоспособности выдается, если предлагаемое значение pg_num слишком сильно отличается от текущего значения;
  • on — pg_num настраивается автоматически без необходимости ручного вмешательства;
  • off — автоматические корректировки pg_num не производятся, и предупреждение не выдается, если количество PG не является оптимальным.
Коэффициент масштабирования можно настроить с помощью параметров target_size, target_size_ratio и pg_num_min.