---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.0
alternate:
  - https://ydb.tech/docs/en/devops/configuration-management/configuration-v2/node-removal.md
  - https://ydb.tech/docs/ru/devops/configuration-management/configuration-v2/node-removal.md
  - href: https://ydb.tech/docs/ru/devops/configuration-management/configuration-v2/node-removal.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb.tech/docs/ru/llms.txt?revision=a35149bdee1cbbc820c9e5a2b730d682f7173115&version=v26.3
    rel: describedby
sourcePath: ru/core/devops/configuration-management/configuration-v2/node-removal.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt?revision=a35149bdee1cbbc820c9e5a2b730d682f7173115&version=v26.3

# Удаление узла из кластера

<!-- source: ru/devops/configuration-management/_includes/experimental_v2.md -->
{% note warning %}

Эта статья посвящена кластерам YDB, в которых используется [конфигурация V2](https://ydb.tech/docs/ru/devops/configuration-management/configuration-v2/index.md). Данный способ конфигурирования пока является экспериментальным и доступен только для версий YDB начиная с v25.1. Для использования в продакшене мы рекомендуем выбирать [конфигурацию V1](https://ydb.tech/docs/ru/devops/configuration-management/index.md) — она является основной и официально поддерживаемой для всех кластеров YDB.

{% endnote %}
<!-- endsource: ru/devops/configuration-management/_includes/experimental_v2.md -->

В этой статье описано удаление [динамического](https://ydb.tech/docs/ru/concepts/glossary.md#dynamic) или [статического](https://ydb.tech/docs/ru/concepts/glossary.md#static-node) узла из кластера YDB, развёрнутого вручную на виртуальных машинах или физических серверах. Удаление узлов из кластера, развёрнутого в Kubernetes, в этой инструкции не рассматривается.

## Удаление динамического узла

Для удаления динамического узла не требуется изменять конфигурацию кластера.

Чтобы удаление динамического узла не повлияло на выполнение запросов:

1. Выполните [мягкий перенос таблеток](https://ydb.tech/docs/ru/maintenance/manual/node_restarting.md#replace-hardware) с узла и дождитесь его завершения.
1. Остановите процесс YDB на узле. [Сначала проверьте, что процесс можно безопасно остановить, а затем остановите его](https://ydb.tech/docs/ru/maintenance/manual/node_restarting.md#restart_process).

После остановки процесса проверьте на вкладке **Nodes** [страницы мониторинга кластера](https://ydb.tech/docs/ru/reference/ydb-ui/ydb-monitoring.md#node_list_page), что удалённый узел больше не отображается активным. Динамический узел может исчезнуть из списка сразу или временно отображаться со статусом **Disconnected** до истечения аренды его идентификатора в [NodeBroker](https://ydb.tech/docs/ru/concepts/glossary.md#node-broker). Если узел снова переходит в активное состояние, убедитесь, что процесс был остановлен именно на нужном хосте и не настроен на автоматический перезапуск, например службой `systemd` или супервизором.

## Удаление статического узла {#remove-static-node}

Статические узлы обслуживают систему хранения и перечислены в секции [`hosts`](https://ydb.tech/docs/ru/reference/configuration/hosts.md). На дисках статического узла могут находиться [VDisk](https://ydb.tech/docs/ru/concepts/glossary.md#vdisk) [динамических](https://ydb.tech/docs/ru/concepts/glossary.md#dynamic-group) и [статических](https://ydb.tech/docs/ru/concepts/glossary.md#static-group) групп, а на самом узле — реплики [State Storage](https://ydb.tech/docs/ru/concepts/glossary.md#state-storage), [Board](https://ydb.tech/docs/ru/concepts/glossary.md#board) и [SchemeBoard](https://ydb.tech/docs/ru/concepts/glossary.md#scheme-board). Поэтому сначала необходимо перенести эти ресурсы, а затем удалить узел из конфигурации.

Перед началом процедуры проверьте во [встроенном UI](https://ydb.tech/docs/ru/reference/ydb-ui/ydb-monitoring.md#node_storage_page), что затронутые группы хранения работоспособны, то есть все VDisk этих групп отображаются в состоянии `Ok` (выделены зелёным цветом), и ни один VDisk не находится в состоянии `Error` или `Degraded`.

На оставшихся узлах должно быть достаточно свободного места и слотов на [PDisk](https://ydb.tech/docs/ru/concepts/glossary.md#pdisk) для всех VDisk с удаляемого узла. Размещение VDisk по [доменам отказа](https://ydb.tech/docs/ru/concepts/glossary.md#fail-domain) и [областям отказа](https://ydb.tech/docs/ru/concepts/glossary.md#fail-realm) должно соответствовать используемой [схеме кодирования](https://ydb.tech/docs/ru/concepts/glossary.md#erasure-coding), чтобы после удаления узла сохранялась отказоустойчивость групп. Расчёт необходимого запаса приведён в статье [Оценка требуемого оборудования](https://ydb.tech/docs/ru/devops/concepts/capacity-planning.md#hardware-estimation).

[SelfHeal](https://ydb.tech/docs/ru/devops/concepts/selfheal-storage.md) для динамических групп включён по умолчанию. Перед удалением узла убедитесь, что он также включён для остальных ресурсов, размещённых на этом узле:

* Если на узле есть VDisk статической группы, [включите SelfHeal статической группы](https://ydb.tech/docs/ru/devops/configuration-management/configuration-v2/static-group-self-heal.md#on-off). Как альтернативу можно перенести VDisk статической группы с узла вручную, см. [Перемещение статической группы](https://ydb.tech/docs/ru/devops/configuration-management/configuration-v2/static-group-move.md).
* Если узел содержит реплики State Storage, Board или SchemeBoard, включите [SelfHeal подсистем распространения метаданных](https://ydb.tech/docs/ru/devops/concepts/selfheal-metadata-distribution.md#on-off). Как альтернативу можно перенести эти реплики с узла вручную, см. [Конфигурирование подсистем распространения метаданных State Storage, Board, Scheme Board](https://ydb.tech/docs/ru/devops/configuration-management/configuration-v2/state-storage-reconfiguration.md).

Чтобы удалить статический узел:

1. Если на узле работают таблетки, выполните их [мягкий перенос](https://ydb.tech/docs/ru/maintenance/manual/node_restarting.md#replace-hardware).
1. [Проверьте, что процесс можно безопасно остановить](https://ydb.tech/docs/ru/maintenance/manual/node_restarting.md#restart_process), затем остановите его.
1. Дождитесь, пока SelfHeal перенесёт VDisk с узла. С настройками по умолчанию перенос начинается приблизительно через час после остановки узла. Чтобы запустить перенос немедленно, сначала получите идентификаторы всех PDisk удаляемого узла с помощью [YDB DSTool](https://ydb.tech/docs/ru/reference/ydb-dstool/index.md):

    ```bash
    ydb-dstool -e <bs_endpoint> pdisk list --columns NodeId:PDiskId FQDN Path
    ```

    `<bs_endpoint>` — точка подключения к любому доступному узлу хранения в формате `[PROTOCOL://]HOST[:PORT]`, например `http://node1.example.com:8765`.

    Выберите все строки, в которых `FQDN` совпадает с именем хоста удаляемого узла. Проверьте пути к дискам в столбце `Path` и сохраните все соответствующие значения `NodeId:PDiskId`.

    Затем переведите все найденные PDisk в статус `BROKEN` одной командой:

    ```bash
    ydb-dstool -e <bs_endpoint> pdisk set --status BROKEN --unavail-as-offline --pdisk-ids "<pdisk_id_1>" ... "<pdisk_id_N>"
    ```

    Используйте ту же точку подключения `<bs_endpoint>`. Вместо `"<pdisk_id_1>" ... "<pdisk_id_N>"` перечислите через пробел все сохранённые идентификаторы дисков в формате `[NodeId:PDiskId]`, например `"[3:1]" "[3:2]"` для двух дисков узла с `NodeId`, равным `3`. Флаг `--unavail-as-offline` позволяет считать PDisk, недоступные через службу мониторинга Whiteboard, неработающими.

    Команда выполняется на переднем плане. Дождитесь её успешного завершения, затем проверьте завершение переноса данных на следующем шаге. Подробнее см. в статье [Перенос VDisk с повреждённого или недоступного тома блочного хранилища](https://ydb.tech/docs/ru/maintenance/manual/moving_vdisks.md#removal_from_a_broken_device).

1. Во [встроенном UI](https://ydb.tech/docs/ru/reference/ydb-ui/ydb-monitoring.md#node_storage_page) проверьте, что на удаляемом узле не осталось VDisk, а затронутые группы хранения работоспособны (все VDisk находятся в состоянии `Ok`). Если с узла переносились реплики State Storage, Board или SchemeBoard, [проверьте, что перенос завершён](https://ydb.tech/docs/ru/devops/concepts/selfheal-metadata-distribution.md#verify-result).
1. Получите актуальную конфигурацию кластера с помощью команды [ydb admin cluster config fetch](https://ydb.tech/docs/ru/reference/ydb-cli/commands/configuration/cluster/fetch.md):

    ```bash
    ydb [global options...] admin cluster config fetch > config.yaml
    ```

1. Если запись удаляемого узла не последняя в списке [`hosts`](https://ydb.tech/docs/ru/reference/configuration/hosts.md), при удалении позиции всех следующих узлов сместятся. Чтобы сохранить их идентификаторы, для каждой следующей записи без явно заданного `node_id` укажите её текущий идентификатор до удаления: для такой записи он равен текущей позиции в списке, начиная с `1`. Если `node_id` уже задан явно, сохраните его существующее значение. Если удаляется последняя запись, этот шаг не требуется.

    {% note warning %}

    Корректная нумерация узлов критически важна для работоспособности кластера. Ошибка при назначении `node_id` может привести к тому, что VDisk, реплики State Storage, Board или SchemeBoard окажутся привязаны не к тому хосту, что может стать причиной необратимой потери данных.

    {% endnote %}

    Например, дана следующая конфигурация, из которой удаляется узел `node3`:

    ```yaml
    hosts:
    - host: node1
    - host: node2
    - host: node3 # удаляется
    - host: node4
    - host: node5
      node_id: 50
    ```

    Перед удалением `node3` явно укажите `node_id: 4` для `node4`, чтобы его идентификатор не изменился на `3`. Для `node5` сохраните уже заданное значение `node_id: 50`. После удаления `node3` список будет выглядеть так:

    ```yaml
    hosts:
    - host: node1
    - host: node2
    - host: node4
      node_id: 4
    - host: node5
      node_id: 50
    ```

1. Удалите запись узла из секции `hosts`.
1. Примените конфигурацию с помощью команды [ydb admin cluster config replace](https://ydb.tech/docs/ru/reference/ydb-cli/commands/configuration/cluster/replace.md):

    ```bash
    ydb [global options...] admin cluster config replace -f config.yaml
    ```

    {% cut "Если команда завершилась с ошибкой" %}

    Если на PDisk удаляемого узла остались VDisk, команда возвращает ошибку следующего вида:

    ```text
    failed to remove PDisk# 1:1 as it has active VSlots
    ```

    В этом случае дождитесь, пока SelfHeal перенесёт оставшиеся VDisk. Продолжительность переноса зависит от объёма данных и производительности дисков. Следите за переносом на вкладке **Storage** удаляемого узла во [встроенном UI](https://ydb.tech/docs/ru/reference/ydb-ui/ydb-monitoring.md#node_storage_page). Когда на узле не останется VDisk, повторите команду `config replace` с тем же файлом.

    Если список VDisk не сокращается и репликация не идёт, [перенесите оставшиеся VDisk вручную](https://ydb.tech/docs/ru/maintenance/manual/moving_vdisks.md#removal_from_a_broken_device).

    {% endcut %}

После успешного применения конфигурации сервер и его диски можно вывести из эксплуатации.
