Skip to content

Commit 9460d4c

Browse files
authored
Merge 9e8d2e3 into 17a77ae
2 parents 17a77ae + 9e8d2e3 commit 9460d4c

File tree

6 files changed

+59
-6
lines changed

6 files changed

+59
-6
lines changed

ydb/docs/ru/core/concepts/glossary.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -581,8 +581,6 @@ SID идентифицирует индивидуального [пользов
581581

582582
#### NodeBroker {#node-broker}
583583

584-
**NodeBroker** — системная таблетка, отвечающая за регистрацию [динамических узлов](#dynamic) в кластере.
585-
586584
**NodeBroker** — это системная таблетка, которая отвечает за регистрацию [динамических узлов](#dynamic) в кластере.
587585

588586
#### BSController {#ds-controller}
@@ -747,6 +745,10 @@ PDisk содержит планировщик, который обеспечив
747745
* Записывать больше данных, чем может содержать одна группа хранения.
748746
* Хранить различные [LogoBlob](#logoblob) в различных группах хранения, с различными свойствами, такими как кодирование с исправлением ошибок или на различных носителях (HDD, SSD, NVMe).
749747

748+
#### Единица аллокации хранилища {#allocation-unit}
749+
750+
**Единица аллокации хранилища**, **storage allocation unit** — это ожидаемое потребление ресурсов хранилища (объём, полоса, IOPS) одним [каналом](#channel) одной [таблетки](#tablet).
751+
750752
### Реализация распределённых транзакций {#transaction-implementation}
751753

752754
Ниже объяснены термины, связанные с реализацией [распределённых транзакций](#transactions).{% if oss == true %} Сама реализация описана в отдельной статье [{#T}](../contributor/datashard-distributed-txs.md).{% endif %}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Управление группами хранения в Hive
2+
3+
В данной статье описывается процесс выдачи [таблеткам](../concepts/glossary.md#tablet) [групп хранения](../concepts/glossary.md#storage-group) со стороны [Hive](../concepts/glossary.md#hive). При создании таблетки Hive назначает ей группы и в дальнейшем может их изменить:
4+
5+
* Если в группе заканчивается место, таблетки получают об этом сигнал от [прокси](../concepts/glossary.md#ds-proxy) и передают в Hive запрос выдать им другую группу.
6+
* При [ручном перераспределении групп](../reference/embedded-ui/hive.md#reassign-groups).
7+
* При автоматическом перераспределении групп (отключёно по умолчанию в [конфигурации Hive](../reference/configuration/hive.md#storage)).
8+
9+
## Выбор группы {#pick-group}
10+
11+
Для каждого из [каналов](../concepts/glossary.md#channel) таблетки группа выбирается независимо. Разные каналы одной и той же таблетки могут писать в одну и ту же группу. Группы могут быть выбраны только из закреплённого за каналом [пула хранения](../concepts/glossary.md#storage-pool). Пулы хранения не пересекаются между разными базами данных на одном кластере, при этом у одной базы может быть больше одного пула.
12+
13+
Выбор группы внутри пула делается на основе метрик потребления, принцип работы которых описан в [следующем разделе](#allocation-units). С их помощью для каждой группы-кандидата $i$ определяется значение потребления $0 < \mathrm{usage}(i) < 1$. Затем группа выбирается при помощи взвешенной случайности с весами $w(i) = \max_j (\mathrm{usage}(j)) - \mathrm{usage}(i)$.
14+
15+
Чтобы избежать постоянного перемещениями между группами с недостатком свободного места, веса дополнительно модифицируются, пессимизируя такие группы. Если таблетка перевозится с группы $j$, в которой кончается место, то для группы $i$ модифицированный вес вычисляется по формуле:
16+
17+
$$
18+
\hat{w}(i) =
19+
\begin{cases}
20+
0, & \mathrm{free}(i) < \mathrm{free}(j) \\
21+
\alpha \cdot w(i), & \mathrm{free}(j) \le \mathrm{free}(i) < \beta \cdot \mathrm{free}(j) \\
22+
w(i), & \mathrm{free}(i) \ge \beta \cdot \mathrm{free}(j)
23+
\end{cases}
24+
$$
25+
26+
где:
27+
28+
* $\mathrm{free}(g)$ — реальное свободное место в группе $g$;
29+
* $\alpha, \beta$ — константы. По умолчанию $\alpha = 0.2, \beta = 1.1$. Значения можно настроить в [конфигурации Hive](../reference/configuration/hive.md#storage) как `space_usage_penalty` и `space_usage_penalty_threshold` соответственно.
30+
31+
## Единицы аллокации {#allocation-units}
32+
33+
Как и для [выбора узла](hive-booting.md#findbestnode) для запуска таблеток, для выбора групп в Hive предусмотрен учёт различных ресурсов. Однако, смена группы — более редкая операция, поэтому мгновенные значения потребления для неё бы не подошли. Необходимо ещё на этапе создания таблеток предсказать их потребление в долгосрочной перспективе. Для этого используются фиксированные значения: [SchemeShard](../concepts/glossary.md#scheme-shard) выставляет для каждого из каналов [единицу аллокации](../concepts/glossary.md#allocation-unit) — ожидаемое потребление ресурсов этим каналом, и Hive в дальнейшем использует эти значения. Единицами аллокации для различных таблеток можно управлять при помощи секции `channel_profile_config` в конфигурации кластера. Используются метрики:
34+
35+
* IOPS;
36+
* скорость записи данных;
37+
* потребление дискового пространства.
38+
39+
В конфигурации Hive можно настроить учёт какой-либо одной из них или сразу всех.
40+
41+
42+
## Процесс переназначения групп {#reassign}
43+
44+
Для безопасной смены группы Hive:
45+
46+
* Осуществляет блокировку записи в текущем [поколении](../concepts/glossary.md#tablet-generation) в системном канале таблетки.
47+
* Запускает новое поколение таблетки с новой записью в [истории](general-schema.md#history).

ydb/docs/ru/core/contributor/hive.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,6 @@ $\mathrm{MaxUsage}$ и $\mathrm{MinUsage}$ — максимум и миниму
5656
- [Настройка Hive](../reference/configuration/hive.md)
5757
- [Hive web-viewer](../reference/embedded-ui/hive.md)
5858
- [Запуск таблеток](hive-booting.md)
59+
- [Управление группами хранения](hive-storage.md)
5960

60-
{% include [career](./_includes/career.md) %}
61+
{% include [career](./_includes/career.md) %}

ydb/docs/ru/core/contributor/toc_i.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ items:
2525
items:
2626
- name: Запуск таблеток
2727
href: hive-booting.md
28+
- name: Управление группами хранения
29+
href: hive-storage.md
2830
- name: DataShard
2931
items:
3032
- name: Локи и видимость изменений в транзакциях

ydb/docs/ru/core/reference/configuration/hive.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ Hive собирает с каждого узла [метрики потребл
160160

161161
## Опции распределения каналов между группами хранения {#storage}
162162

163-
Здесь перечислены опции, связанные с распределением [каналов](../../concepts/glossary.md#channel) таблеток по [группам хранения](../../concepts/glossary.md#storage-group): с учётом различных метрик, с выбором групп, с процессом автобалансировки каналов по группам.
163+
Здесь перечислены опции, связанные с [распределением](../../contributor/hive-storage.md) [каналов](../../concepts/glossary.md#channel) таблеток по [группам хранения](../../concepts/glossary.md#storage-group): с учётом различных метрик, с выбором групп, с процессом автобалансировки каналов по группам.
164164

165165

166166
{% note info %}

ydb/docs/ru/core/reference/embedded-ui/hive.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ Web-viewer Hive предоставляет визуальный интерфей
6161
* **Storage** — список [пулов](../../concepts/glossary.md#storage-pool) групп хранения.
6262
* **Groups** — список [групп хранения](../../concepts/glossary.md#storage-group) для каждой таблетки.
6363
* **Settings** — страница конфигураций Hive.
64-
* [**Reassign Groups**](#reassign_groups) — страница перераспределения групп хранения между таблетками.
64+
* [**Reassign Groups**](#reassign-groups) — страница перераспределения групп хранения между таблетками.
6565
* **SubActors** — список запущенных в данный момент вспомогательных акторов.
6666

6767
Также можно посмотреть, какие таблетки используют конкретную группу, и наоборот, какие группы используются в конкретной таблетке.
6868

69-
## Reassign Groups {#reassign_groups}
69+
## Reassign Groups {#reassign-groups}
7070

7171
При добавлении в базу данных новых групп хранения существующие таблетки продолжают писать в старые группы. Для таких ситуаций в интерфейсе предусмотрена возможность запуска перераспределения таблеток по группам хранения. При нажатии на кнопку **Reassign Groups** появится окно с параметрами для балансировки:
7272

@@ -76,6 +76,7 @@ Web-viewer Hive предоставляет визуальный интерфей
7676
* **Channels** — диапазон [каналов](../../concepts/glossary.md#channel), для которых будет производиться балансировка.
7777
* **Percent** — процент от общего количества каналов таблеток, которые переедут в результате балансировки.
7878
* **Inflight** — количество таблеток, одновременно переезжающих на другие группы.
79+
* **Async** — таблетки помечаются на переназначение групп, которое произойдёт при следующем их плановом перезапуске (асинхронно). Такой режим позволяет не делать лишних перезапусков таблеток.
7980

8081
После указания всех параметров, следует нажать сначала "Query", который покажет количество каналов, попавших под переезд, и разблокирует кнопку "Reassign".
8182
При нажатии которой начнется перераспределение.

0 commit comments

Comments
 (0)