基于仲裁的决策

编辑

选举主节点和更改集群状态是符合主节点资格的节点必须协同执行的两个基本任务。即使某些节点发生故障,这些活动也必须稳健地工作。Elasticsearch 通过考虑每个操作在收到来自仲裁(集群中符合主节点资格的节点子集)的响应后才算成功来实现这种稳健性。只需要一部分节点响应的优势在于,这意味着某些节点可能会失败,而不会阻止集群取得进展。仲裁是经过精心选择的,因此集群不会出现“脑裂”的情况,即集群被分成两部分,每一部分都可能做出与其他部分不一致的决策。

Elasticsearch 允许您向正在运行的集群添加和删除符合主节点资格的节点。在许多情况下,您可以根据需要简单地启动或停止节点即可完成此操作。有关更多信息,请参见在集群中添加和删除节点

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

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

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

在符合主节点资格的节点加入或离开集群后,当选的主节点可能会发布集群状态更新,以调整投票配置以匹配,这可能需要一段时间才能完成。在从集群中删除更多节点之前,务必等待此调整完成。有关更多信息,请参见删除符合主节点资格的节点

主节点选举

编辑

Elasticsearch 使用选举过程来就当选的主节点达成一致,无论是在启动时还是在现有当选主节点失败时。任何符合主节点资格的节点都可以开始选举,通常第一次进行的选举都会成功。选举通常只有在两个节点恰好在同一时间开始选举时才会失败,因此在每个节点上随机安排选举,以减少这种情况发生的可能性。节点将重试选举,直到选出主节点,并在失败时回退,以便最终选举成功(具有任意高的概率)。主节点选举的调度由主节点选举设置控制。

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

编辑

许多集群维护任务都涉及到临时关闭一个或多个节点,然后再将其重新启动。默认情况下,如果其中一个符合主节点资格的节点脱机,例如在滚动升级期间,Elasticsearch 仍然可以保持可用。此外,如果停止多个节点然后再次启动,它将自动恢复,例如在完全集群重启期间。在这些情况下,无需使用此处描述的 API 执行任何进一步的操作,因为主节点集合不会永久更改。