新しい構成でelasticsearchノードを再起動したい。ノードを正常にシャットダウンするための最良の方法は何ですか?
プロセスを強制終了することがサーバーをシャットダウンする最良の方法ですか、それともノードをシャットダウンするために使用できる魔法のURLがありますか?
新しい構成でelasticsearchノードを再起動したい。ノードを正常にシャットダウンするための最良の方法は何ですか?
プロセスを強制終了することがサーバーをシャットダウンする最良の方法ですか、それともノードをシャットダウンするために使用できる魔法のURLがありますか?
回答:
回答を更新しました。
_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'
新しい設定を適用したいだけの場合は、シャットダウンする必要はありません。
$ 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>
これはOSXで私のために働きます。
pkill -f elasticsearch
サービスを停止してデーモンを強制終了することは、実際にノードをシャットダウンする正しい方法です。ただし、メンテナンスのためにノードを停止する場合は、直接行うことはお勧めしません。実際、レプリカがないとデータが失われます。
ノードを直接シャットダウンすると、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
他の回答は、プロセスを強制終了する方法を説明しています。
次のコマンドを使用して、すでに実行されているノードのpidを確認します。
curl -XGET'http :// localhost:9200 / _nodes / process '
ノードを強制終了する方法を見つけるのに1時間かかり、ターミナルウィンドウでこのコマンドを使用した後、最終的にそれを実行できました。
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
}
}
'
Elasticseach6.5でテスト済み
ソース: