Я хочу перезапустить узел elasticsearch с новой конфигурацией. Как лучше всего завершить работу узла?
Убить процесс - лучший способ выключить сервер, или есть какой-то волшебный URL-адрес, который я могу использовать для выключения узла?
Я хочу перезапустить узел elasticsearch с новой конфигурацией. Как лучше всего завершить работу узла?
Убить процесс - лучший способ выключить сервер, или есть какой-то волшебный URL-адрес, который я могу использовать для выключения узла?
Ответы:
Обновленный ответ.
_shutdown
API был удален в elasticsearch 2.x.
Некоторые варианты:
В вашем терминале (в основном в режиме разработки) просто введите "Ctrl-C"
Если вы запустили его как демон ( -d
), найдите PID и SIGTERM
завершите процесс: завершит работу Elasticsearch ( kill -15 PID
)
Если работает как служба, запустите что-то вроде service elasticsearch stop
:
Предыдущий ответ. Теперь он устарел с версии 1.6.
Да уж. См. Документацию по завершению работы узлов административного кластера
В принципе:
# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'
# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'
Если вы просто хотите применить новую конфигурацию, вам не нужно закрывать ее.
$ sudo service elasticsearch restart
Но если вы все равно хотите его выключить:
$ sudo service elasticsearch stop
ИЛИ ЖЕ
$ sudo systemctl stop elasticsearch.service
$ sudo systemctl restart elasticsearch.service
Докер:
docker restart <elasticsearch-container-name or id>
У меня это работает на OSX.
pkill -f elasticsearch
Остановка службы и уничтожение демона действительно являются правильными способами выключения узла. Однако не рекомендуется делать это напрямую, если вы хотите отключить узел для обслуживания. Фактически, если у вас нет реплик, вы потеряете данные.
Когда вы закрываете узел напрямую, Elasticsearch будет ждать 1 мин (время по умолчанию), чтобы он вернулся в онлайн. Если этого не произойдет, он начнет распределять шарды с этого узла другим узлам, тратя много операций ввода-вывода.
Типичный подход - временно отключить выделение сегментов, выполнив:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
Теперь, когда вы снимаете узел, ES не будет пытаться выделить шард с этого узла другим узлам, и вы можете выполнять действия по обслуживанию, а затем, когда узел будет запущен, вы можете снова включить выделение сегментов:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
Источник: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html
Если у вас нет реплик для всех ваших индексов, то выполнение этого типа действий приведет к простоям некоторых индексов. Более чистый способ в этом случае - это перенести все шарды на другие узлы перед отключением узла:
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
Это переместит все шарды с 10.0.0.1
других узлов (это займет время, в зависимости от данных). Как только все будет сделано, вы можете убить узел, выполнить обслуживание и вернуть его в оперативный режим. Это более медленная операция и не требуется, если у вас есть реплики.
(Вместо _ip, _id, _name с подстановочными знаками будет работать нормально.)
Дополнительная информация: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html
Другие ответы объяснили, как убить процесс.
Плагин Head для Elasticsearch предоставляет отличный веб-интерфейс для администрирования Elasticsearch, включая отключение узлов. Он также может запускать любые команды Elasticsearch.
используйте следующую команду, чтобы узнать pid уже запущенного узла.
curl -XGET ' http: // localhost: 9200 / _nodes / process '
Мне потребовался час, чтобы найти способ убить узел, и я наконец смог это сделать после использования этой команды в окне терминала.
Если вы не можете найти, какой процесс запускает elasticsearch на компьютере с Windows, вы можете попробовать запустить его в консоли:
netstat -a -n -o
Ищите порт, который работает elasticsearch, по умолчанию 9200
. Последний столбец - это PID для процесса, использующего этот порт. Вы можете выключить его с помощью простой команды в консоли
taskkill /PID here_goes_PID /F
На всякий случай, если вы хотите найти PID экземпляра и убить процесс, предполагая, что узел прослушивает порт 9300 (порт по умолчанию), вы можете выполнить следующую команду:
kill -9 $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)
Возможно, вам придется поиграть с числами в вышеупомянутом коде, такими как 58 и 1.
Если вы запускаете узел на локальном хосте, попробуйте использовать brew service stop elasticsearch
Я запускаю elasticsearch на локальном хосте iOS.
Учитывая, что у вас есть 3 узла.
export ES_HOST=localhost:9200
# Disable shard allocation
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
'
# Stop non-essential indexing and perform a synced flush
curl -X POST "$ES_HOST/_flush/synced"
# check nodes
export ES_HOST=localhost:9200
curl -X GET "$ES_HOST/_cat/nodes"
# node 1
systemctl stop elasticsearch.service
# node 2
systemctl stop elasticsearch.service
# node 3
systemctl stop elasticsearch.service
# start
systemctl start elasticsearch.service
# Reenable shard allocation once the node has joined the cluster
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
'
Проверено на Elasticseach 6.5
Источник: