如何将所有elasticsearch碎片从一个节点移动到另一个节点?

问题描述:

在ElasticSearch 2.X您可以使用左右移动路线变更碎片:如何将所有elasticsearch碎片从一个节点移动到另一个节点?

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

除了指定的举动为每个碎片,有一种简单的方法,从一个节点移动全部关闭到另一个?

我还没有发现一招“所有”选项还没有,但由于AWK和ES _cat API,我可以生成所需的JSON从节点1将所有碎片到节点:

#!/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 ']}' 

重新路由不会确保碎片保留在新节点中。 Elasticsearch可能会尝试平衡事情并将一些碎片移回原始节点。如果要将碎片固定到新节点,则需要使用Shard Allocation Filtering

如果你想移动索引index1的所有碎片节点node1,然后执行命令是:

PUT index1/_settings 
{ 
    "index.routing.allocation.include._name": "node1" 
}