diff options
author | innokentii <innokentii@yandex-team.com> | 2023-07-28 12:31:59 +0300 |
---|---|---|
committer | innokentii <innokentii@yandex-team.com> | 2023-07-28 12:31:59 +0300 |
commit | 29c67a1aedcd498a58201621cfeba510f4533a97 (patch) | |
tree | 7f0e3745b00a1dff79b5f9fd2df89b3814a24402 | |
parent | 25f2ddf85baedafe4a8e149002c510443bc56f0b (diff) | |
download | ydb-29c67a1aedcd498a58201621cfeba510f4533a97.tar.gz |
DynamicConfig Docs
-rw-r--r-- | ydb/docs/ru/core/cluster/toc_i.yaml | 16 | ||||
-rw-r--r-- | ydb/docs/ru/core/deploy/configuration/config.md | 14 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/_assets/config-chart-1.png | bin | 0 -> 86993 bytes | |||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/_assets/config-chart-2.png | bin | 0 -> 87774 bytes | |||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/_assets/config-chart.drawio | 295 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/cms.md | 6 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/config-overview.md | 35 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/dynamic-config-selectors.md | 357 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/dynamic-config-volatile-config.md | 61 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/dynamic-config.md | 136 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/toc_i.yaml | 16 | ||||
-rw-r--r-- | ydb/docs/ru/core/reference/ydb-cli/configs.md | 160 | ||||
-rw-r--r-- | ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml | 4 |
13 files changed, 1088 insertions, 12 deletions
diff --git a/ydb/docs/ru/core/cluster/toc_i.yaml b/ydb/docs/ru/core/cluster/toc_i.yaml index dbfa5a536b..060345b0b8 100644 --- a/ydb/docs/ru/core/cluster/toc_i.yaml +++ b/ydb/docs/ru/core/cluster/toc_i.yaml @@ -23,5 +23,17 @@ items: # href: ../administration/rolling-restart.md - name: Изменение конфигурации актор-системы href: ../maintenance/manual/change_actorsystem_configs.md -- name: Изменение конфигураций через CMS - href: ../maintenance/manual/cms.md +- name: Управление конфигурацией кластера + items: + - name: Обзор конфигурации + href: ../maintenance/manual/config-overview.md + - name: Статическая конфигурация кластера + href: ../deploy/configuration/config.md + - name: Динамическая конфигурация кластера + href: ../maintenance/manual/dynamic-config.md + - name: DSL конфигурации кластера + href: ../maintenance/manual/dynamic-config-selectors.md + - name: Временная конфигурация + href: ../maintenance/manual/dynamic-config-volatile-config.md + - name: Изменение конфигураций через CMS + href: ../maintenance/manual/cms.md diff --git a/ydb/docs/ru/core/deploy/configuration/config.md b/ydb/docs/ru/core/deploy/configuration/config.md index c571bf3c44..17432b7156 100644 --- a/ydb/docs/ru/core/deploy/configuration/config.md +++ b/ydb/docs/ru/core/deploy/configuration/config.md @@ -1,6 +1,6 @@ -# Конфигурация кластера +# Статическая конфигурация кластера -Конфигурация кластера задается в YAML-файле, передаваемом в параметре `--yaml-config` при запуске узлов кластера. +Статическая конфигурация кластера задается в YAML-файле, передаваемом в параметре `--yaml-config` при запуске узлов кластера. В статье приведено описание основных групп конфигурируемых параметров в данном файле. @@ -18,7 +18,7 @@ host_configs: type: <type> - path: ... - host_config_id: 2 - ... + ... ``` Атрибут `host_config_id` задает числовой идентификатор конфигурации. В атрибуте `drive` содержится коллекция описаний подключенных дисков. Каждое описание состоит из двух атрибутов: @@ -94,7 +94,7 @@ hosts: data_center: <строка с идентификатором зоны доступности> rack: <строка с идентификатором стойки> - host: <DNS-имя хоста> - ... + # ... ``` **Примеры** @@ -171,7 +171,7 @@ domains_config: - type: <тип устройства для сопоставления с указанным в host_configs.drive.type> vdisk_kind: Default - kind: <имя пула хранения> - ... + # ... ``` Каждой базе данных в кластере назначается как минимум один из доступных пулов хранения, выбираемый в операции создания базы данных. Имена пулов хранения среди назначенных могут быть использованы в атрибуте `DATA` при определении групп колонок в операторах YQL [`CREATE TABLE`](../../yql/reference/syntax/create_table.md#column-family)/[`ALTER TABLE`](../../yql/reference/syntax/alter_table.md#column-family). @@ -182,7 +182,7 @@ State Storage (хранилище состояний) -- это независи Обычно State Storage не требует масштабирования в целях повышения производительности, поэтому количество узлов в нём следует делать как можно меньшим с учетом необходимого уровня отказоустойчивости. -Доступность State Storage является ключевой для кластера YDB, так как влияет на все базы данных, независимо от того какие пулы хранения в них используются.Для обеспечения отказоустойчивости State Storate его узлы должны быть выбраны таким образом, чтобы гарантировать рабочее большинство в случае ожидаемых отказов. +Доступность State Storage является ключевой для кластера YDB, так как влияет на все базы данных, независимо от того какие пулы хранения в них используются.Для обеспечения отказоустойчивости State Storate его узлы должны быть выбраны таким образом, чтобы гарантировать рабочее большинство в случае ожидаемых отказов. Для выбора узлов State Storage можно воспользоваться следующими рекомендациями: @@ -472,7 +472,7 @@ blob_storage_config: - node_id: 1 path: /dev/disk/by-partlabel/ydb_disk_ssd_02 pdisk_category: SSD -.... +# ... ``` Для конфигурации расположенной в 3 AZ необходимо указать 3 кольца. Для конфигураций, расположенных в одной AZ, указывается ровно одно кольцо. diff --git a/ydb/docs/ru/core/maintenance/manual/_assets/config-chart-1.png b/ydb/docs/ru/core/maintenance/manual/_assets/config-chart-1.png Binary files differnew file mode 100644 index 0000000000..7af01b94fb --- /dev/null +++ b/ydb/docs/ru/core/maintenance/manual/_assets/config-chart-1.png diff --git a/ydb/docs/ru/core/maintenance/manual/_assets/config-chart-2.png b/ydb/docs/ru/core/maintenance/manual/_assets/config-chart-2.png Binary files differnew file mode 100644 index 0000000000..9c68a72c11 --- /dev/null +++ b/ydb/docs/ru/core/maintenance/manual/_assets/config-chart-2.png diff --git a/ydb/docs/ru/core/maintenance/manual/_assets/config-chart.drawio b/ydb/docs/ru/core/maintenance/manual/_assets/config-chart.drawio new file mode 100644 index 0000000000..c3b10caf4e --- /dev/null +++ b/ydb/docs/ru/core/maintenance/manual/_assets/config-chart.drawio @@ -0,0 +1,295 @@ +<mxfile host="drawio.yandex-team.ru" modified="2023-06-19T13:22:21.291Z" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0" etag="667dN1Zzu17pTJfA-IbK" version="21.1.8" type="device" pages="2"> + <diagram name="Page-1" id="6AZyvDMRXw_DgrmPejTI"> + <mxGraphModel dx="1434" dy="826" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="gzmF63YaM1NmiDmxzHxj-1" value="dynamic node 1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="160" y="200" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-2" value="dynamic node 2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="320" y="200" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-3" value="dynamic node n" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="560" y="200" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-4" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="480" y="240" as="sourcePoint" /> + <mxPoint x="520" y="240" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-5" value="static node 1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="160" y="440" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-6" value="static node 2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="320" y="440" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-7" value="static node m" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="560" y="440" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-8" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="480" y="480" as="sourcePoint" /> + <mxPoint x="520" y="480" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-9" target="gzmF63YaM1NmiDmxzHxj-5" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-9" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="180" y="560" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-10" target="gzmF63YaM1NmiDmxzHxj-6" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-10" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="340" y="560" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-11" target="gzmF63YaM1NmiDmxzHxj-7" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-11" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="580" y="560" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-12" target="gzmF63YaM1NmiDmxzHxj-1" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-12" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="180" y="320" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-13" target="gzmF63YaM1NmiDmxzHxj-2" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-13" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="340" y="320" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-14" target="gzmF63YaM1NmiDmxzHxj-3" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-14" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="580" y="320" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="gzmF63YaM1NmiDmxzHxj-21" target="gzmF63YaM1NmiDmxzHxj-14" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="720" y="420" as="targetPoint" /> + <Array as="points"> + <mxPoint x="720" y="480" /> + <mxPoint x="720" y="420" /> + <mxPoint x="620" y="420" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-21" target="gzmF63YaM1NmiDmxzHxj-13" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="720" y="480" /> + <mxPoint x="720" y="420" /> + <mxPoint x="380" y="420" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-21" target="gzmF63YaM1NmiDmxzHxj-12" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="720" y="480" /> + <mxPoint x="720" y="420" /> + <mxPoint x="220" y="420" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-21" target="gzmF63YaM1NmiDmxzHxj-11" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="720" y="480" /> + <mxPoint x="720" y="680" /> + <mxPoint x="620" y="680" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-21" target="gzmF63YaM1NmiDmxzHxj-10" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="720" y="480" /> + <mxPoint x="720" y="680" /> + <mxPoint x="380" y="680" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="gzmF63YaM1NmiDmxzHxj-21" target="gzmF63YaM1NmiDmxzHxj-9" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="720" y="480" /> + <mxPoint x="720" y="680" /> + <mxPoint x="220" y="680" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="gzmF63YaM1NmiDmxzHxj-21" value="administrator" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> + <mxGeometry x="800" y="440" width="40" height="80" as="geometry" /> + </mxCell> + <mxCell id="ysdPkgQMItkxEn6_Y6la-1" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="240" as="sourcePoint" /> + <mxPoint x="840" y="240" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="ysdPkgQMItkxEn6_Y6la-2" value="config delivered by administrator" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="740" y="250" width="130" height="30" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="pD0FnZRgLJUxYaRfmEEt" name="Page-2"> + <mxGraphModel dx="1434" dy="826" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="LG2FzYKowvd94eDzYkV2-1" value="dynamic node 1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="160" y="200" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-2" value="dynamic node 2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="320" y="200" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-3" value="dynamic node n" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"> + <mxGeometry x="560" y="200" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-4" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="480" y="240" as="sourcePoint" /> + <mxPoint x="520" y="240" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-5" value="static node 1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="160" y="440" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-6" value="static node 2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="320" y="440" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-7" value="static node m" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"> + <mxGeometry x="560" y="440" width="120" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-8" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="480" y="480" as="sourcePoint" /> + <mxPoint x="520" y="480" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="LG2FzYKowvd94eDzYkV2-10" target="LG2FzYKowvd94eDzYkV2-5" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-10" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="180" y="560" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="LG2FzYKowvd94eDzYkV2-12" target="LG2FzYKowvd94eDzYkV2-6" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-12" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="340" y="560" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="LG2FzYKowvd94eDzYkV2-14" target="LG2FzYKowvd94eDzYkV2-7" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-14" value="config.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1"> + <mxGeometry x="580" y="560" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="LG2FzYKowvd94eDzYkV2-27" target="LG2FzYKowvd94eDzYkV2-14" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="820" y="680" /> + <mxPoint x="620" y="680" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="LG2FzYKowvd94eDzYkV2-27" target="LG2FzYKowvd94eDzYkV2-12" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="820" y="680" /> + <mxPoint x="380" y="680" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="LG2FzYKowvd94eDzYkV2-27" target="LG2FzYKowvd94eDzYkV2-10" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="820" y="680" /> + <mxPoint x="220" y="680" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#000000;" parent="1" source="LG2FzYKowvd94eDzYkV2-27" target="LG2FzYKowvd94eDzYkV2-29" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="760" y="480" /> + <mxPoint x="760" y="660" /> + <mxPoint x="500" y="660" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="50GlqhVncXtl4h4N9La8-1" value="ydb-cli admin config replace &lt;...&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="LG2FzYKowvd94eDzYkV2-30" vertex="1" connectable="0"> + <mxGeometry x="0.068" y="-1" relative="1" as="geometry"> + <mxPoint x="7" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-27" value="administrator" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1"> + <mxGeometry x="800" y="440" width="40" height="80" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#82B366;" parent="1" source="LG2FzYKowvd94eDzYkV2-28" target="LG2FzYKowvd94eDzYkV2-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="380" y="360" /> + <mxPoint x="220" y="360" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#82B366;" parent="1" source="LG2FzYKowvd94eDzYkV2-28" target="LG2FzYKowvd94eDzYkV2-2" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="380" y="340" /> + <mxPoint x="380" y="340" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#82B366;" parent="1" source="LG2FzYKowvd94eDzYkV2-28" target="LG2FzYKowvd94eDzYkV2-3" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="380" y="360" /> + <mxPoint x="620" y="360" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-28" value="Console" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1"> + <mxGeometry x="330" y="490" width="100" height="20" as="geometry" /> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#82B366;" parent="1" source="LG2FzYKowvd94eDzYkV2-29" target="LG2FzYKowvd94eDzYkV2-28" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="500" y="500" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LG2FzYKowvd94eDzYkV2-29" value="dynconfig.yaml" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;fillColor=#b0e3e6;strokeColor=#0e8088;" parent="1" vertex="1"> + <mxGeometry x="460" y="560" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="wVVEwfBdDmv9Ek4i4r_U-1" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="240" as="sourcePoint" /> + <mxPoint x="840" y="240" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="wVVEwfBdDmv9Ek4i4r_U-2" value="config delivered by administrator" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="740" y="250" width="130" height="30" as="geometry" /> + </mxCell> + <mxCell id="wVVEwfBdDmv9Ek4i4r_U-3" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=#82B366;" parent="1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="760" y="320" as="sourcePoint" /> + <mxPoint x="840" y="320" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="wVVEwfBdDmv9Ek4i4r_U-4" value="config delivered by YDB" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> + <mxGeometry x="740" y="330" width="130" height="30" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/ydb/docs/ru/core/maintenance/manual/cms.md b/ydb/docs/ru/core/maintenance/manual/cms.md index 865220d861..f9e135fde2 100644 --- a/ydb/docs/ru/core/maintenance/manual/cms.md +++ b/ydb/docs/ru/core/maintenance/manual/cms.md @@ -1,5 +1,11 @@ # Изменение конфигураций через CMS +{% note info %} + +Данный способ изменения конфигурации является устаревшим. Рекомендуемый способ конфигурирования описан в разделе [динамическая конфигурация кластера](./dynamic-config.md). + +{% endnote %} + ## Получить текущие настройки Следующая команда позволит получить текущие настройки по кластеру или по тенанту. diff --git a/ydb/docs/ru/core/maintenance/manual/config-overview.md b/ydb/docs/ru/core/maintenance/manual/config-overview.md new file mode 100644 index 0000000000..c84af8e828 --- /dev/null +++ b/ydb/docs/ru/core/maintenance/manual/config-overview.md @@ -0,0 +1,35 @@ +# Обзор конфигурации + +Для запуска узла {{ ydb-short-name }} требуется конфигурация. Существуют два типа конфигурации: +* **статическая** — файл в формате YAML, хранящийся на локальном диске узла. +* **динамическая** — документ в формате YAML, хранящийся в хранилище конфигурации YDB. + +Статические узлы кластера используют статическую конфигурацию. Динамические узлы могут использовать статическую конфигурацию, динамическую конфигурацию или их комбинацию. + +## Статическая конфигурация + +Статическая конфигурация представляет собой YAML файл, хранимый на узлах кластера. В этом файле перечислены все настройки системы. Путь к файлу передается на вход процессу ydbd при запуске через параметр командной строки. Распространение статической конфигурации по кластеру и поддержка её в консистентном состоянии на всех узлах — ответственность администратора кластера. Подробности по использованию статической конфигурации можно найти в разделе [{#T}](../../deploy/configuration/config.md). Эта конфигурация **необходима** для запуска статических узлов. + + + +### Базовый сценарий использования + +1. Скопировать [стандартную конфигурацию](https://github.com/ydb-platform/ydb/tree/main/ydb/deploy/yaml_config_examples/) из github. +2. Изменить конфигурацию в соответствии с вашими требованиями. +3. Разместить идентичные файлы конфигурации на всех узлах кластера. +4. Запустить все узлы кластера, указав путь к файлу конфигурации явно, используя аргумент командной строки `--yaml-config`. + +## Динамическая конфигурация + +Динамическая конфигурация является YAML документом, надёжно сохранённом в кластере в [таблетке](../../concepts/cluster/common_scheme_ydb.md#tablets) Console. В отличие от статической её достаточно загрузить в кластер, так как за её распространение и поддержание в консистетном состоянии будет отвечать {{ ydb-short-name }}. При этом динамическая конфигурация при помощи селекторов позволяет обрабатывать, в том числе, сложные сценарии, оставаясь при этом в рамках одного файла конфигурации. Описание динамической конфигурации представлено в разделе [{#T}](./dynamic-config.md). + + + +### Базовый сценарий использования + +1. Скопировать [стандартную конфигурацию](https://github.com/ydb-platform/ydb/tree/main/ydb/deploy/yaml_config_examples/) из github. +2. Изменить конфигурацию в соответствии с вашими требованиями. +3. Разместить идентичные файлы конфигурации на всех статических узлах кластера. +4. Запустить все статические узлы кластера, указав путь к файлу конфигурации явно, используя аргумент командной строки `--yaml-config`. +5. Дополнить файл конфигурации до [формата динамической конфигурации](./dynamic-config.md#example). +6. Загрузить на кластер полученную конфигурацию при помощи `{{ ydb-cli }} admin config replace -f dynconfig.yaml`. diff --git a/ydb/docs/ru/core/maintenance/manual/dynamic-config-selectors.md b/ydb/docs/ru/core/maintenance/manual/dynamic-config-selectors.md new file mode 100644 index 0000000000..7dd3eb9c47 --- /dev/null +++ b/ydb/docs/ru/core/maintenance/manual/dynamic-config-selectors.md @@ -0,0 +1,357 @@ +# DSL конфигурации кластера + +## Селекторы {#selectors-intro} + +Основной сущностью DSL являются **селекторы**. Они позволяют переопределять часть конфигурации или конфигурацию целиком для определенных узлов или групп узлов. Например, они могут быть использованы для включения экспериментальной функциональности узлов определенной базы данных. +Каждый селектор представляет собой массив переопределений и расширений основной конфигурации. У каждого селектора есть поле `description`, которое может использоваться для хранения произвольной строки описания. Поле `selector` представляет собой набор правил, по которым определяется, должен ли данный селектор применяться для определенного узла, то есть для какого-либо набора лейблов. Поле `config` описывает правила переопределения. +Селекторы применяются в порядке их описания. + +## Лейблы {#labels} + +Лейблы — это особые метки, с помощью которых можно пометить узлы или группы узлов. Каждый узел имеет набор автоматически задаваемых лейблов: +* `node_id` — внутренний идентификатор узла в системе; +* `node_host` — `hostname` узла получаемый при старте; +* `tenant` — база данных обслуживаемая данным узлом; +* `dynamic` — является ли данный узел динамическим (true/false). + +И, опционально, какие-либо дополнительные лейблы, явно определённые пользователем при запуске процесса `ydbd` на узле при помощи аргументов командной строки. Например: `--label example=test`. + +## Пример использования селекторов {#selectors-example} + +В примере ниже определяется общая конфигурация актор-системы и конфигурация для тенанта `large_tenant`. По умолчанию при такой конфигурации актор-система считает, что на узле 4 ядра, а на узлах тенанта `large_tenant` по 16 ядер, при этом также переопределяется тип узлов для актор-системы на `COMPUTE`. + +```yaml +metadata: + cluster: "" + version: 8 +config: + actor_system_config: + use_auto_config: true + node_type: STORAGE + cpu_count: 4 + +# Раздел используется как хинт при генерации возможных конфигураций при помощи команды resolve +allowed_labels: + dynamic: + type: string + +selector_config: +- description: large_tenant has bigger nodes with 16 cpu # произвольная строка с описанием + selector: # селектор для всех узлов тенанта large_tenant + tenant: large_tenant + config: + actor_system_config: !inherit # переиспользуем исходный actor_system_config, семантика !inherit описана в разделе ниже + # в данном случае !inherit позволяет управлять параметром actor_system_config.use_auto_config одновременно для всего кластера изменяя лишь базовую настройку + cpu_count: 16 + node_type: COMPUTE +``` + +## Допустимые лейблы + +Отображение, в котором можно задать допустимые значения для лейблов. Раздел используется как хинт при генерации возможных конфигураций при помощи команды resolve. При запуске узлов значения не валидируются. + +Доступно два типа лейблов: +* string; +* enum. + +### string +Может принимать любые значения, или быть не задан. + +Пример: +```yaml +dynamic: + type: string +host_name: + type: string +``` + +### enum +Может принимать значения из списка `values`, или быть не задан. + +Пример: +```yaml +flavour: + type: enum + values: + ? small + ? medium + ? big +``` + + +## Поведение селекторов + +Селекторы представляют простой язык предикатов. Селекторы по каждому лейблу объединяются через условие **И**. + +### Простой селектор + +Следующий селектор выберет узлы, на которых значение лейбла `label1` равно `value1` **и** лейбла `label2` равно `value2`: +```yaml +selector: + label1: value1 + label2: value2 +``` + +Следующий селектор выберет **ВСЕ** узлы в кластере, т.к. никаких условий не задано: +```yaml +selector: {} +``` + +### In + +Данный оператор позволяет выбирать узлы с значением лейблов из списка. + +Следующий селектор выберет все узлы, где лейбл `label1` равен `value1` **или** `value2`: +```yaml +selector: + label1: + in: + - value1 + - value2 +``` + +### NotIn + +Данный оператор позволяет выбирать узлы, у которых выбранный лейбл не равен значению из списка. + +Следующий селектор выберет все узлы, где лейбл `label1` равен `value1` **и** `label2` не равен `value2` **и** `value3`: +```yaml +selector: + label1: value1 + label2: + not_in: + - value2 + - value3 +``` + +## Дополнительные теги в YAML + +Теги необходимы для частичного или полного переиспользования конфигураций предыдущих селекторов. С помощью них можно объеденить, расширить, удалить и полностью переопределить параметры, заданные в предыдущих селекторах и основной конфигурации. + +### !inherit + +**Область применения:** [YAML mapping](https://yaml.org/spec/1.2.2/#mapping) +**Действие:** аналогично [merge-тегу](https://yaml.org/type/merge.html) в YAML, скопировать все дочерние элементы из родительского отображения и объеденить с текущими с перезаписью +**Пример:** + +#| +|| Изначальная конфигурация | Переопределение | Результирующая конфигурация || +|| +```yaml +config: + some_config: + first_entry: 1 + second_entry: 2 + third_entry: 3 +``` +| +```yaml +config: + some_config: !inherit + second_entry: 100 +``` +| +```yaml +config: + some_config: + first_entry: 1 + second_entry: 100 + third_entry: 3 +``` +|| +|# + +### !inherit:\<key\> + +**Область применения:** [YAML sequence](https://yaml.org/spec/1.2.2/#sequence) +**Действие:** скопировать элементы родительского массива и переписать, трактуя объект key в элементах как ключ, дописывая новые ключи в конец +**Пример:** + +#| +|| Изначальная конфигурация | Переопределение | Результирующая конфигурация || +|| +```yaml +config: + some_config: + array: + - abc: 2 + value: 10 + - abc: 1 + value: 20 + another_value: test +``` +| +```yaml +config: + some_config: !inherit + array: !inherit:abc + - abc: 1 + value: 30 + - abc: 3 + value: 40 +``` +| +```yaml +config: + some_config: + array: + - abc: 2 + value: 10 + - abc: 1 + value: 30 + - abc: 3 + value: 40 +``` +|| +|# + +### !remove + +**Область применения:** YAML sequence element под !inherit:\<key\> +**Действие:** удалить элемент с соотвествующим ключом. +**Пример:** + +#| +|| Изначальная конфигурация | Переопределение | Результирующая конфигурация || +|| +```yaml +config: + some_config: + array: + - abc: 2 + value: 10 + - abc: 1 + value: 20 + another_value: test +``` +| +```yaml +config: + some_config: !inherit + array: !inherit:abc + - !remove + abc: 1 +``` +| +```yaml +config: + some_config: + array: + - abc: 2 + value: 10 +``` +|| +|# +### !append + +**Область применения:** [YAML sequence](https://yaml.org/spec/1.2.2/#sequence) +**Действие:** скопировать элементы родительского массива и дописать новые в конец +**Пример:** + +#| +|| Изначальная конфигурация | Переопределение | Результирующая конфигурация || +|| +```yaml +config: + some_config: + array: + - abc: 2 + value: 10 + - abc: 1 + value: 20 + another_value: test +``` +| +```yaml +config: + some_config: !inherit + array: !append + - abc: 1 + value: 30 + - abc: 3 + value: 40 +``` +| +```yaml +config: + some_config: + array: + - abc: 2 + value: 10 + - abc: 1 + value: 20 + another_value: test + - abc: 1 + value: 30 + - abc: 3 + value: 40 +``` +|| +|# + +## Генерация конечных конфигураций {#selectors-resolve} + +Конфигурации могут содержать сложные наборы переопределений. С помощью [{{ ydb-short-name }} CLI](../../reference/ydb-cli/index.md) существует возможность посмотреть конечные конфигурации для: +* конкретных узлов; +* наборов лейблов; +* все возможные комбинации для текущей конфигурации. + +```bash +# Сгенерировать все возможные конечные конфигурации для cluster.yaml +{{ ydb-cli }} admin config resolve --all -f cluster.yaml +# Сгенерировать конфигурацию для cluster.yaml при лейблах tenant=/Root/test и canary=true +{{ ydb-cli }} admin config resolve -f cluster.yaml --label tenant=/Root/test --label canary=true +# Сгенерировать конфигурацию для cluster.yaml при лейблах аналогичных текущим на узле 1001 +{{ ydb-cli }} admin config resolve -f cluster.yaml --node_id 1001 +# Взять текущую конфигурацию кластера и сгенерировать для него финальную конфигурацию при лейблах аналогичных текущим на узле 1001 +{{ ydb-cli }} admin config resolve --from-cluster --node_id 1001 +``` + +Более подробно команда преобразования конфигурации описана в разделе [{#T}](../../reference/ydb-cli/configs.md). + +Пример вывода `{{ ydb-cli }} admin config resolve --all -f cluster.yaml` для следующего файла конфигурации: +```yaml +metadata: + cluster: "" + version: 8 +config: + actor_system_config: + use_auto_config: true + node_type: STORAGE + cpu_count: 4 +allowed_labels: + dynamic: + type: string +selector_config: +- description: Actorsystem for dynnodes # произвольная строка с описанием + selector: # селектор для всех узлов с лейблом dynamic = true + dynamic: true + config: + actor_system_config: !inherit # переиспользуем исходный actor_system_config, семантика !inherit описана в разделе ниже + node_type: COMPUTE + cpu_count: 8 +``` +Вывод: +```yaml +--- +label_sets: # наборы лейблов, для которых сгенерирована конфигурация +- dynamic: + type: NOT_SET # один из трех типов лейбла: NOT_SET | COMMON | EMPTY +config: # сгенерированная конфигурация + invalid: 1 + actor_system_config: + use_auto_config: true + node_type: STORAGE + cpu_count: 4 +--- +label_sets: +- dynamic: + type: COMMON + value: true # значение лейбла +config: + invalid: 1 + actor_system_config: + use_auto_config: true + node_type: COMPUTE + cpu_count: 8 +``` diff --git a/ydb/docs/ru/core/maintenance/manual/dynamic-config-volatile-config.md b/ydb/docs/ru/core/maintenance/manual/dynamic-config-volatile-config.md new file mode 100644 index 0000000000..3fa846b5c3 --- /dev/null +++ b/ydb/docs/ru/core/maintenance/manual/dynamic-config-volatile-config.md @@ -0,0 +1,61 @@ +# Временные конфигурации + +Временные конфигурации — это специальный вид конфигураций, которые дополняют динамическую и при этом не являются персистентными. Т.е. данные конфигурации сбрасываются при переезде или рестарте [таблетки](../../concepts/cluster/common_scheme_ydb.md#tablets) Console, а так же при обновлении основной конфигурации. + +Основные сценарии использования: +- временное изменение конфигурации для отладки или тестирования; +- пробное включение потенциально опасных настроек. В случае падения или рестарта кластера данные настройки будут автоматически отключены. + +Данные конфигурации добавляются в конец набора селекторов, синтаксис описания идентичен [синтаксису селекторов](./dynamic-config-selectors.md). + +```bash +# Получить все временные конфигурации загруженные на кластер +{{ ydb-cli }} admin config volatile fetch --all --output-directory <dir> +# Получить временную конфигурацию с id=1 +{{ ydb-cli }} admin config volatile fetch --id 1 +# Применить временную конфигурацию volatile.yaml на кластер +{{ ydb-cli }} admin config volatile add -f volatile.yaml +# Удалить временные конфигурации с id=1 и id=3 на кластере +{{ ydb-cli }} admin config volatile drop --id 1 --id 3 +# Удалить все временные конфигурации на кластере +{{ ydb-cli }} admin config volatile drop --all +``` + +## Пример работы с временной конфигурацией + +Временное включение настроек журналирования компонента `blobstorage` в `DEBUG` на узле `host1.example.com`: +```bash +# Запрос текущих метаданных, чтобы сформировать корректный заголовок временной конфигурации +$ {{ ydb-cli }} admin config describe --all +--- +kind: MainConfig +cluster: "example-cluster-name" +version: 2 +--- +kind: VolatileConfig +cluster: "example-cluster-name" +version: 2 +id: 1 +# Загрузка конфигурации с версией 2, именем кластера example-cluster-name и идентификатором 2 +$ {{ ydb-cli }} admin config volatile add -f - <<<EOF +metadata: + kind: VolatileConfig + cluster: "example-cluster-name" + version: 2 + id: 2 +selector_config: +- description: Set blobstorage logging level to DEBUG + selector: + node_host: host1.example.com + config: + log_config: !inherit + entry: !inherit_key:component + - component: BLOBSTORAGE + level: 8 +EOF +# ... +# анализ журнала +# ... +# Удаление конфигурации +$ {{ ydb-cli }} admin config volatile drop --id 2 +``` diff --git a/ydb/docs/ru/core/maintenance/manual/dynamic-config.md b/ydb/docs/ru/core/maintenance/manual/dynamic-config.md new file mode 100644 index 0000000000..eeb4b0e130 --- /dev/null +++ b/ydb/docs/ru/core/maintenance/manual/dynamic-config.md @@ -0,0 +1,136 @@ +## Динамическая конфигурация кластера + +Динамическая конфигурация позволяет запускать динамические [узлы](../../concepts/cluster/common_scheme_ydb#nodes), сконфигурировав их централизованно, без необходимости раскладывать файлы по узлам вручную. {{ ydb-short-name }} выступает в роли системы управления конфигурациями, предоставляя инструменты для надёжного хранения, версионирования и доставки конфигурации, а так же [DSL (Domain Specific Language)](./dynamic-config-selectors.md) для переопределения её частей для определённых групп узлов. Конфигурация представляет собой YAML документ. Он является расширенной версией статической конфигурацией: +* описание конфигурации вынесено в поле `config`; +* добавлено поле `metadata`, необходимое для валидации и версионирования; +* добавлены поля `allowed_labels` и `selector_config` для гранулярного переопределения настроек. +Эта конфигурация загружается в кластер, где надёжно сохраняется и доставляется до каждого динамического узла при его старте. [Определенные настройки](#dynamic-kinds) обновляются на лету, без перезапуска узлов. С помощью динамической конфигурации можно централизованно решить следующие задачи: +* переключение настроек журналирования компонентов как для всего кластера, так и для отдельных групп узлов; +* включать экспериментальную функциональность (feature flags) на отдельных базах; +* изменить настройки акторной системы на отдельно узле или на групе узлов; +* и т.д. + +### Примеры конфигурации {#example} + +Пример минимальной динамической конфигурации для однодатацентрового кластера: +```yaml +# Метаданные конфигурации. +# Поле управляется сервером +metadata: + # Имя кластера из параметра cluster_uuid, выставляемом при установке кластера, или "", если параметр не выставлен + cluster: unknown + # Идентификатор конфигурационного файла, всегда возрастает на 1 и начинается с 1. + # Увеличивается автоматически при загрузке новой конфигурации на сервер. + version: 1 +# Основная конфигурация кластера, все значения из него применяются по-умолчанию, пока не переопределены селекторами. +# Содержание аналогично статической конфигурации кластера +config: +# должен быть всегда выставлен в true для использования yaml конфигурации + yaml_config_enabled: true +# конфигурация актор-системы, т.к. по-умолчанию данная секция используется только дин-нодами +# выставлена конфигурация именно для ни + actor_system_config: +# автоматический подбор конфигурации для ноды на основе типа и количества доступных ядер + use_auto_config: true +# HYBRID || COMPUTE || STORAGE — тип ноды + node_type: COMPUTE +# число ядер + cpu_count: 4 +# конфигурация корневого домена кластера {{ ydb-short-name }} + domains_config: + domain: + - name: Root + storage_pool_types: + - kind: ssd + pool_config: + box_id: 1 + erasure_species: none + kind: ssd + pdisk_filter: + - property: + - type: SSD + vdisk_kind: Default + explicit_mediators: [72075186232426497, 72075186232426498, 72075186232426499] + explicit_coordinators: [72075186232360961, 72075186232360962, 72075186232360963] + explicit_allocators: [72075186232492033, 72075186232492034, 72075186232492035] + state_storage: + - ssid: 1 + ring: + nto_select: 5 + node: [1, 2, 3, 4, 5, 6, 7, 8] + hive_config: + - hive_uid: 1 + hive: 72057594037968897 +# конфигурация профилей каналов таблеток + channel_profile_config: + profile: + - profile_id: 0 + channel: + - &default_channel + erasure_species: block-4-2 + pdisk_category: 1 + vdisk_category: Default + - *default_channel + - *default_channel +allowed_labels: {} +selector_config: [] +``` + +Подробнее параметры конфигурации описаны на странице [{#T}](../../deploy/configuration/config.md). + +По умолчанию конфигурация кластера является пустой и имеет версию 1. При применении новой конфигурации версия загружаемой конфигурации сравнивается и автоматически увеличивается на единицу. + +### Обновление динамической конфигурации + +```bash +# Получить конфигурацию кластера +{{ ydb-cli }} admin config fetch > dynconfig.yaml +# Отредактировать при помощи любого текстового редактора +vim dynconfig.yaml +# Применить конфигурационный файл dynconfig.yaml на кластер +{{ ydb-cli }} admin config replace -f dynconfig.yaml +``` + +Дополнительные возможности конфигурирования описаны на страницах [селекторы](./dynamic-config-selectors.md) и [временная конфигурация](./dynamic-config-volatile-config.md). +Все команды для работы с конфигурацией описаны в разделе [{#T}](../../reference/ydb-cli/configs.md). + +### Механизм работы + +#### Обновление конфигурации 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/cluster/common_scheme_ydb.md#tablets) Console. +5. Обновления файла рассылаются по узлам кластера. + +#### Обновление конфигурации с точки зрения узла кластера + +1. Каждый узел при старте запрашивает полную конфигурацию. +2. Получив конфигурацию, узел [генерирует конечную конфигурацию](./dynamic-config-selectors.md#selectors-resolve) для своего набора [лейблов](./dynamic-config-selectors.md#selectors-intro). +3. Узел подписывается на обновления конфигурации, регистрируясь в таблетке Console. +4. В случае обновления конфигурации локальный сервис получает его и преобразует для лейблов узла. +5. Все локальные сервисы, подписанные на обновления, получают обновлённую конфигурацию. + +Пункты 1,2 выполняются только для динамических узлов кластера. + +#### Версионирование конфигурации + +Данный механизм позволяет избежать конкурентной модификации конфигурации и сделать её обновление идемпотентным. При получении запроса на модификацию конфигурации сервер сравнивает версию полученной модификации с сохраненной. Если версия меньше на единицу, то конфигурации сравниваются — если они одинаковы, значит пользователь пытается загрузить конфигурацию повторно, пользователь получает ОК, а конфигурация на кластере не обновляется. Если версия равна текущей на кластере, то конфигурация заменяется на новую, при этом поле версии увеличивается на единицу. Во всех остальных случаях пользователь получает ошибку. + +### Динамически обновляемые настройки {#dynamic-kinds} + +Часть настроек системы обновляется без перезапуска узлов. Для их изменения достаточно загрузить новую конфигурацию и дождаться её распространения по кластеру. + +Список динамически обновляемых настроек: +* `log_config`; +* `immediate_controls_config`; +* `table_service_config`; +* `monitoring_config`. + +В будущем список может быть расширен. + +### Ограничения + +* Использование более 30 различных [лейблов](./dynamic-config-selectors.md) в [селекторах](./dynamic-config-selectors.md) может привести к задержкам при валидации конфигурации в десятки секунд, т.к. {{ ydb-short-name }} необходимо проверить валидность каждой возможной конечной конфигурации. При этом количество значений одного лейбла влияет намного меньше. +* Использование объемных файлов (более 500KiB для кластера в 1000 узлов), конфигурации может привести к росту сетевого трафика в кластере при обновлении конфигурации. Объем трафика прямо пропорционален количеству нод и объему конфигурации. diff --git a/ydb/docs/ru/core/maintenance/toc_i.yaml b/ydb/docs/ru/core/maintenance/toc_i.yaml index 01fd204572..30b3414b4f 100644 --- a/ydb/docs/ru/core/maintenance/toc_i.yaml +++ b/ydb/docs/ru/core/maintenance/toc_i.yaml @@ -11,5 +11,17 @@ items: include: { mode: link, path: manual/toc_p.yaml } - name: Изменение конфигурации актор-системы href: manual/change_actorsystem_configs.md - - name: Изменение конфигураций через CMS - href: manual/cms.md + - name: Управление конфигурацией кластера + items: + - name: Обзор конфигурации + href: manual/config-overview.md + - name: Статическая конфигурация кластера + href: ../deploy/configuration/config.md + - name: Динамическая конфигурация кластера + href: manual/dynamic-config.md + - name: DSL конфигурации кластера + href: manual/dynamic-config-selectors.md + - name: Временная конфигурация + href: manual/dynamic-config-volatile-config.md + - name: Изменение конфигураций через CMS + href: manual/cms.md diff --git a/ydb/docs/ru/core/reference/ydb-cli/configs.md b/ydb/docs/ru/core/reference/ydb-cli/configs.md new file mode 100644 index 0000000000..7ca0161827 --- /dev/null +++ b/ydb/docs/ru/core/reference/ydb-cli/configs.md @@ -0,0 +1,160 @@ +## Работа с конфигурацией + +### Общие флаги для команд + +* `-f, --filename <filename.yaml>` — считать input из файла, `-` для STDIN. Для команд принимающих n файлов (прим. resolve) можно указать несколько раз, тип файла будет определён по полю metadata +* `-k, --directory <dir>` — считать input из директории +* `--output-directory <dir>` — сдампить/порезолвить файлы в директорию +* `-o, --output <json-stream|json|yaml>` — изменить формат вывода, по-умолчанию yaml +* `-s, --strip-metadata` — выкинуть поле metadata из вывода +* `-a, --all` — расширяет вывод команд до всей конфигурации (см. продвинутое конфигурирование) + + +```bash +# Применить конфигурацию dynconfig.yaml на кластер +{{ ydb-cli }} admin config replace -f dynconfig.yaml +# Проверить возможно ли применить конфигурацию dynconfig.yaml на кластер (проверить все валидаторы, совпадение версий и кластера) +{{ ydb-cli }} admin config replace -f dynconfig.yaml --dry-run +# Применить конфигурацию dynconfig.yaml на кластер игнорирую проверку версий и кластера (версия и кластер всё равно будут перезаписаны на корректные) +{{ ydb-cli }} admin config replace -f dynconfig.yaml --force +# Получить основную конфигурацию кластера +{{ ydb-cli }} admin config fetch +# Получить все текущие конфигурационные файлы кластера +{{ ydb-cli }} admin config fetch --all +# Получить метаинформацию о конфигурациях кластера +{{ ydb-cli }} admin config describe +# Сгенерировать все возможные конечные конфигурации для dynconfig.yaml +{{ ydb-cli }} admin config resolve --all -f dynconfig.yaml +# Сгенерировать конечную конфигурацию для dynconfig.yaml при лейблах tenant=/Root/test и canary=true +{{ ydb-cli }} admin config resolve -f dynconfig.yaml --label tenant=/Root/test --label canary=true +# Сгенерировать конечную конфигурацию для dynconfig.yaml для лейблов с узла 1003 +{{ ydb-cli }} admin config resolve -f dynconfig.yaml --node-id 1003 +# Получить все временные конфигурации кластера +{{ ydb-cli }} admin config volatile fetch --all --output-directory <dir> +# Получить временную конфигурацию с id 1 с кластера +{{ ydb-cli }} admin config volatile fetch --id 1 +# Применить временную конфигурацию volatile.yaml на кластер +{{ ydb-cli }} admin config volatile add -f volatile.yaml +# Удалить временные конфигурации с id 1 и 3 на кластере +{{ ydb-cli }} admin config volatile drop --id 1 --id 3 +# Удалить все временные конфигурации на кластере +{{ ydb-cli }} admin config volatile drop --all +``` + +## Сценарии + +### Обновить основную конфигурацию кластера + ```bash +# Получить конфигурацию кластера +{{ ydb-cli }} admin config fetch > dynconfig.yaml +# Отредактировать конфигурацию вашим любимым редактором +vim dynconfig.yaml +# Применить конфигурацию dynconfig.yaml на кластер +{{ ydb-cli }} admin config replace -f dynconfig.yaml +``` +аналогично в одну строчку: +```bash +{{ ydb-cli }} admin config fetch | yq '.config.actor_system_config.scheduler.resolution = 128' | {{ ydb-cli }} admin config replace -f - +``` +вывод команды: +``` +OK +``` +### Посмотреть конфигурацию для определённого набора лейблов +```bash +{{ ydb-cli }} admin config resolve --remote --label tenant=/Root/db1 --label canary=true +``` +вывод команды: +```yaml +--- +label_sets: +- dynamic: + type: COMMON + value: true +config: + actor_system_config: + use_auto_config: true + node_type: COMPUTE + cpu_count: 4 +``` + +### Посмотреть конфигурацию для определённого узла +```bash +{{ ydb-cli }} admin config resolve --remote --node-id <node_id> +``` +вывод команды: +```yaml +--- +label_sets: +- dynamic: + type: COMMON + value: true +config: + actor_system_config: + use_auto_config: true + node_type: COMPUTE + cpu_count: 4 +``` + +### Сохранить все конфигурации локально +```bash +{{ ydb-cli }} admin config fetch --all --output-directory <configs_dir> +ls <configs_dir> +``` +вывод команды: +``` +dynconfig.yaml volatile_1.yaml volatile_3.yaml +``` + +### Посмотреть все конфигурации локально +```bash +{{ ydb-cli }} admin config fetch --all +``` +вывод команды: +```yaml +--- +metadata: + kind: main + cluster: unknown + version: 1 +config: + actor_system_config: + use_auto_config: true + node_type: COMPUTE + cpu_count: 4 +allowed_labels: {} +selector_config: [] +--- +metadata: + kind: volatile + cluster: unknown + version: 1 + id: 1 +# some comment example +selectors: +- description: test + selector: + tenant: /Root/db1 + config: + actor_system_config: !inheirt + use_auto_config: true + cpu_count: 12 +``` + +### Посмотреть конечную конфигурацию для определённого узла из сохраненной локально исходной конфигурации +```bash +{{ ydb-cli }} admin config resolve -k <configs_dir> --node-id <node_id> +``` +вывод команды: +```yaml +--- +label_sets: +- dynamic: + type: COMMON + value: true +config: + actor_system_config: + use_auto_config: true + node_type: COMPUTE + cpu_count: 4 +``` diff --git a/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml b/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml index 7f32e94776..0c1cddda41 100644 --- a/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml +++ b/ydb/docs/ru/core/reference/ydb-cli/toc_i.yaml @@ -69,7 +69,7 @@ items: - name: Запись в топик href: topic-write.md - name: Конвейерная обработка сообщений - href: topic-pipeline.md + href: topic-pipeline.md - name: Выполнение YQL items: - name: Обзор @@ -122,3 +122,5 @@ items: href: workload-topic.md - name: TPC-H нагрузка href: workload-tpch.md + - name: Работа с конфигурацией + href: configs.md |