0
点赞
收藏
分享

微信扫一扫

elasticsearch手动控制分片分布


elasticsearch可以通过reroute api来手动进行索引分片的分配。



不过要想完全手动,必须先把cluster.routing.allocation.disable_allocation参数设置为true,禁止es进行自动索引分片分配,否则你从一节点把分片移到另外一个节点,那么另外一个节点的一个分片又会移到那个节点。



 



一共有三种操作,分别为:移动(move),取消(cancel)和分配(allocate)。下面分别介绍这三种情况:



移动(move)



把分片从一节点移动到另一个节点。可以指定索引名和分片号。



取消(cancel)



取消分配一个分片。可以指定索引名和分片号。node参数可以指定在那个节点取消正在分配的分片。allow_primary参数支持取消分配主分片。



分配(allocate)



分配一个未分配的分片到指定节点。可以指定索引名和分片号。node参数指定分配到那个节点。allow_primary参数可以强制分配主分片,不过这样可能导致数据丢失。



下面是个简单的例子:



curl -XPOST           'localhost:9200/_cluster/reroute'           -d '{          


                     "commands"           : [ {          


                     "move"           :           


                     {          


                     "index"           :           "test"          ,           "shard"           :           0          ,           


                     "from_node"           :           "node1"          ,           "to_node"           :           "node2"          


                     }          


                     },          


                     "cancel"           :           


                     {          


                     "index"           :           "test"          ,           "shard"           :           0          ,           "node"           :           "node1"          


                     }          


                     },          


                     {          


                     "allocate"           : {          


                     "index"           :           "test"          ,           "shard"           :           1          ,           "node"           :           "node3"          


                     }          


                     }          


                     ]          


          }'

举报

相关推荐

0 条评论