# Удаление узлов

В данном разделе приведена информация об удалении узлов из кластера
Picodata. Важно понимать, что просто остановка инстанса с помощью
graceful shutdown (например, после нажатия ++ctrl+c++ в консоли)
завершит процесс инстанса, но не выведет его из кластера. Инстанс
останется в кластере в состоянии `Offline` и сможет быть впоследствии
перезапущен.

Для удаления узла из кластера следует использовать команду `picodata
expel`, выполнение которой требует ввода пароля администратора (он
должен быть задан через [консоль администратора]).

## Использование expel {: #expel }

### Общие сведения {: #basics }

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

### Удаление активного инстанса {: #expel_online }

Для активного инстанса (в состоянии `Online`) процедура включает в себя:

- автоматическое перераспределение данных инстанса между оставшимися узлами кластера
- перевод инстанса из состояния `Online` в `Expelled`
- автоматическое завершение работы процесса инстанса в ОС

Если перезапустить инстанс, который ранее был переведен в состояние
`Expelled`, он уже не сможет присоединиться к кластеру снова.

<!--
### Удаление неактивного инстанса {: #expel_offline }

Для неактивного инстанса (в состоянии `Offline`) процедура включает в себя:

- автоматическое перераспределение данных инстанса между оставшимися узлами кластера
- перевод инстанса из состояния `Offline` в `Expelled`

Для удаления неактивного режима нужно использовать параметр `force`.
 -->

### Примеры команд {: #usage_examples }

Команда [`picodata expel`] в самом простом виде требует только указания
идентификатора (uuid) инстанса:

```shell
picodata expel <INSTANCE_UUID>
```

Узнать идентификатор можно из системной таблицы [`_pico_instance`]:

```sql
(admin) sql> SELECT "name","uuid" FROM _pico_instance;
+------+----------------------------------------+
| name | uuid                                   |
+===============================================+
| "i1" | "2ed55750-034c-41ec-b627-c7e3fd77ca8d" |
|------+----------------------------------------|
| "i2" | "3ed7a231-808f-4f00-9ff4-0e3e68581df0" |
|------+----------------------------------------|
| "i3" | "cf1405bb-644a-4475-b243-f07d88213cfd" |
|------+----------------------------------------|
| "i4" | "0ee665e5-54bd-4911-b246-f714652e264c" |
|------+----------------------------------------|
| "i5" | "96e38675-30e7-4f0d-b8cf-72132a2aa726" |
+------+----------------------------------------
```

Соответственно, команда для исключения инстанса `i5` будет выглядеть так:

```shell
picodata expel 96e38675-30e7-4f0d-b8cf-72132a2aa726
```

Минимальный формат команды сработает, если:

- имя кластера не было переопределено (по умолчанию, это `demo`)
- на текущем хосте выполняется инстанс со стандартным значением
  параметра [`--iproto-listen`], который по умолчанию равен значению параметра
  [`--peer`]

Соответственно, на практике может потребоваться явно указать имя
кластера и/или задать сетевой адрес какого-либо из действующих
инстансов ([`--peer`]):

```shell
picodata expel <INSTANCE_UUID> --peer=<HOST:PORT>
```

<!--
Наконец, если целевой инстанс неактивен (находится в состоянии Offline),
для его удаления из кластера нужно будет добавить к команде параметр
`force`:

```shell
picodata expel <INSTANCE_UUID> --peer=<HOST:PORT> --force
```
 -->

С помощью [`picodata expel`] можно удалить любой узел кластера, в том
числе и единственный.

Для проверки успешного удаления инстанса из кластера используйте команду
[`picodata status`].

[`picodata status`]: ../reference/cli.md#status
[`picodata expel`]: ../reference/cli.md#expel
[`_pico_instance`]: ../architecture/system_tables.md#_pico_instance
[консоль администратора]: connecting.md#admin_console
[`--peer`]: ../reference/cli.md#run_peer
[`--iproto-listen`]: ../reference/cli.md#run_iproto_listen

См. также:

- [Добавление узлов](node_add.md)
