首页 > 代码库 > elasticsearch 手动控制分片分布

elasticsearch 手动控制分片分布

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

一共有三种操作,分别为:移动(move),取消(cancel)和分配(allocate)。下面分别介绍这三种情况: 
移动(move) 
把分片从一节点移动到另一个节点。可以指定索引名和分片号。 
取消(cancel) 
取消分配一个分片。可以指定索引名和分片号。node参数可以指定在那个节点取消正在分配的分片。allow_primary参数支持取消分配主分片。 
分配(allocate) 
分配一个未分配的分片到指定节点。可以指定索引名和分片号。node参数指定分配到那个节点。allow_primary参数可以强制分配主分片,不过这样可能导致数据丢失。 
下面是个简单的例子: 

Java代码  技术分享

  1. curl -XPOST ‘localhost:9200/_cluster/reroute‘ -d ‘{  

  2.     "commands" : [ {  

  3.         "move" :   

  4.             {  

  5.               "index" : "test""shard" : 0,   

  6.               "from_node" : "node1""to_node" : "node2"  

  7.             }  

  8.         },  

  9.        "cancel" :   

  10.             {  

  11.               "index" : "test""shard" : 0"node" : "node1"  

  12.             }  

  13.         },  

  14.         {  

  15.           "allocate" : {  

  16.               "index" : "test""shard" : 1"node" : "node3"  

  17.           }  

  18.         }  

  19.     ]  

  20. }‘  


本文出自 “运维” 博客,请务必保留此出处http://4607134.blog.51cto.com/4597134/1876533

elasticsearch 手动控制分片分布