Skip to content

Commit

Permalink
progress
Browse files Browse the repository at this point in the history
  • Loading branch information
zinal committed Dec 18, 2024
1 parent 6bc9459 commit f6308ef
Show file tree
Hide file tree
Showing 4 changed files with 147 additions and 103 deletions.
121 changes: 95 additions & 26 deletions ydb/docs/ru/core/maintenance/manual/dynamic-config.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,28 @@
## Динамическая конфигурация кластера
# Динамическая конфигурация кластера

Динамическая конфигурация позволяет запускать динамические [узлы](../../concepts/glossary.md#node), сконфигурировав их централизованно, без необходимости раскладывать файлы по узлам вручную. {{ ydb-short-name }} выступает в роли системы управления конфигурациями, предоставляя инструменты для надёжного хранения, версионирования и доставки конфигурации, а так же [DSL (Domain Specific Language)](./dynamic-config-selectors.md) для переопределения её частей для определённых групп узлов. Конфигурация представляет собой YAML документ. Он является расширенной версией статической конфигурации:

* описание конфигурации вынесено в поле `config`;
* добавлено поле `metadata`, необходимое для валидации и версионирования;
* добавлены поля `allowed_labels` и `selector_config` для гранулярного переопределения настроек.

Эта конфигурация загружается в кластер, где надёжно сохраняется и доставляется до каждого динамического узла при его старте. [Определенные настройки](#dynamic-kinds) обновляются на лету, без перезапуска узлов. С помощью динамической конфигурации можно централизованно решить следующие задачи:
Эта конфигурация загружается в кластер, где надёжно сохраняется и доставляется до каждого динамического узла при его старте. [Некоторые настройки](#dynamic-kinds) обновляются на лету, без перезапуска узлов. С помощью динамической конфигурации можно централизованно решить следующие задачи:

* переключение настроек журналирования компонентов как для всего кластера, так и для отдельных групп узлов;
* включать экспериментальную функциональность (feature flags) на отдельных базах;
* изменить настройки акторной системы на отдельно узле или на групе узлов;
* и т.д.
* переключать настройки журналирования компонентов как для всего кластера, так и для отдельных баз данных или групп узлов;
* включать экспериментальную функциональность (feature flags) на отдельных базах данных;
* изменять настройки акторной системы на конкретной базе данных, отдельном узле или на группе узлов.

### Подготовка к использованию динамической конфигурации {#preparation}

{% note info %}

После включения поддержки динамической конфигурации в кластере {{ ydb-short-name }} устаревшая функция управления конфигурацией через CMS будет недоступна.

{% endnote %}
## Подготовка к использованию динамической конфигурации {#preparation}

Перед началом использования динамической конфигурации в кластере необходимо провести подготовительные работы:

1. В кластере должна быть включена авторизация регистрации узлов баз данных.
1. В кластере должна быть включена [авторизация узлов баз данных](../../reference/configuration/node_authorization.md) при их регистрации.

1. Если ранее в кластере использовалось [управление конфигурацией через CMS](cms.md), то необходимо выгрузить существующие настройки к формату YAML. Для этого необходимо выполнить следующую команду:
1. Если ранее в кластере использовалось [управление конфигурацией через CMS](cms.md), то необходимо выгрузить существующие настройки в формате YAML. Для этого необходимо выполнить следующую команду:

```bash
./ydbd -s grpcs://<node1.ydb.tech>:2135 --ca-file ca.crt --token-file ydbd-token \
admin console configs dump-yaml > dynconfig.yaml
admin console configs dump-yaml > dynconfig.yaml
```

Предварительно необходимо получить токен аутентификации с помощью команды `ydb auth get-token`, по аналогии с [процедурой инициализации кластера](../../devops/manual/initial-deployment.md#initialize-cluster).
Expand All @@ -40,6 +33,7 @@
* добавить секцию `metadata` по образцу из [примера конфигурации](#example);
* в секцию `config` добавить параметр `yaml_config_enabled: true`.
* При отсутствии ранее выполненных через CMS настроек используется [минимальное наполнение](#example) файла динамической конфигурации.
* Если в кластере используется шифрование [интерконнекта акторной системы](../../concepts/glossary.md#actor-system-interconnect), следует добавить в секцию `config` используемые [настройки TLS для интерконнекта](../../reference/configuration/tls.md#interconnect).

1. Сформированный файл динамической конфигурации необходимо применить на кластер:

Expand All @@ -48,7 +42,13 @@
{{ ydb-cli }} admin config replace -f dynconfig.yaml
```

### Примеры конфигурации {#example}
{% note info %}

После включения поддержки динамической конфигурации в кластере {{ ydb-short-name }} устаревшая функция управления конфигурацией через CMS будет недоступна.

{% endnote %}

## Примеры конфигурации {#example}

Пример минимальной динамической конфигурации для однодатацентрового кластера:

Expand Down Expand Up @@ -81,9 +81,78 @@ selector_config: []

Подробнее параметры конфигурации описаны на странице [{#T}](../../reference/configuration/index.md).

По умолчанию конфигурация кластера является пустой и имеет версию 1. При применении новой конфигурации версия загружаемой конфигурации сравнивается и автоматически увеличивается на единицу.
Первоначально установленная динамическая конфигурация кластера получает номер версии 1. При применении новой конфигурации версия хранимой конфигурации сравнивается с указанной в YAML-документе и автоматически увеличивается на единицу.

Пример более сложной динамической конфигурации с установкой типовых глобальных параметров, а также особых параметров для одной из баз данных:

```yaml
---
metadata:
kind: MainConfig
cluster: ""
version: 1
config:
yaml_config_enabled: true
table_profiles_config:
table_profiles:
- name: default
compaction_policy: default
execution_policy: default
partitioning_policy: default
storage_policy: default
replication_policy: default
caching_policy: default
compaction_policies:
- name: default
execution_policies:
- name: default
partitioning_policies:
- name: default
auto_split: true
auto_merge: true
size_to_split: 2147483648
storage_policies:
- name: default
column_families:
- storage_config:
sys_log:
preferred_pool_kind: ssd
log:
preferred_pool_kind: ssd
data:
preferred_pool_kind: ssd
replication_policies:
- name: default
caching_policies:
- name: default
interconnect_config:
encryption_mode: REQUIRED
path_to_certificate_file: "/opt/ydb/certs/node.crt"
path_to_private_key_file: "/opt/ydb/certs/node.key"
path_to_ca_file: "/opt/ydb/certs/ca.crt"
allowed_labels:
node_id:
type: string
host:
type: string
tenant:
type: string
selector_config:
- description: Custom settings for testdb
selector:
tenant: /cluster1/testdb
config:
shared_cache_config:
memory_limit: 34359738368
feature_flags: !inherit
enable_views: true
actor_system_config:
use_auto_config: true
node_type: COMPUTE
cpu_count: 14
```

### Обновление динамической конфигурации
## Обновление динамической конфигурации

```bash
# Получить конфигурацию кластера
Expand All @@ -97,17 +166,17 @@ vim dynconfig.yaml
Дополнительные возможности конфигурирования описаны на страницах [селекторы](./dynamic-config-selectors.md) и [временная конфигурация](./dynamic-config-volatile-config.md).
Все команды для работы с конфигурацией описаны в разделе [{#T}](../../reference/ydb-cli/configs.md).

### Механизм работы
## Механизм работы

#### Обновление конфигурации c точки зрения администратора
### Обновление конфигурации c точки зрения администратора

1. Конфигурационный файл загружается пользователем при помощи [grpc-вызова](https://github.com/ydb-platform/ydb/blob/5251c9ace0a7617c25d50f1aa4d0f13e3d56f985/ydb/public/api/grpc/draft/ydb_dynamic_config_v1.proto#L22) или [{{ ydb-short-name }} CLI](../../reference/ydb-cli/index.md) в кластер.
2. Файл проверяется на валидность, проверяются базовые ограничения, корректность версии, корректность имени кластера, корректность конфигураций полученных после преобразования DSL.
3. Версия конфигурации в файле увеличивается на единицу.
4. Файл надёжно сохраняется в кластере [таблеткой](../../concepts/glossary.md#tablet) Console.
5. Обновления файла рассылаются по узлам кластера.

#### Обновление конфигурации с точки зрения узла кластера
### Обновление конфигурации с точки зрения узла кластера

1. Каждый узел при старте запрашивает полную конфигурацию.
2. Получив конфигурацию, узел [генерирует конечную конфигурацию](./dynamic-config-selectors.md#selectors-resolve) для своего набора [лейблов](./dynamic-config-selectors.md#selectors-intro).
Expand All @@ -117,11 +186,11 @@ vim dynconfig.yaml

Пункты 1,2 выполняются только для динамических узлов кластера.

#### Версионирование конфигурации
### Версионирование конфигурации

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

### Динамически обновляемые настройки {#dynamic-kinds}
## Динамически обновляемые настройки {#dynamic-kinds}

Часть настроек системы обновляется без перезапуска узлов. Для их изменения достаточно загрузить новую конфигурацию и дождаться её распространения по кластеру.

Expand All @@ -137,7 +206,7 @@ vim dynconfig.yaml

В будущем список может быть расширен.

### Ограничения
## Ограничения

* Использование более 30 различных [лейблов](./dynamic-config-selectors.md) в [селекторах](./dynamic-config-selectors.md) может привести к задержкам при валидации конфигурации в десятки секунд, т.к. {{ ydb-short-name }} необходимо проверить валидность каждой возможной конечной конфигурации. При этом количество значений одного лейбла влияет намного меньше.
* Использование объемных файлов (более 500KiB для кластера в 1000 узлов), конфигурации может привести к росту сетевого трафика в кластере при обновлении конфигурации. Объем трафика прямо пропорционален количеству нод и объему конфигурации.
* Использование объемных файлов (более 500KiB для кластера в 1000 узлов) конфигурации может привести к росту сетевого трафика в кластере при обновлении конфигурации. Объем трафика прямо пропорционален количеству нод и объему конфигурации.
Loading

0 comments on commit f6308ef

Please sign in to comment.