elasticsearch手动控制分片分布

来源:互联网 发布:java趣味编程题 编辑:程序博客网 时间:2024/06/06 01:45
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"
          }
        }
    ]
}'
参考地址:http://www.searchtech.pro/elasticsearch-manual-allocate-shard
0 0