跳到主要内容

基于法定人数的决策

选举主节点和更改集群状态是主合格节点必须协同执行的两大基本任务。即使某些节点发生故障,这些活动也能稳健地工作是非常重要的。Elasticsearch 通过将每个操作视为在收到法定人数(quorum)的响应后即成功来实现这种稳健性,法定人数是集群中主合格节点的一个子集。只需节点子集响应的好处在于,这意味着某些节点可以发生故障而不会阻止集群继续运作。法定人数经过精心选择,因此集群不会出现"脑裂"(split brain)场景,即集群被分成两部分,使得每部分可能做出与另一部分不一致的决策。

Elasticsearch 允许你向运行中的集群添加和移除主合格节点。在许多情况下,你可以简单地根据需要启动或停止节点来做到这一点。更多信息参阅在集群中添加和移除节点。

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

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

如果你同时停止了投票配置中一半或更多的节点,则集群将不可用,直到你让足够多的节点重新上线以再次形成法定人数。当集群不可用时,任何剩余节点都会在其日志中报告它们无法发现或选举主节点。更多信息参阅发现故障排除。

在主合格节点加入或离开集群后,已选举的主节点可能会发出调整投票配置以使其匹配的集群状态更新,这可能需要一小段时间才能完成。在从集群中移除更多节点之前,等待此调整完成非常重要。更多信息参阅移除主合格节点。

主节点选举​

Elasticsearch 使用选举过程来就已选举的主节点达成一致,无论是在启动时还是在现有的已选举主节点发生故障时。任何主合格节点都可以发起选举,通常第一次选举就会成功。选举通常只有在两个节点碰巧大约同时发起选举时才会失败,因此选举在每个节点上随机调度以降低发生这种情况的概率。节点会重试选举直到选出主节点,失败时退避,因此最终选举将会成功(概率任意高)。主节点选举的调度由主节点选举设置控制。

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

许多集群维护任务涉及临时关闭一个或多个节点,然后再次启动它们。默认情况下,如果其中一个主合格节点被下线(例如在滚动升级期间),Elasticsearch 可以保持可用。此外,如果多个节点被停止然后再次启动,它将自动恢复,例如在全集群重启期间。在这些情况下,无需使用此处描述的 API 采取任何进一步操作,因为主节点集合并未永久更改。

原文链接