小型集群的弹性编辑

在较小的集群中,最重要的是对单个节点故障具有弹性。本节提供了一些指导,以使您的集群尽可能地对单个节点的故障具有弹性。

单节点集群编辑

如果您的集群包含一个节点,则该单个节点必须执行所有操作。为了适应这一点,Elasticsearch 默认情况下为节点分配每个角色。

单节点集群没有弹性。如果节点发生故障,集群将停止工作。由于单节点集群中没有副本,因此您无法冗余地存储数据。但是,默认情况下,至少需要一个副本才能获得green 集群健康状态。为了确保您的集群可以报告green 状态,请通过在每个索引上将index.number_of_replicas 设置为0 来覆盖默认值。

如果节点发生故障,您可能需要从快照 中恢复任何丢失索引的旧副本。

由于它们对任何故障都没有弹性,因此我们不建议在生产环境中使用单节点集群。

双节点集群编辑

如果您有两个节点,我们建议它们都是数据节点。您还应确保每个分片都冗余地存储在两个节点上,方法是在每个不是可搜索快照索引 的索引上将index.number_of_replicas 设置为1。这是默认行为,但可能会被索引模板 覆盖。自动扩展副本 也可以实现相同的效果,但在如此小的集群中没有必要使用此功能。

我们建议您将两个节点中的一个设置为主节点。这意味着您可以确定哪个节点是集群的选定主节点。集群可以容忍另一个非主节点的丢失。如果您将两个节点都设置为主节点,则需要两个节点才能进行主节点选举。由于如果任一节点不可用,选举将失败,因此您的集群无法可靠地容忍任一节点的丢失。

默认情况下,每个节点都被分配了每个角色。我们建议您将除主节点资格之外的所有其他角色分配给两个节点。如果一个节点发生故障,另一个节点可以处理其任务。

您应该避免仅向其中一个节点发送客户端请求。如果您这样做,并且此节点发生故障,则即使剩余节点本身是一个健康的集群,此类请求也不会收到响应。理想情况下,您应该在两个节点之间平衡您的客户端请求。一个很好的方法是在配置客户端以连接到您的集群时指定两个节点的地址。或者,您可以使用弹性负载均衡器在集群中的节点之间平衡客户端请求。

由于它对故障没有弹性,因此我们不建议在生产环境中部署双节点集群。

带有仲裁节点的双节点集群编辑

由于主节点选举是基于多数的,因此上面描述的双节点集群可以容忍其中一个节点的丢失,但不能容忍另一个节点的丢失。您无法配置双节点集群以使其能够容忍任一节点的丢失,因为这在理论上是不可能的。您可能期望如果任一节点发生故障,则 Elasticsearch 可以选举剩余节点为主节点,但无法区分远程节点的故障与节点之间连接丢失。如果两个节点都能够运行独立的选举,则连接丢失会导致脑裂问题,因此会导致数据丢失。Elasticsearch 避免了这种情况并通过选举任何节点为主节点来保护您的数据,直到该节点可以确定它拥有最新的集群状态并且集群中没有其他主节点。这可能导致集群没有主节点,直到连接恢复。

您可以通过添加第三个节点并将所有三个节点设置为主节点来解决此问题。主节点选举 仅需要三个主节点中的两个。这意味着集群可以容忍任何单个节点的丢失。这个第三个节点充当仲裁节点,用于两个原始节点彼此断开连接的情况。您可以通过将其设置为专用仅投票的主节点(也称为专用仲裁节点)来减少此额外节点的资源需求。由于它没有其他角色,因此专用仲裁节点不需要像其他两个节点那样强大。它不会执行任何搜索或协调任何客户端请求,也不能被选为主节点。

两个原始节点不应该是仅投票的主节点,因为弹性集群至少需要三个主节点,其中至少两个不是仅投票的主节点。如果您的三个节点中有两个是仅投票的主节点,那么选定的主节点必须是第三个节点。然后,此节点成为单点故障。

我们建议将除仲裁节点之外的所有其他角色分配给两个非仲裁节点。这通过确保集群中的任何任务都可以由任一节点处理来创建冗余。

您不应向专用仲裁节点发送任何客户端请求。您还应避免仅向其他两个节点中的一个发送客户端请求。如果您这样做,并且此节点发生故障,则即使剩余节点形成一个健康的集群,任何请求也不会收到响应。理想情况下,您应该在两个非仲裁节点之间平衡您的客户端请求。您可以通过在配置客户端以连接到您的集群时指定两个节点的地址来实现。或者,您可以使用弹性负载均衡器在集群中的适当节点之间平衡客户端请求。Elastic Cloud 服务提供了这样的负载均衡器。

带有额外仲裁节点的双节点集群是适合生产部署的最小可能集群。

三节点集群编辑

如果您有三个节点,我们建议它们都是数据节点,并且每个不是可搜索快照索引 的索引都应该至少有一个副本。节点默认情况下是数据节点。您可能更喜欢某些索引具有两个副本,以便每个节点都拥有这些索引中每个分片的副本。您还应将每个节点配置为主节点,以便它们中的任何两个都可以进行主节点选举,而无需与第三个节点通信。节点默认情况下是主节点。此集群将对任何单个节点的丢失具有弹性。

您应该避免仅向其中一个节点发送客户端请求。如果您这样做,并且此节点发生故障,则即使剩余的两个节点形成一个健康的集群,任何请求也不会收到响应。理想情况下,您应该在所有三个节点之间平衡您的客户端请求。您可以通过在配置客户端以连接到您的集群时指定多个节点的地址来实现。或者,您可以使用弹性负载均衡器在您的集群之间平衡客户端请求。Elastic Cloud 服务提供了这样的负载均衡器。

具有三个以上节点的集群编辑

一旦您的集群增长到三个以上节点,您就可以根据其职责开始专门化这些节点,从而允许您根据需要独立地扩展其资源。您可以根据需要拥有任意数量的数据节点摄取节点机器学习节点 等,以支持您的工作负载。随着您的集群越来越大,我们建议您为每个角色使用专用节点。这使您能够独立地扩展每个任务的资源。

但是,最好将集群中的主节点数量限制为三个。主节点不像其他节点类型那样扩展,因为集群始终只选举其中一个节点为主节点。如果主节点过多,则主节点选举可能需要更长的时间才能完成。在较大的集群中,我们建议您将一些节点配置为专用主节点,并避免向这些专用节点发送任何客户端请求。如果主节点被不必要的额外工作所淹没,而这些工作本可以由其他节点处理,则您的集群可能会变得不稳定。

您可以将其中一个主节点配置为仅投票节点,这样它永远不会被选为主节点。例如,您可能有两个专用主节点和第三个节点,它既是数据节点又是仅投票的主节点。这个第三个仅投票节点将充当主节点选举中的仲裁节点,但永远不会成为主节点本身。

总结编辑

只要满足以下条件,集群将对任何节点的丢失具有弹性

  • 集群健康状态green
  • 至少有两个数据节点。
  • 除了主节点之外,每个不是可搜索快照索引 的索引都至少有一个每个分片的副本。
  • 集群至少拥有三个主节点候选节点,只要其中至少两个节点不是只投票的主节点候选节点。
  • 客户端被配置为将请求发送到多个节点,或者被配置为使用负载均衡器,该负载均衡器将请求均衡到一组合适的节点。 Elastic Cloud 服务提供了这样的负载均衡器。