Elasticsearchノードを停止/シャットダウンする方法は?


87

新しい構成でelasticsearchノードを再起動したい。ノードを正常にシャットダウンするための最良の方法は何ですか?

プロセスを強制終了することがサーバーをシャットダウンする最良の方法ですか、それともノードをシャットダウンするために使用できる魔法のURLがありますか?

回答:


127

回答を更新しました。

_shutdown APIはelasticsearch2.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
そのため、elasticsearch 1.6以降、シャットダウンAPIは非推奨になっているようです(提供されているリンクに従って)。シャットダウンするための推奨される新しい方法は何ですか?
マイク

2
サービスとしてインストールしてservicestop Elasticsearchを実行できるようになったため、非推奨になったと思います。テストのためだけに実行する場合は、CTRL + Cを押すと完了です。
dadoonet 2015


23

新しい設定を適用したいだけの場合は、シャットダウンする必要はありません。

$ sudo service elasticsearch restart

しかし、とにかくそれをシャットダウンしたい場合:

$ sudo service elasticsearch stop

または

$ sudo systemctl stop elasticsearch.service

$ sudo systemctl restart elasticsearch.service

Docker:

docker restart <elasticsearch-container-name or id>


1
問題は、サービスを再開することではなく、停止することです。
ジャン=フランソワ・ファーブル

1
新しい構成を適用するには、サーバーをシャットダウンする必要があります。それは答えではなく、彼の問題の解決策です:)
Ijaz Ahmad Khan 2017


7

サービスを停止してデーモンを強制終了することは、実際にノードをシャットダウンする正しい方法です。ただし、メンテナンスのためにノードを停止する場合は、直接行うことはお勧めしません。実際、レプリカがないとデータが失われます。

ノードを直接シャットダウンすると、Elasticsearchはノードがオンラインに戻るまで1m(デフォルト時間)待機します。そうでない場合は、そのノードから他のノードにシャードを割り当て始め、多くの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

ElasticsearchのHeadプラグインは、ノードのシャットダウンなど、Elasticsearch管理用の優れたWebベースのフロントエンドを提供します。Elasticsearchコマンドも実行できます。


3

次のコマンドを使用して、すでに実行されているノードのpidを確認します。

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

ノードを強制終了する方法を見つけるのに1時間かかり、ターミナルウィンドウでこのコマンドを使用した後、最終的にそれを実行できました。


2

Windowsマシンでelasticsearchを実行しているプロセスが見つからない場合は、コンソールで実行してみてください。

netstat -a -n -o

実行中のポートelasticsearchを探します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です。
slhck19年

1

ローカルホストでノードを実行している場合は、を使用してみてください brew service stop elasticsearch

iOSローカルホストでelasticsearchを実行します。


0

Docker内の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"

各ノードでelasticsearchサービスを停止します

# 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
  }
}
'

Elasticseach6.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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.