本地英文版地址: ../en/modules-discovery-quorums.html
选举主节点和更改集群状态是符合主节点条件的节点必须协同工作才能执行的两项基本任务。 重要的是,即使一些节点出现故障,这些活动也能正常工作。 Elasticsearch通过在收到来自 法定人数(quorum)(集群中符合主节点条件的节点的子集)的响应时认为每个动作已经成功,从而来实现这种健壮性。 只需要一部分节点响应的优点是,这意味着即使一些节点可能会出现故障,也不会妨碍集群形成的过程。 法定人数是经过精心挑选的,因此集群不会出现“大脑分裂”的情况,即它被分成两部分,每一部分都可能做出与另一部分不一致的决定。
Elasticsearch 允许在运行的集群中添加和删除符合主节点条件的节点。 在很多情况下,只需根据需要启动或停止节点就可以做到这一点。 参考 添加和删除节点。
随着节点的添加或删除,Elasticsearch 通过更新集群的投票配置(voting configuration)来保持最佳的容错级别,投票配置是一组符合主节点条件的节点,在做出决策(如选举新的主节点或提交新的集群状态)时,会计入这些节点的响应。 只有在投票配置中超过一半的节点已经响应之后,才做出决定。 通常,投票配置与集群中当前所有符合主节点条件的节点集相同。 但是,在某些情况下,它们可能会有所不同。
为了确保集群保持可用,你不能同时停止投票配置中一半或更多的节点。 只要有一半以上的选举节点可用,集群仍然可以正常工作。 这意味着,如果有三个或四个符合主节点条件的节点,集群可以容忍其中一个节点不可用。 如果有两个或更少的符合主节点条件的节点,它们都必须保持可用。
在一个节点加入或离开集群后,选出的主节点必须发出一个集群状态更新,以调整投票配置来匹配新的状态,这可能需要很短的时间来完成。 在从集群中删除更多节点之前,请等待调整完成,这一点很重要。
主节点的选举 (Master elections)
lasticsearch 使用一个选举过程来商定一个选出的主节点,无论是在启动时还是在现有的选出的主节点失效时。 任何符合主节点条件的节点都可以发起选举,通常第一次选举会成功。 只有当两个节点几乎同时发起选举时,选举才会失败,因此选举在每个节点上都是随机安排的,以降低这种情况发生的概率。 节点将重试选举,直到选出一个主节点,失败时后退(backing off),这样最终选举将成功(具有任意高的概率)。 主选举的时间安排由 主节点选举设置 控制。
集群维护、滚动重启和迁移 (Cluster maintenance, rolling restarts and migrations)
许多集群维护任务涉及临时关闭一个或多个节点,然后再次启动它们。 默认情况下,如果其中一个符合主节点条件的节点离线,例如在 滚动重启(rolling restart) 期间,Elasticsearch 仍然可用。 此外,如果多个节点停止后又重新启动,它将自动恢复,例如在 整个集群重新启动 期间。 在这些情况下,不需要对这里描述的 API 采取任何进一步的行动,因为主节点集不会永久改变。