如何将所有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"
}