背景
今天用一个脚本修复ES5.6.4的分片,报如下错误:找不到reroute命令。想到之前这个脚本都是用于修复ES2.x的分片的,可能是ES5.x对reroute命令升级了。看了一下官方文档果真如此。
分析
ES2.x的reroute命令如下:
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
"commands" : [ {
"move" :
{
"index" : "test", "shard" : 0,
"from_node" : "node1", "to_node" : "node2"
}
},
{
"allocate" : {
"index" : "test", "shard" : 1, "node" : "node3",
"allow_primary":true (表示接受主分片数据丢失)
}
}
]
}'
ES5.x升级之后,已经把主分片的恢复和副本的恢复分开了
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
"commands" : [ {
"move" :
{
"index" : "test", "shard" : 0,
"from_node" : "node1", "to_node" : "node2"
}
},
{
"allocate_replica" : {
"index" : "test", "shard" : 1, "node" : "node3"
}
},
{
"allocate_empty_primary": {
"index" : "test", "shard" : 1, "node" : "node3",
"accept_data_loss":true (接受数据丢失)
}
}
]
}'
主分片的恢复用allocate_empty_primary,而副本的恢复用allocate_replica