|
1 | 1 | # Обслуживание кластера без потери доступности
|
2 | 2 |
|
3 | 3 | Периодически кластер {{ ydb-short-name }} необходимо обслуживать, например, обновлять его версию или заменять сломавшиеся диски. Работы по обслуживанию могут привести к недоступности кластера или имеющихся баз данных из-за:
|
4 |
| -- Превышения модели отказа затронутых [групп хранения](../concepts/databases.md#storage-groups). |
5 |
| -- Превышения модели отказа [State Storage](../deploy/configuration/config.md#domains-state). |
6 |
| -- Недостатка вычислительных ресурсов вследствие остановки слишком большого количества [динамических узлов](../concepts/cluster/common_scheme_ydb.md#nodes). |
| 4 | +- Превышения модели отказа затронутых [групп хранения](../../concepts/databases.md#storage-groups). |
| 5 | +- Превышения модели отказа [State Storage](../../deploy/configuration/config.md#domains-state). |
| 6 | +- Недостатка вычислительных ресурсов вследствие остановки слишком большого количества [динамических узлов](../../concepts/cluster/common_scheme_ydb.md#nodes). |
7 | 7 |
|
8 |
| -Для избежания таких ситуаций в {{ ydb-short-name }} есть системная [таблетка](../concepts/cluster/common_scheme_ydb.md#tablets), которая следит за состоянием кластера — *Cluster Management System (CMS)*. CMS позволяет ответить на вопрос можно ли безопасно вывести в обслуживание узел {{ ydb-short-name }} или хост, на котором работают узлы {{ ydb-short-name }}. Для этого необходимо создать [задачу обслуживания](#maintenance-task) в CMS и указать в ней взятие эксклюзивных блокировок на узлы или хосты, которые будут задействованы в обслуживании. Компоненты кластера, на которые взяты блокировки, считаются недоступными с точки зрения CMS, и их можно безопасно обслуживать. CMS [проверит](#check-task-actions-algorithm) текущее состояние кластера и возьмет блокировки, только если работы по обслуживанию соответствуют ограничениям [режима доступности](#availability-mode) и [лимитам недоступных узлов](#unavailable-node-limits). |
| 8 | +Для избежания таких ситуаций в {{ ydb-short-name }} есть системная [таблетка](../../concepts/cluster/common_scheme_ydb.md#tablets), которая следит за состоянием кластера — *Cluster Management System (CMS)*. CMS позволяет ответить на вопрос можно ли безопасно вывести в обслуживание узел {{ ydb-short-name }} или хост, на котором работают узлы {{ ydb-short-name }}. Для этого необходимо создать [задачу обслуживания](#maintenance-task) в CMS и указать в ней взятие эксклюзивных блокировок на узлы или хосты, которые будут задействованы в обслуживании. Компоненты кластера, на которые взяты блокировки, считаются недоступными с точки зрения CMS, и их можно безопасно обслуживать. CMS [проверит](#checking-algorithm) текущее состояние кластера и возьмет блокировки, только если работы по обслуживанию соответствуют ограничениям [режима доступности](#availability-mode) и [лимитам недоступных узлов](#unavailable-node-limits). |
9 | 9 |
|
10 | 10 | {% note warning "Поломки во время проведения работ" %}
|
11 | 11 |
|
|
18 | 18 | *Задача обслуживания* представляет собой набор *действий*, которые пользователь просит выполнить CMS для возможности проведения безопасного обслуживания.
|
19 | 19 |
|
20 | 20 | Поддерживаемые действия:
|
21 |
| -- Взятие эксклюзивной блокировки на компонент кластера — узел или хост. |
| 21 | +- Взятие эксклюзивной блокировки на компонент кластера (узел или хост). |
22 | 22 |
|
23 | 23 | В задаче действия делятся на группы. Действия из одной группы выполняются атомарно. На данный момент группы могут состоять только из одного действия.
|
24 | 24 |
|
|
37 | 37 | ### Режим доступности {#availability-mode}
|
38 | 38 |
|
39 | 39 | В задаче обслуживания необходимо указать режим доступности кластера, который должен соблюдаться при проверке возможности выполнения действий. Поддерживаются следующие режимы:
|
40 |
| -- **Strong** — режим, минимизирующий риск потери доступности. |
41 |
| - - Допускается не более одного недоступного [VDisk](../concepts/cluster/distributed_storage.md#storage-groups) в каждой из затрагиваемых групп хранения. |
| 40 | +- **Strong**: режим, минимизирующий риск потери доступности. |
| 41 | + - Допускается не более одного недоступного [VDisk](../../concepts/cluster/distributed_storage.md#storage-groups) в каждой из затрагиваемых групп хранения. |
42 | 42 | - Допускается не более одного недоступного кольца State Storage.
|
43 |
| -- **Weak** — режим, не позволяющий превысить модель отказа. |
44 |
| - - Допускается не более двух недоступных VDisk-ов для затрагиваемых групп хранения со схемой [block-4-2](../administration/production-storage-config.md#reliability). |
45 |
| - - Допускается не более четырех недоступных VDisk-ов, три из которых должны находиться в одном датацентре, для затрагиваемых групп хранения со схемой [mirror-3-dc](../administration/production-storage-config.md#reliability). |
| 43 | +- **Weak**: режим, не позволяющий превысить модель отказа. |
| 44 | + - Допускается не более двух недоступных VDisk-ов для затрагиваемых групп хранения со схемой [block-4-2](../../deploy/configuration/config.md#reliability). |
| 45 | + - Допускается не более четырех недоступных VDisk-ов, три из которых должны находиться в одном датацентре, для затрагиваемых групп хранения со схемой [mirror-3-dc](../../deploy/configuration/config.md#reliability). |
46 | 46 | - Допускается не более `(nto_select - 1) / 2` недоступных колец State Storage.
|
47 |
| -- **Force** — принудительный режим, модель отказа игнорируется. Не рекомендуется к использованию. |
| 47 | +- **Force**: принудительный режим, модель отказа игнорируется. *Не рекомендуется к использованию*. |
48 | 48 |
|
49 | 49 | ### Приоритет {#priority}
|
50 | 50 |
|
|
58 | 58 |
|
59 | 59 | По умолчанию допускается не более 10% недоступных узлов для каждой базы данных и кластера в целом.
|
60 | 60 |
|
61 |
| -## Алгоритм проверки действий задачи {#check-task-actions-algorithm} |
| 61 | +## Алгоритм проверки {#checking-algorithm} |
62 | 62 |
|
63 | 63 | Для того, чтобы проверить можно ли выполнить действия задачи обслуживания, CMS последовательно идет по каждой группе действий в задаче и проверяет действие из группы:
|
64 | 64 | - Если объектом действия является хост, то CMS проверяет можно ли выполнить действие со всеми узлами, запущенными на хосте.
|
|
75 | 75 |
|
76 | 76 | Утилита [ydbops](https://github.com/ydb-platform/ydbops) использует CMS для проведения обслуживания кластера без потери доступности. Также CMS можно использовать напрямую через [gRPC API](https://github.com/ydb-platform/ydb/blob/main/ydb/public/api/grpc/draft/ydb_maintenance_v1.proto).
|
77 | 77 |
|
| 78 | +### Rolling restart {#rolling-restart} |
| 79 | + |
| 80 | +Чтобы выполнить rolling restart всего кластера можно воспользоваться командой: |
| 81 | +``` |
| 82 | +$ ydbops restart --endpoint grpc://<cluster-fqdn> --availability-mode strong |
| 83 | +``` |
| 84 | +Если используемое имя systemd unit отличается от стандартного, его можно переопределить с помощью флага `--systemd-unit`. |
| 85 | + |
| 86 | +Утилита `ydbops` автоматически создаст задачу обслуживания на рестарт всего кластера, используя указанный режим доступности. По ходу продвижения `ydbops` будет обновлять задачу обслуживания и получать эксклюзивные блокировки на узлы в CMS, пока все узлы не будут перезапущены. |
| 87 | + |
78 | 88 | ### Вывести узел для обслуживания {#node-maintenance}
|
79 | 89 |
|
80 | 90 | {% note info "Функциональность в разработке" %}
|
81 | 91 |
|
82 |
| -Функциональность ожидается в ближайших версиях ydbops. |
| 92 | +Функциональность ожидается в ближайших версиях `ydbops`. |
83 | 93 |
|
84 | 94 | {% endnote %}
|
85 | 95 |
|
86 |
| -Для выведения узла для обслуживания можно воспользоваться командой: |
87 |
| -``` |
88 |
| -$ ydbops node maintenance --host <node_fqdn> |
89 |
| -``` |
90 |
| -При выполнении этой команды ydbops возьмет эксклюзивную блокировку на узел в CMS. |
91 |
| - |
92 |
| -### Rolling restart {#rolling-restart} |
93 |
| - |
94 |
| -Чтобы выполнить rolling restart всего кластера можно воспользоваться командой: |
95 |
| -``` |
96 |
| -$ ydbops restart --endpoint grpc://<cluster-fqdn> --availability-mode strong |
97 |
| -``` |
98 |
| -Утилита ydbops автоматически создаст задачу обслуживания на рестарт всего кластера, используя указанный режим доступности. По ходу продвижения ydbops будет обновлять задачу обслуживания и получать эксклюзивные блокировки на узлы в CMS, пока все узлы не будут перезапущены. |
| 96 | +Чтобы вывести узел для обслуживания можно воспользоваться утилитой `ydbops`. При выведении узла `ydbops` возьмет эксклюзивную блокировку на этот узел в CMS. |
0 commit comments