ES cluster reroute

January 24, 2019

ES集群重新路由命令可以显示的执行包括特定命令的集群重新路由分配命令。例如,可以显示地将分片从一个节点移动到另一个节点,可以取消分配。

使用

支持的命令如下

  • move 将现有的分片迁移到其他节点。接受 indexshard索引名称和分片编号,from_node节点移动分片from,以及to_node节点将分片移动到。
  • cancel 取消分享碎片(或恢复)。接受index shard索引名称和分片编号,以及node取消分片分配的节点。它还接受allow_primary标志以明确指定允许取消主分片的分配。这可以用于强制从主分片重新同步现有副本,方法是取消它们并允许它们通过标准重新分配过程重新初始化。
  • allocate_replica 将未分配的副本分片分配给节点。接受indexshard索引名称和分片编号,并将分片分配给node

使用场景

  • move 主要是想要手动控制分片分配到某台固定的机器上。把node_1上的index_name移动到node_2节点上,可能会有各种原因需要进行迁移,比如node_1机器的磁盘不够了或者是其他原因等。
POST _cluster/reroute
{
  "commands": [
    {
      "move": {
        "index": "index_name",
        "shard": 0,
        "from_node": "node_1",
        "to_node": "node_2"
      }
    }
  ]
}
  • cancel 主要是把移动中的分片取消,这个是因为其他原因导致分片重新分配了,但是又不想让它重新分配,所以只能取消分片分配的过程。如下是node_1这台机器上的index_name的分片号0进行了移动,所以取消它。
POST _cluster/reroute
{
  "commands": [
    {
      "cancel": {
        "index": "index_name",
        "shard": 0,
        "node": "node_1"
      }
    }
  ]
}

参考文档


LRF 记录学习、生活的点滴