Product SiteDocumentation Site

26.6.6. Пулы Ceph

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

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

Создавать и редактировать пулы можно как в командной строке, так и в веб-интерфейсе любого узла PVE в разделе УзелCephПулы.
Создание пула
При создании пула (а также частично при его редактировании) доступны следующие параметры (в скобках приведены соответствующие опции команды pveceph pool create):
  • Имя — уникальное имя пула (не может быть изменено после создания);
  • Размер (-size) — количество реплик на объект. Ceph всегда пытается поддерживать указанное количество копий каждого объекта (по умолчанию 3);
  • Режим автоматического масштабирования групп размещения — режим автоматического масштабирования PG для пула. При значении warn выводится предупреждение, если количество PG в пуле неоптимально (по умолчанию on);
  • Добавить как хранилище (-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) — ожидаемый объём данных пула (используется для автомасштабирования);
  • Min # of PGs (Мин. количество PG) (-pg_num_min) — минимальное число PG при автомасштабировании. Используется для задания нижней границы количества PG; autoscaler не будет объединять PG ниже этого значения.

Примечание

Не рекомендуется устанавливать min_size=1, так как это приведёт к потере данных при отказе одного OSD.
Рекомендуется либо включить режим автоматического масштабирования PG (PG autoscaler), либо рассчитать количество PG вручную.
PG autoscaler может автоматически изменять количество 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. При их планировании следует учитывать, что они работают иначе, чем реплицированные пулы.
По умолчанию значение min_size для EC-пула зависит от параметра m:
  • если m = 1, min_size = k;
  • если m > 1, min_size = k + 1.
В документации Ceph рекомендуется использовать более консервативное значение min_size = k + 2.
Если доступно меньше OSD, чем указано вmin_size, все операции ввода-вывода в пуле будут заблокированы до восстановления достаточного количества доступных OSD.

Примечание

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

Примечание

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

Примечание

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

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

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

Примечание

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

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

Модуль pg_autoscaler автоматически подбирает оптимальное количество PG.

Примечание

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