2016-08-30 5 views
0

あなたは、リルートを使用して周りの破片を移動することができます。すべてのelasticsearchシャードをあるノードから別のノードに移動するにはどうすればよいですか? ElasticSearch 2.Xで

各シャードのための動きを指定する以外に

https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html#cluster-reroute

を、あるノードから別のノードにそれらをすべてオフに移動する簡単な方法はありますか?

答えて

3

私はまだ移動「のすべて」オプションを見つけていませんでしたが、AWKとES _catのAPIのおかげで、私はノード2にノード1からすべての破片を動かすために必要なJSONを生成することができます。

#!/bin/bash 

OLD=node1 
NEW=node2 

SHARDS=` 
curl -s -XGET "https://my.elasticsearch.cluster/_cat/shards/" | awk -v NEW=$NEW -v OLD=$OLD '$8==OLD { 
    print "  { \"move\": { \"index\": \""$1"\", \"shard\": "$2", \"from_node\": \""OLD"\", \"to_node\": \""NEW"\" }}," 
}'|sed '$ s/.$//' 
` 
echo '{"commands": [' 
echo $SHARDS 
echo ']}' 
1

再ルーティングシャードが新しいノードに残っていることを保証しません。 Elasticsearchは物事のバランスを取り、いくつかの断片を元のノードに戻すように試みるかもしれません。シャードを新しいノードに固定する場合は、Shard Allocation Filteringを使用する必要があります。

あなたがnode1をノードAにインデックスindex1のすべての破片を移動したい場合は、実行するコマンドは次のとおりです。

PUT index1/_settings 
{ 
    "index.routing.allocation.include._name": "node1" 
} 
関連する問題