我有一个大的ES集群,其配置为shard replicate = 2,其中一个数据节点已关闭(失去电源)昨天。我认为丢失的复制品已经在其他节点中被复制/复制了,所以我的措辞是当我将丢失的节点放回集群时ES将如何处理丢失的分片/数据?谢谢!
答案 0 :(得分:1)
当节点发生故障时,它托管的所有分片都会转移到“未分配”状态。现在,当未分配的分片的分配算法尝试尽快分配它们时。它在分配它们时做了一些努力来平衡它们但是如果最平衡的节点被限制,那么它只是将分片分配给下一个最平衡的节点。这导致它超快速地分配所有分片(好),但它可以使群集非常不平衡(坏)。
我认为一组更好的“生产”设置会说“当节点出现故障时,不要将分片重新分配给其他节点”。
似乎 cluster.routing.allocation.enable 应该有一个额外的选项: recovery_and_new (这仍然允许重新平衡)。在这种情况下,“恢复”意味着只能在已经有分片的节点上初始化分片。
这里的假设是集群有足够的复制,丢失单个副本并不是一个大事件,值得触发大量网络流量并可能导致其他问题。
注意:对于大型部署,在节点出现故障或某些网络事件发生后,ES分片恢复似乎会导致更多问题,因为所有分片最终都会在群集周围进行混洗,并且可以导致其他性能问题。似乎最好不要将一些副本保留为未初始化,直到节点再次活动为止。