forked from vitalif/vitastor
319 lines
14 KiB
Markdown
319 lines
14 KiB
Markdown
[Документация](../../README-ru.md#документация) → [Конфигурация](../config.ru.md) → Конфигурация пулов
|
||
|
||
-----
|
||
|
||
[Read in English](pool.en.md)
|
||
|
||
# Конфигурация пулов
|
||
|
||
Настройки пулов задаются в ключе etcd `/vitastor/config/pools` в JSON-формате:
|
||
|
||
```
|
||
{
|
||
"<Численный ID>": {
|
||
"name": "<имя>",
|
||
...остальные параметры...
|
||
}
|
||
}
|
||
```
|
||
|
||
На настройку пулов также влияют:
|
||
|
||
- [Дерево размещения OSD](#дерево-размещения)
|
||
- [Настройки отдельных OSD](#настройки-osd)
|
||
|
||
Параметры:
|
||
|
||
- [name](#name)
|
||
- [scheme](#scheme)
|
||
- [pg_size](#pg_size)
|
||
- [parity_chunks](#parity_chunks)
|
||
- [pg_minsize](#pg_minsize)
|
||
- [pg_count](#pg_count)
|
||
- [failure_domain](#failure_domain)
|
||
- [max_osd_combinations](#max_osd_combinations)
|
||
- [block_size](#block_size)
|
||
- [bitmap_granularity](#bitmap_granularity)
|
||
- [immediate_commit](#immediate_commit)
|
||
- [pg_stripe_size](#pg_stripe_size)
|
||
- [root_node](#root_node)
|
||
- [osd_tags](#osd_tags)
|
||
- [primary_affinity_tags](#primary_affinity_tags)
|
||
- [scrub_interval](#scrub_interval)
|
||
|
||
Примеры:
|
||
|
||
- [Реплицированный пул](#реплицированный-пул)
|
||
- [Пул с кодами коррекции ошибок 2+1](#пул-с-кодами-коррекции-ошибок)
|
||
|
||
# Дерево размещения
|
||
|
||
Дерево размещения OSD задаётся в отдельном ключе etcd `/vitastor/config/node_placement`
|
||
в следующем JSON-формате:
|
||
|
||
`
|
||
{
|
||
"<имя узла или номер OSD>": {
|
||
"level": "<уровень>",
|
||
"parent": "<имя родительского узла, если есть>"
|
||
},
|
||
...
|
||
}
|
||
`
|
||
|
||
Здесь, если название узла - число, считается, что это OSD. Уровень OSD
|
||
всегда равен "osd" и не может быть переопределён. Для OSD вы можете только
|
||
переопределить родительский узел. По умолчанию родителем OSD считается его хост.
|
||
|
||
Нечисловые имена узлов относятся к другим узлам дерева OSD, таким, как хосты (серверы),
|
||
стойки, датацентры и так далее.
|
||
|
||
Хосты всех OSD автоматически создаются в дереве с уровнем "host" и именем, равным имени хоста,
|
||
сообщаемым соответствующим OSD. Вы можете ссылаться на эти хосты, не заводя их
|
||
в дереве вручную.
|
||
|
||
Уровень может быть "host", "osd" или относиться к другому уровню размещения из
|
||
[placement_levels](monitor.ru.md#placement_levels).
|
||
|
||
Родительский узел нужен только для промежуточных узлов дерева.
|
||
|
||
# Настройки OSD
|
||
|
||
Настройки отдельных OSD задаются в ключах etcd `/vitastor/config/osd/<number>`
|
||
в JSON-формате `{"<key>":<value>}`.
|
||
|
||
На данный момент поддерживаются две настройки:
|
||
|
||
- [reweight](#reweight)
|
||
- [tags](#tags)
|
||
|
||
## reweight
|
||
|
||
- Тип: число, от 0 до 1
|
||
- По умолчанию: 1
|
||
|
||
Каждый OSD получает число PG, пропорциональное его размеру. Reweight - это
|
||
множитель для размера, используемый в процессе распределения PG.
|
||
|
||
Это значит, что OSD, сконфигурированный с reweight меньше 1 будет получать
|
||
меньше PG, чем обычно. OSD с reweight, равным 0, не будет участвовать в
|
||
хранении данных вообще. Вы можете установить reweight в 0, чтобы убрать
|
||
все данные с OSD.
|
||
|
||
## tags
|
||
|
||
- Тип: строка или массив строк
|
||
|
||
Задаёт тег или набор тегов для данного OSD. Теги можно использовать, чтобы
|
||
делить OSD на множества и потом размещать пул только на части OSD, а не на
|
||
всех. Можно, например, пометить SSD OSD тегом "ssd", а HDD тегом "hdd", в
|
||
этом смысле теги работают аналогично классам устройств.
|
||
|
||
# Параметры
|
||
|
||
## name
|
||
|
||
- Тип: строка
|
||
- Обязательный
|
||
|
||
Название пула.
|
||
|
||
## scheme
|
||
|
||
- Тип: строка
|
||
- Обязательный
|
||
- Возможные значения: "replicated", "xor", "ec" или "jerasure"
|
||
|
||
Схема избыточности, используемая в данном пуле. "jerasure" - синоним для "ec",
|
||
в обеих схемах используются коды Рида-Соломона-Вандермонда, реализованные на
|
||
основе библиотек ISA-L или jerasure. Быстрая реализация на основе ISA-L
|
||
используется автоматически, когда доступна, в противном случае используется
|
||
более медленная jerasure-версия.
|
||
|
||
## pg_size
|
||
|
||
- Тип: целое число
|
||
- Обязательный
|
||
|
||
Размер PG данного пула, т.е. число реплик для реплицированных пулов или
|
||
число дисков данных плюс дисков чётности для пулов EC/XOR.
|
||
|
||
## parity_chunks
|
||
|
||
- Тип: целое число
|
||
|
||
Число дисков чётности для EC/XOR пулов. Иными словами, число дисков, при
|
||
одновременной потере которых данные будут потеряны.
|
||
|
||
Игнорируется для реплицированных пулов, обязательно для EC/XOR.
|
||
|
||
## pg_minsize
|
||
|
||
- Тип: целое число
|
||
- Обязательный
|
||
|
||
Число доступных дисков для PG данного пула, при котором PG остаются активны.
|
||
Если становится невозможно размещать новые данные в PG как минимум на pg_minsize
|
||
OSD, PG деактивируется на чтение и запись. Иными словами, всегда известно,
|
||
что новые блоки данных всегда записываются как минимум на pg_minsize дисков.
|
||
|
||
FIXME: Поведение pg_minsize может быть изменено в будущем с полной деактивации
|
||
PG на перевод их в режим только для чтения.
|
||
|
||
## pg_count
|
||
|
||
- Тип: целое число
|
||
- Обязательный
|
||
|
||
Число PG для данного пула. Число должно быть достаточно большим, чтобы монитор
|
||
мог равномерно распределить по ним данные.
|
||
|
||
Обычно это означает примерно 64-128 PG на 1 OSD, т.е. pg_count можно устанавливать
|
||
равным (общему числу OSD * 100 / pg_size). Значение можно округлить до ближайшей
|
||
степени 2, чтобы потом было легче уменьшать или увеличивать число PG, умножая
|
||
или деля его на 2.
|
||
|
||
PG в Vitastor эферемерны, то есть вы можете менять их число в любой момент,
|
||
просто перезаписывая конфигурацию пулов в etcd. Однако объём перемещения данных
|
||
при этом будет минимален, если новое число PG кратно старому (или наоборот).
|
||
|
||
## failure_domain
|
||
|
||
- Тип: строка
|
||
- По умолчанию: host
|
||
|
||
Домен отказа для пула. Может быть равен "host" или "osd" или любому другому
|
||
уровню дерева OSD, задаваемому в настройке [placement_levels](monitor.ru.md#placement_levels).
|
||
|
||
Смысл домена отказа в том, что 2 копии, или 2 части одного блока данных в случае
|
||
кодов коррекции ошибок, никогда не помещаются на OSD, принадлежащие одному домену отказа.
|
||
Иными словами, домен отказа - это то, от отказа чего вы защищаете себя избыточным
|
||
хранением.
|
||
|
||
## max_osd_combinations
|
||
|
||
- Тип: целое число
|
||
- По умолчанию: 10000
|
||
|
||
Алгоритм распределения данных Vitastor основан на решателе задачи линейного
|
||
программирования. При этом для снижения сложности задачи возможные комбинации OSD
|
||
генерируются случайно и ограничиваются количеством, равным значению этого параметра.
|
||
|
||
Обычно данный параметр не требует изменений.
|
||
|
||
## block_size
|
||
|
||
- Тип: целое число
|
||
- По умолчанию: 131072
|
||
|
||
Размер блока для данного пула. Если не задан, используется значение из
|
||
/vitastor/config/global. Если в вашем кластере есть OSD с разными размерами
|
||
блока, пул должен быть ограничен только OSD, блок которых равен блоку пула,
|
||
с помощью [osd_tags](#osd_tags).
|
||
|
||
О самом параметре читайте в разделе [Дисковые параметры уровня кластера](layout-cluster.ru.md#block_size).
|
||
|
||
## bitmap_granularity
|
||
|
||
- Тип: целое число
|
||
- По умолчанию: 4096
|
||
|
||
Размер "сектора" виртуальных дисков в данном пуле. Если не задан, используется
|
||
значение из /vitastor/config/global. Аналогично block_size, пул должен быть
|
||
ограничен OSD со значением bitmap_granularity, равным значению пула, с помощью
|
||
[osd_tags](#osd_tags).
|
||
|
||
О самом параметре читайте в разделе [Дисковые параметры уровня кластера](layout-cluster.ru.md#bitmap_granularity).
|
||
|
||
## immediate_commit
|
||
|
||
- Тип: строка "all", "small" или "none"
|
||
- По умолчанию: none
|
||
|
||
Настройка мгновенного коммита для данного пула. Если не задана, используется
|
||
значение из /vitastor/config/global. Аналогично block_size, пул должен быть
|
||
ограничен OSD со значением bitmap_granularity, совместимым со значением пула, с
|
||
помощью [osd_tags](#osd_tags). Совместимость означает, что пул с отключенным
|
||
мгновенным коммитом может работать на OSD с включённым мгновенным коммитом, но
|
||
не наоборот.
|
||
|
||
О самом параметре читайте в разделе [Дисковые параметры уровня кластера](layout-cluster.ru.md#immediate_commit).
|
||
|
||
## pg_stripe_size
|
||
|
||
- Тип: целое число
|
||
- По умолчанию: 0
|
||
|
||
Данный параметр задаёт размер полосы "нарезки" образов на PG. Размер полосы не может
|
||
быть меньше, чем [block_size](#block_size), умноженный на
|
||
(pg_size - parity_chunks) для EC-пулов или 1 для реплицированных пулов. То же
|
||
значение используется по умолчанию.
|
||
|
||
Это означает, что по умолчанию первые `pg_stripe_size = (block_size * (pg_size-parity_chunks))` байт
|
||
образа помещаются в одну PG, следующие `pg_stripe_size` байт помещаются в другую
|
||
и т.п.
|
||
|
||
Данный параметр обычно тоже не требует изменений.
|
||
|
||
## root_node
|
||
|
||
- Тип: строка
|
||
|
||
Корневой узел дерева OSD для ограничения OSD, выбираемых для пула. Задаваемый
|
||
узел должен быть предварительно задан в /vitastor/config/node_placement.
|
||
|
||
## osd_tags
|
||
|
||
- Тип: строка или массив строк
|
||
|
||
Теги OSD для ограничения OSD, выбираемых для пула. Если задаётся несколько тегов
|
||
массивом, то выбираются только OSD, у которых есть все эти теги.
|
||
|
||
## primary_affinity_tags
|
||
|
||
- Тип: строка или массив строк
|
||
|
||
Теги OSD, по которым должны выбираться OSD, предпочитаемые в качестве первичных
|
||
для PG этого пула. Имейте в виду, что для EC-пулов Vitastor также всегда
|
||
предпочитает помещать первичный OSD на один из OSD с данными, а не с чётностью.
|
||
|
||
## scrub_interval
|
||
|
||
- Тип: временной интервал (число + единица измерения s/m/h/d/M/y)
|
||
|
||
Интервал скраба, то есть, автоматической фоновой проверки данных для данного пула.
|
||
Переопределяет [глобальную настройку scrub_interval](osd.ru.md#scrub_interval).
|
||
|
||
# Примеры
|
||
|
||
## Реплицированный пул
|
||
|
||
```
|
||
{
|
||
"1": {
|
||
"name":"testpool",
|
||
"scheme":"replicated",
|
||
"pg_size":2,
|
||
"pg_minsize":1,
|
||
"pg_count":256,
|
||
"failure_domain":"host"
|
||
}
|
||
}
|
||
```
|
||
|
||
## Пул с кодами коррекции ошибок
|
||
|
||
```
|
||
{
|
||
"2": {
|
||
"name":"ecpool",
|
||
"scheme":"ec",
|
||
"pg_size":3,
|
||
"parity_chunks":1,
|
||
"pg_minsize":2,
|
||
"pg_count":256,
|
||
"failure_domain":"host"
|
||
}
|
||
}
|
||
```
|