在ElasticSearch 2.X中,您可以使用重新路由移动分片:
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html#cluster-reroute
除了为每个分片指定一个移动之外,还有一种简单的方法可以将它们从一个节点移到另一个节点吗?
答案 0 :(得分:3)
我还没有找到移动“全部”选项,但是由于awk和ES _cat API,我可以生成所需的JSON,用于将所有分片从node1移动到node2:
#!/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 :(得分:1)
重新路由不会确保分片保留在新节点中。 Elasticsearch可能会尝试平衡问题并将一些分片移回原始节点。如果要将分片固定到新节点,则需要使用Shard Allocation Filtering。
如果要将索引index1
的所有分片移动到节点node1
,则要执行的命令为:
PUT index1/_settings
{
"index.routing.allocation.include._name": "node1"
}