Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Обновленный ответ.

_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'

Ответ 2

Если вы просто хотите применить новый конфиг, вам не нужно его выключать.

$ 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>

Ответ 3

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

pkill -f elasticsearch

Ответ 4

Плагин Head для Elasticsearch обеспечивает отличную веб-интерфейс для администрирования Elasticsearch, включая выключение узлов. Он также может запускать любые команды Elasticsearch.

Ответ 5

Остановка службы и уничтожение демона действительно являются правильными способами выключения узла. Однако не рекомендуется делать это напрямую, если вы хотите отключить узел для обслуживания. Фактически, если у вас нет реплик, вы потеряете данные.

Когда вы напрямую выключаете узел, 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.

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

Ответ 6

используйте следующую команду, чтобы узнать, что pid уже запущен node.

curl -XGET 'http://localhost:9200/_nodes/process'

Мне потребовался час, чтобы узнать, как убить node и, наконец, сделать это после использования этой команды в окне терминала.

Ответ 7

На всякий случай, если вы хотите найти PID экземпляра и завершить процесс, предполагая, что узел прослушивает порт 9300 (порт по умолчанию), вы можете выполнить следующую команду:

kill -9  $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)

Возможно, вам придется поиграть с числами в вышеупомянутом коде, такими как 58 и 1

Ответ 8

Если вы не можете найти, какой процесс запускает elasticsearch на компьютере Windows, вы можете попробовать запустить консоль:

netstat -a -n -o

Посмотрите, как работает port elasticsearch, по умолчанию - 9200. Последний столбец - это PID для процесса, который использует этот порт. Вы можете отключить его с помощью простой команды в консоли

taskkill /PID here_goes_PID /F

Ответ 9

Ответа на запрос Elasticsearch внутри Docker:

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

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

Ответ 10

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

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

Ответ 11

Учитывая, что у вас есть 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"

Остановить службуasticsearch в каждом узле

# 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

Источник:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/stopping-elasticsearch.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rolling-upgrades.html