Иногда возникает задача вывода ноды из кластера Elasticsearch. Но при простом выключении, особенно если не настроены реплики, кластер развалится.
Для удаления ноды из кластера, на необходимо перенести все данные с ноды, для этого выполняем команду:
1 2 3 4 5 | curl -XPUT 127.0.0.1:9200/_cluster/settings -H 'Content-Type: application/json' -d '{ "transient" :{ "cluster.routing.allocation.exclude._ip" : "x.x.x.x" } }' |
Где x.x.x.x - IP адрес ноды, которую необходимо удалить
Если необходимо удалить несколько нод, адреса указываются через запятую, к примеру:
1 2 3 4 5 | curl -XPUT 127.0.0.1:9200/_cluster/settings -H 'Content-Type: application/json' -d '{ "transient" :{ "cluster.routing.allocation.exclude._ip" : "10.0.0.17,10.0.0.22" } }' |
После чего Elasticsearch начнет релокацию данных с ноды, время переноса зависит от объема данных.
Перенос данных может занять значительное время
Для мониторинга процесса переноса, можно использоваться cerebro.
По окончанию переноса, ноду можно выключить, она автоматически удалиться из кластера.
Мы вносим временные настройки кластера, которые будут сброшены после перезапуска.
Для отмены запрета на хранения данных, сбрасываем параметр cluster.routing.allocation.exclude._ip
1 2 3 4 5 | curl -XPUT 127.0.0.1:9200/_cluster/settings -H 'Content-Type: application/json' -d '{ "transient" :{ "cluster.routing.allocation.exclude._ip" : null } }' |