|
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