在新添加的数据节点中分配 Elasticsearch 的主分片
Distribute Elasticsearch's primary shards among newly added data nodes
我正在寻找一种在新添加的数据节点之间自动分配 Elasticsearch 主分片的方法。
我知道实现此目的的一种方法是 添加新节点后重新编制索引 。是否有任何内部配置或其他更简单的方法可以在集群配置更改后自动完成?
示例场景
最初,集群有 3 个数据节点和一个包含 6 个主分片和 5 个副本的索引。所以 Elasticsearch 在每个节点中分配 2 个主分片。一段时间后,我将数据节点的数量增加到 6 个。 3 个新节点自动共享未分配的副本,但不共享主分片。 有没有不用重新索引就可以实现的方法?
你是正确的,Elasticsearch 不会自动重新定位新添加的数据节点上的主分片,除了 cluster reroute API @leandrojmp 已经在评论中提到。
您可以尝试其他一些事情,但因为这些都是有风险的,您应该只在有备份并且可以很好地控制您的操作时才做,我做这些是为了在玩和破坏 ES 时了解更多信息,并且有备份和完全控制操作,是学习 ES 内部原理和解决问题的不同方法的好方法:
如果你有足够的副本(在你的情况下你有 5 个副本),你可以将副本减少到 2,这将导致 elasticsearch 重新平衡分片(虽然不确定它是否会导致主分片重新定位)和再次完成后,再次将副本增加到原始数量。
强制停止 1 个数据节点上的 elasticsearch 进程一段时间(至少 60 秒),这会导致副本分片提升为主分片并分配给新数据节点。
恕我直言,群集重新路由 API 是这里最安全和最好的选择。
我正在寻找一种在新添加的数据节点之间自动分配 Elasticsearch 主分片的方法。
我知道实现此目的的一种方法是 添加新节点后重新编制索引 。是否有任何内部配置或其他更简单的方法可以在集群配置更改后自动完成?
示例场景
最初,集群有 3 个数据节点和一个包含 6 个主分片和 5 个副本的索引。所以 Elasticsearch 在每个节点中分配 2 个主分片。一段时间后,我将数据节点的数量增加到 6 个。 3 个新节点自动共享未分配的副本,但不共享主分片。 有没有不用重新索引就可以实现的方法?
你是正确的,Elasticsearch 不会自动重新定位新添加的数据节点上的主分片,除了 cluster reroute API @leandrojmp 已经在评论中提到。
您可以尝试其他一些事情,但因为这些都是有风险的,您应该只在有备份并且可以很好地控制您的操作时才做,我做这些是为了在玩和破坏 ES 时了解更多信息,并且有备份和完全控制操作,是学习 ES 内部原理和解决问题的不同方法的好方法:
如果你有足够的副本(在你的情况下你有 5 个副本),你可以将副本减少到 2,这将导致 elasticsearch 重新平衡分片(虽然不确定它是否会导致主分片重新定位)和再次完成后,再次将副本增加到原始数量。
强制停止 1 个数据节点上的 elasticsearch 进程一段时间(至少 60 秒),这会导致副本分片提升为主分片并分配给新数据节点。
恕我直言,群集重新路由 API 是这里最安全和最好的选择。