Как остановить / закрыть узел elasticsearch?
Я хочу перезапустить узел elasticsearch с новой конфигурацией. Что является лучшим способом, чтобы корректно завершить работу узла?
является ли убийство процесса лучшим способом выключения сервера, или есть какой-то волшебный URL-адрес, который я могу использовать для закрытия узла?
10 ответов:
обновленный ответ.
_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>
главный плагин для Elasticsearch обеспечивает отличный веб-интерфейс для администрирования Elasticsearch, включая закрытие узлов. Он также может запускать любые команды Elasticsearch.
на всякий случай, если вы хотите найти PID экземпляра и убить процесс, предполагая, что узел прослушивает порт 9300 (порт по умолчанию), вы можете выполнить следующую команду:
kill -9 $(netstat -nlpt | grep 9300 | cut -d ' ' -f 58 | cut -d '/' -f 1)
возможно, Вам придется играть с числами в вышеупомянутом коде, таких как 58 и 1
Если вы не можете найти, какой процесс работает elasticsearch на машине windows, вы можете попробовать запустить в консоли:
netstat -a -n -o
искать порт elasticsearch работает, по умолчанию
9200
. Последний столбец PID для процесса, который использует этот порт. Вы можете выключить его с помощью простой команды в консолиtaskkill /PID here_goes_PID /F
используйте следующую команду, чтобы узнать pid уже запущенного узла.
curl-XGET'http://localhost:9200/_nodes/process'
мне потребовался час, чтобы узнать способ убить узел и, наконец, сделать это после использования этой команды в окне терминала.
остановка службы и убийство демона действительно являются правильными способами завершения работы узла. Однако не рекомендуется делать это напрямую, если вы хотите снять узел для обслуживания. Фактически, если у вас нет реплик, вы потеряете данные.
когда вы непосредственно завершаете работу узла, Elasticsearch будет ждать 1m (время по умолчанию) для его возвращения в сеть. Если это не так, то он начнет выделять осколки с этого узла на другие узлы, тратя много ИО.
типичным подходом было бы временно отключить выделение осколков, выдав:
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
другие ответы объяснили, как убить процесс.