基于仲裁的决策

编辑

选举主节点和更改集群状态是主节点候选节点必须共同执行的两项基本任务。即使某些节点发生故障,这些活动也必须可靠地工作。Elasticsearch 通过考虑每个操作在收到来自仲裁的响应后即算成功来实现这种鲁棒性,其中仲裁是集群中主节点候选节点的子集。仅需要子集节点响应的优势在于,这意味着某些节点可以发生故障,而不会阻止集群取得进展。仲裁的选取非常谨慎,以确保集群不会出现“脑裂”场景,在这种场景中,集群被划分为两部分,每部分都可能做出与另一部分不一致的决策。

Elasticsearch 允许您向正在运行的集群中添加和删除主节点候选节点。在许多情况下,您可以根据需要简单地启动或停止节点来实现这一点。有关更多信息,请参阅在集群中添加和删除节点

随着节点的添加或删除,Elasticsearch 通过更新集群的投票配置来维护最佳的容错级别,投票配置是在做出选举新主节点或提交新集群状态等决策时计算其响应的主节点候选节点集。只有在投票配置中超过一半的节点做出响应后才会做出决策。通常,投票配置与当前集群中所有主节点候选节点的集合相同。但是,在某些情况下,它们可能会有所不同。

为了确保集群保持可用性,您绝不能同时停止投票配置中一半或更多节点。只要超过一半的投票节点可用,集群就可以正常工作。这意味着如果存在三个或四个主节点候选节点,则集群可以容忍其中一个不可用。如果存在两个或更少的主节点候选节点,则它们必须全部可用。

如果您同时停止投票配置中一半或更多节点,则集群将不可用,直到您将足够多的节点重新联机以再次形成仲裁。在集群不可用期间,任何剩余的节点都将在其日志中报告无法发现或选举主节点。有关更多信息,请参阅发现故障排除

在主节点候选节点加入或离开集群后,选出的主节点可能会发出调整投票配置以匹配的集群状态更新,这可能需要很短的时间才能完成。在从集群中删除更多节点之前,等待此调整完成非常重要。有关更多信息,请参阅删除主节点候选节点

主节点选举

编辑

Elasticsearch 使用选举过程来就选出的主节点达成一致,无论是在启动时还是在现有的选出主节点发生故障时。任何主节点候选节点都可以启动选举,通常第一次进行的选举将成功。选举通常仅在两个节点恰好同时启动其选举时才会失败,因此每个节点上的选举都安排在随机时间以降低这种情况发生的概率。节点将在选举出主节点之前重试选举,并在失败时退避,以便最终选举将成功(以任意高的概率)。主节点选举的调度由主节点选举设置控制。

集群维护、滚动重启和迁移

编辑

许多集群维护任务涉及暂时关闭一个或多个节点,然后重新启动它们。默认情况下,如果 Elasticsearch 的主节点候选节点之一脱机(例如在滚动升级期间),则 Elasticsearch 可以保持可用。此外,如果停止然后重新启动多个节点,则它将自动恢复,例如在完全集群重启期间。在这些情况下,无需对这里描述的 API 采取任何进一步的操作,因为主节点集不会永久更改。