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

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

下面是个简单的例子: 

 

  1. curl -XPOST 'localhost:9200/_cluster/reroute' -d '
    {
    elasticsearch 手动控制分片分布
    
        "commands": [elasticsearch 手动控制分片分布
            {elasticsearch 手动控制分片分布
                "move": {elasticsearch 手动控制分片分布
                    "index": "test", 
                    "shard": 0, 
                    "from_node": "node1", 
                    "to_node": "node2"
                }, 
                "cancel": {elasticsearch 手动控制分片分布
                    "index": "test", 
                    "shard": 0, 
                    "node": "node1"
                }
            }, 
            {elasticsearch 手动控制分片分布
                "allocate": {elasticsearch 手动控制分片分布
                    "index": "test", 
                    "shard": 1, 
                    "node": "node3"
                }
            }
        ]
    } 

 来个奇葩的 比如es节点所有都挂掉了  恢复的时候主副分片什么的都自动恢复不了,这个时候我们得自己指定 主分片

curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
    "commands": [{
        "allocate": {
            "index": "my-index",
            "shard": 4,
            "node": "search03",
            "allow_primary": 1
        }
    }]
}'

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-26
  • 2022-02-18
  • 2021-10-04
  • 2022-12-23
  • 2021-05-08
猜你喜欢
  • 2022-01-19
  • 2022-12-23
  • 2021-09-13
  • 2022-01-30
  • 2021-11-15
  • 2021-05-19
相关资源
相似解决方案