Исключение узла с ролью data
Для исключения узла из кластера нужно выполнить следующее:
Определение ID узла
Необходимо получить ID узла, который планируется исключить. Для этого нужно выполнить команду, представленную ниже:
GET _cat/nodes?v&full_id&h=name,id,ip

Исключение узла из процесса аллокации
Используя ID узла, необходимо исключить из аллокации узел, с помощью команды:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.exclude._id": ["<node_id>"]
}
}
В версии OpenSearch 2.13 обнаружен баг, по инструкции выше команда выполнялась, но ничего не происходило. При указании нескольких узлов для исключения перечислите их id в одной строке, например, так:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.exclude._id": "<node_id_1>,<node_id_2>,<node_id_3>"
}
}
где <node_id> - это идентификатор узла, который необходимо исключить.

Ожидание переноса шардов
После исключения узла из аллокации запуститься процесс переноса шардов. Для того, чтобы проверить закончился процесс или нет, можно с помощью команды, представленной ниже (смотреть параметр relocating_shards, должен быть 0):
GET _cluster/health

Проверка ошибок аллокации
После переноса шардов с исключенного узла, необходимо проверить на ошибки аллокации - все ли шарды корректно мигрировали и проинициализировались. Можно проверить с помощью команды:
GET _cluster/allocation/explain

Для корректного исключения узла, необходимо исправить все ошибки аллокации. Ошибки могут быть разными начиная с неправильной настройки индекса (зачастую связано с количеством реплик) до повреждения шарда или всех найденных копий шардов, которые устарели.
После выполнения команды, представленной выше, отобразиться JSON-объект с информацией об ошибке (смотреть allocate_explanation и node_allocation_decisions.deciders.explanation).
Проверка настроек узла
Необходимо проверить список плагинов на удаляемом узле и убедиться, что после отключения узла от кластера не изменится работоспособность Smart Monitor.
Если на исключаемом узле в конфигурационном файле opensearch.yml присутствует настройка node_with_sme: true, то необходимо проверить на других узлах с ролью data (hot и warm, на узлах cold не настраивается данный параметр), присутствует ли данная настройка или нет. Если нет, то необходимо настроить на всех data-узлах.
Проверить, где какой плагин установлен можно командой:
GET _cat/plugins

Отключение аллокации
После проверки настройки удаляемого узла, необходимо выключить аллокацию кластера, чтобы не повредить и не потерять данные:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}

Остановка службы и бэкап конфига удаленного узла
После выключении аллокации кластера, можно остановить процесс OpenSearch удаленного узла:
systemctl stop opensearch
И для безопасности, необходимо сделать бэкап директории с конфигурациями OpenSearch:
sudo cp -r /app/opensearch/config /app/os_conf_backup
Включение аллокации кластера
Необходимо обратно включить аллокацию кластера:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}

И после дождаться, когда кластер станет green:
GET _cluster/health

Очистка списка исключений узлов
После того, как кластер станет green, необходимо очистить список исключений ID узлов:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.exclude._id": null
}
}
