基于仲裁的决策
编辑基于仲裁的决策编辑
选举主节点和更改集群状态是主节点候选节点必须共同完成的两项基本任务。重要的是,即使某些节点发生故障,这些活动也能可靠地工作。Elasticsearch 通过将每个操作的成功视为从仲裁中收到响应来实现这种鲁棒性,仲裁是集群中主节点候选节点的子集。仅要求子集节点响应的优势在于,这意味着某些节点可以发生故障,而不会阻止集群取得进展。仲裁经过精心选择,以确保集群不会出现“脑裂”场景,在这种场景中,集群被分成两部分,每个部分可能做出与另一部分不一致的决策。
Elasticsearch 允许您将主节点候选节点添加到正在运行的集群中,并从中移除节点。在许多情况下,您可以通过根据需要启动或停止节点来简单地完成此操作。有关更多信息,请参见在集群中添加和删除节点。
随着节点的添加或删除,Elasticsearch 通过更新集群的投票配置来维护最佳的容错级别,投票配置是主节点候选节点的集合,在做出决策(例如选举新的主节点或提交新的集群状态)时,它们的响应会被计算在内。只有在投票配置中超过一半的节点做出响应后,才会做出决策。通常,投票配置与当前集群中所有主节点候选节点的集合相同。但是,在某些情况下,它们可能不同。
为了确保集群保持可用,您绝不能同时停止投票配置中一半或更多节点。只要超过一半的投票节点可用,集群就可以正常工作。这意味着,如果有三个或四个主节点候选节点,集群可以容忍其中一个节点不可用。如果有两个或更少的主节点候选节点,它们必须全部保持可用。
如果您同时停止投票配置中一半或更多节点,那么集群将不可用,直到您将足够的节点恢复联机以再次形成仲裁。在集群不可用期间,任何剩余的节点将在其日志中报告它们无法发现或选举主节点。有关更多信息,请参见排查发现问题。
在主节点候选节点加入或离开集群后,选定的主节点可能会发布一个集群状态更新,以调整投票配置以匹配,这可能需要一些时间才能完成。在从集群中删除更多节点之前,等待此调整完成非常重要。有关更多信息,请参见删除主节点候选节点。
主节点选举编辑
Elasticsearch 使用选举过程来协商选定的主节点,无论是在启动时还是在现有的选定主节点发生故障时。任何主节点候选节点都可以启动选举,通常,第一个进行的选举将成功。选举通常只会在两个节点恰好在同一时间启动选举时失败,因此选举在每个节点上随机安排,以降低这种情况发生的概率。节点将重试选举,直到选出主节点,并在失败时退避,因此最终选举将成功(具有任意高的概率)。主节点选举的安排由主节点选举设置控制。
集群维护、滚动重启和迁移编辑
许多集群维护任务涉及暂时关闭一个或多个节点,然后重新启动它们。默认情况下,如果 Elasticsearch 的一个主节点候选节点被下线(例如在滚动升级期间),它可以保持可用。此外,如果多个节点被停止然后重新启动,它将自动恢复,例如在整个集群重启期间。在这些情况下,不需要使用此处描述的 API 执行任何进一步的操作,因为主节点集不会永久更改。