Я хочу перезапустить elasticsearch node с новой конфигурацией. Каков наилучший способ изящно закрыть node?
Убивает ли этот процесс лучший способ закрыть сервер или есть какой-то волшебный URL-адрес, который я могу использовать для закрытия node?
Я хочу перезапустить elasticsearch node с новой конфигурацией. Каков наилучший способ изящно закрыть node?
Убивает ли этот процесс лучший способ закрыть сервер или есть какой-то волшебный URL-адрес, который я могу использовать для закрытия node?
Обновленный ответ.
_shutdown
API был удален в elasticsearch 2.x.
Некоторые параметры:
В вашем терминале (в основном режиме dev) просто введите "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
Плагин Head для Elasticsearch обеспечивает отличную веб-интерфейс для администрирования Elasticsearch, включая выключение узлов. Он также может запускать любые команды Elasticsearch.
Остановка службы и уничтожение демона действительно являются правильными способами выключения узла. Однако не рекомендуется делать это напрямую, если вы хотите отключить узел для обслуживания. Фактически, если у вас нет реплик, вы потеряете данные.
Когда вы напрямую выключаете узел, Elasticsearch будет ждать 1 м (время по умолчанию), чтобы он вернулся в оперативный режим. Если этого не произойдет, то он начнет распределять сегменты от этого узла на другие узлы, тратя впустую много IO.
Типичным подходом было бы временно отключить распределение сегментов с помощью команды:
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.
Другие ответы объяснили, как убить процесс.
используйте следующую команду, чтобы узнать, что pid уже запущен node.
curl -XGET 'http://localhost:9200/_nodes/process'
Мне потребовался час, чтобы узнать, как убить node и, наконец, сделать это после использования этой команды в окне терминала.
На всякий случай, если вы хотите найти PID экземпляра и завершить процесс, предполагая, что узел прослушивает порт 9300 (порт по умолчанию), вы можете выполнить следующую команду:
kill -9 $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)
Возможно, вам придется поиграть с числами в вышеупомянутом коде, такими как 58 и 1
Если вы не можете найти, какой процесс запускает elasticsearch на компьютере Windows, вы можете попробовать запустить консоль:
netstat -a -n -o
Посмотрите, как работает port elasticsearch, по умолчанию - 9200
. Последний столбец - это PID для процесса, который использует этот порт. Вы можете отключить его с помощью простой команды в консоли
taskkill /PID here_goes_PID /F
Ответа на запрос Elasticsearch внутри Docker:
Просто остановите контейнер докера. Кажется, он изящно останавливается, потому что он регистрируется:
[INFO ][o.e.n.Node ] [elastic] stopping ...
Если вы запускаете узел на локальном хосте, используйте "brew service stopasticsearch"
Я запускаюasticsearch на локальном хосте 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
Источник: