Как остановить / закрыть узел elasticsearch?


Я хочу перезапустить узел elasticsearch с новой конфигурацией. Что является лучшим способом, чтобы корректно завершить работу узла?

является ли убийство процесса лучшим способом выключения сервера, или есть какой-то волшебный URL-адрес, который я могу использовать для закрытия узла?

10 64

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.

это работает для меня на OSX.

pkill -f 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

другие ответы объяснили, как убить процесс.

ответ для Elasticsearch внутри Docker:

просто остановите контейнер docker. Кажется, он останавливается изящно, потому что он регистрирует:

[INFO ][o.e.n.Node               ] [elastic] stopping ...

Если вы используете узел на локальном хосте, используйте "brew service stop elasticsearch"

Я запускаю elasticsearch на локальном хосте iOS.