Як зупинити / вимкнути вузол еластичного пошуку?


85

Я хочу перезапустити вузол еластичного пошуку з новою конфігурацією. Який найкращий спосіб витончено вимкнути вузол?

Чи є вбивство процесу найкращим способом вимкнення сервера, чи існує якась чарівна URL-адреса, яку я можу використати для вимкнення вузла?

Відповіді:


126

Оновлена ​​відповідь.

_shutdown API видалено в еластичному пошуку 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'

2
Отже, виявляється, що API вимкнення застарілий, починаючи з elasticsearch 1.6 (згідно з наданим посиланням). Який рекомендований новий спосіб відключення?
Майк,

2
Я думаю, що це застаріло, оскільки тепер ви можете встановити його як службу та запустити службу зупинки elasticsearch. Якщо ви запускаєте його лише для тестів, натисніть CTRL + C і все готово.
dadoonet

"gracefull" => ви можете переміщати свій осколок раніше за допомогою API перенаправлення elastic.co/guide/en/elasticsearch/reference/2.4/…
Томас Деко

23

Якщо ви просто хочете застосувати нову конфігурацію, вам не потрібно її вимикати.

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


1
питання полягає в тому, щоб зупинити службу, а не перезапустити її.
Жан-Франсуа Фабр

1
не потрібно вимикати сервер, щоб застосувати нову конфігурацію. це не відповідь, це рішення його проблеми :)
Іджаз Ахмад Хан,


7

Зупинка служби та вбивство демона - справді правильні способи вимкнення вузла. Однак не рекомендується робити це безпосередньо, якщо ви хочете зняти вузол для обслуговування. Насправді, якщо у вас немає реплік, ви втратите дані.

Коли ви безпосередньо вимикаєте вузол, 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

Інші відповіді пояснюють, як вбити процес.


4

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


3

використовуйте наступну команду, щоб дізнатись pid вже запущеного вузла.

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

Мені знадобилася година, щоб знайти спосіб вбити вузол, і нарешті я міг це зробити після використання цієї команди у вікні терміналу.


2

Якщо ви не можете знайти, який процес виконується elasticsearch на машині Windows, спробуйте запустити в консолі:

netstat -a -n -o

Шукайте, чи працює еластичний пошук порту, за замовчуванням 9200. Останній стовпець - це PID для процесу, який використовує цей порт. Ви можете вимкнути його простою командою в консолі

taskkill /PID here_goes_PID /F

1

Про всяк випадок, якщо ви хочете знайти PID екземпляра і вбити процес, припускаючи, що вузол прослуховує порт 9300 (порт за замовчуванням), ви можете виконати таку команду:

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

Можливо, доведеться пограти з цифрами у згаданому вище коді, такими як 58 та 1


Порт за замовчуванням - 9200.
slhck

0

Відповідь на Elasticsearch всередині Docker:

Просто зупиніть контейнер докера. Здається, витончено зупиняється, оскільки реєструється:

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

0

Враховуючи, що у вас є 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

Джерело:

  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

0

Якщо ви використовуєте вузол на localhost, спробуйте використати brew service stop elasticsearch

Я запускаю elasticsearch на iOS localhost.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.