elasticsearch能够经过reroute api来手动进行索引分片的分配。
不过要想彻底手动,必须先把cluster.routing.allocation.disable_allocation参数设置为true,禁止es进行自动索引分片分配,不然你从一节点把分片移到另一个节点,那么另一个节点的一个分片又会移到那个节点。
一共有三种操做,分别为:移动(move),取消(cancel)和分配(allocate)。下面分别介绍这三种状况:
移动(move)
把分片从一节点移动到另外一个节点。能够指定索引名和分片号。
取消(cancel)
取消分配一个分片。能够指定索引名和分片号。node参数能够指定在那个节点取消正在分配的分片。allow_primary参数支持取消分配主分片。
分配(allocate)
分配一个未分配的分片到指定节点。能够指定索引名和分片号。node参数指定分配到那个节点。allow_primary参数能够强制分配主分片,不过这样可能致使数据丢失。
下面是个简单的例子:
node
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ curl
"commands" : [ { elasticsearch
"move" : ide
{ url
"index" : "test", "shard" : 0, spa
"from_node" : "node1", "to_node" : "node2" 索引
} it
}, io
"cancel" :
{
"index" : "test", "shard" : 0, "node" : "node1"
}
},
{
"allocate" : {
"index" : "test", "shard" : 1, "node" : "node3"
}
}
]
}'