小型集群的弹性
编辑小型集群的弹性
编辑在较小的集群中,最重要的是能够应对单个节点故障。本节提供了一些指导,帮助您使集群尽可能地能够应对单个节点故障。
单节点集群
编辑如果您的集群仅包含一个节点,则该节点必须承担所有任务。为了适应这种情况,Elasticsearch 默认情况下会为节点分配所有角色。
单节点集群没有弹性。如果节点发生故障,集群将停止工作。由于单节点集群中没有副本,因此您无法冗余地存储数据。但是,默认情况下,至少需要一个副本才能获得绿色
集群健康状态。为了确保您的集群能够报告绿色
状态,请覆盖默认设置,将每个索引上的index.number_of_replicas
设置为0
。
如果节点发生故障,您可能需要从快照中恢复任何丢失索引的旧版本。
由于它们对任何故障都没有弹性,因此我们不建议在生产环境中使用单节点集群。
双节点集群
编辑如果您有两个节点,我们建议它们都作为数据节点。您还应该确保每个分片都冗余地存储在两个节点上,方法是在每个不是可搜索快照索引的索引上将index.number_of_replicas
设置为1
。这是默认行为,但可能会被索引模板覆盖。自动扩展副本也可以实现相同的效果,但在如此小的集群中无需使用此功能。
我们建议您只将两个节点中的一个设置为主节点候选节点。这意味着您可以确定哪个节点是集群的选举主节点。集群可以容忍另一个非主节点候选节点的丢失。如果您将两个节点都设置为主节点候选节点,则需要两个节点才能进行主节点选举。由于如果任一节点不可用,选举将失败,因此您的集群无法可靠地容忍任一节点的丢失。
默认情况下,每个节点都被分配了所有角色。我们建议您为两个节点分配除主节点资格之外的所有其他角色。如果一个节点发生故障,另一个节点可以处理其任务。
您应该避免仅向一个节点发送客户端请求。如果您这样做,并且该节点发生故障,则即使剩余节点本身是一个健康的集群,这些请求也不会收到响应。理想情况下,您应该在两个节点之间平衡客户端请求。实现此目的的一种好方法是在配置客户端连接到集群时指定两个节点的地址。或者,您可以使用弹性负载均衡器在集群中的节点之间平衡客户端请求。
由于它对故障没有弹性,因此我们不建议在生产环境中部署双节点集群。
带有仲裁节点的双节点集群
编辑由于主节点选举是基于多数投票的,因此上面描述的双节点集群可以容忍其中一个节点的丢失,但不能容忍另一个节点的丢失。您无法配置双节点集群以使其能够容忍*任何*节点的丢失,因为这在理论上是不可能的。您可能期望,如果任一节点发生故障,则 Elasticsearch 可以选举剩余节点作为主节点,但无法区分远程节点的故障与节点之间连接丢失。如果两个节点都能够运行独立的选举,则连接丢失会导致脑裂问题,从而导致数据丢失。Elasticsearch 避免这种情况并通过在该节点能够确定它拥有最新的集群状态并且集群中没有其他主节点之前不选举任何节点作为主节点来保护您的数据。这可能导致集群在连接恢复之前没有主节点。
您可以通过添加第三个节点并将所有三个节点设置为主节点候选节点来解决此问题。主节点选举只需要三个主节点候选节点中的两个。这意味着集群可以容忍任何单个节点的丢失。这个第三个节点充当两个原始节点彼此断开连接情况下的仲裁节点。您可以通过将其设置为专用的仅投票主节点候选节点(也称为专用仲裁节点)来降低此额外节点的资源需求。由于它没有其他角色,因此专用仲裁节点不需要像其他两个节点那样强大。它不会执行任何搜索或协调任何客户端请求,也不能被选举为集群的主节点。
两个原始节点不应是仅投票的主节点候选节点,因为弹性集群至少需要三个主节点候选节点,其中至少两个节点不是仅投票的主节点候选节点。如果三个节点中的两个是仅投票的主节点候选节点,则选举的主节点必须是第三个节点。然后,该节点成为单点故障。
我们建议为两个非仲裁节点分配所有其他角色。这通过确保集群中的任何任务都可以由任一节点处理来创建冗余。
您不应向专用仲裁节点发送任何客户端请求。您还应该避免仅向其他两个节点中的一个发送客户端请求。如果您这样做,并且该节点发生故障,则任何请求都不会收到响应,即使剩余节点形成了一个健康的集群。理想情况下,您应该在两个非仲裁节点之间平衡客户端请求。您可以在配置客户端连接到集群时指定两个节点的地址来实现此目的。或者,您可以使用弹性负载均衡器在集群中的相应节点之间平衡客户端请求。Elastic Cloud服务提供了这样的负载均衡器。
带有额外仲裁节点的双节点集群是最小的适用于生产部署的集群。
三节点集群
编辑如果您有三个节点,我们建议它们都作为数据节点,并且每个不是可搜索快照索引的索引都应该至少有一个副本。节点默认为数据节点。您可能希望某些索引有两个副本,以便每个节点都拥有这些索引中每个分片的副本。您还应该将每个节点配置为主节点候选节点,以便它们中的任何两个都可以进行主节点选举,而无需与第三个节点通信。节点默认为主节点候选节点。此集群将能够应对任何单个节点的丢失。
您应该避免仅向一个节点发送客户端请求。如果您这样做,并且该节点发生故障,则即使剩余两个节点形成了一个健康的集群,任何请求也不会收到响应。理想情况下,您应该在所有三个节点之间平衡客户端请求。您可以在配置客户端连接到集群时指定多个节点的地址来实现此目的。或者,您可以使用弹性负载均衡器在集群中平衡客户端请求。Elastic Cloud服务提供了这样的负载均衡器。
超过三个节点的集群
编辑一旦您的集群增长到超过三个节点,您就可以开始根据节点的职责对其进行专门化,从而允许您根据需要独立地扩展其资源。您可以拥有任意数量的数据节点、摄取节点、机器学习节点等,以满足您的工作负载需求。随着集群规模的扩大,我们建议为每个角色使用专用节点。这使您可以独立地扩展每个任务的资源。
但是,最好将集群中主节点候选节点的数量限制为三个。主节点不像其他节点类型那样扩展,因为集群始终只选举其中一个节点作为集群的主节点。如果主节点候选节点过多,则主节点选举可能需要更长的时间才能完成。在较大的集群中,我们建议您将某些节点配置为专用主节点候选节点,并避免向这些专用节点发送任何客户端请求。如果主节点候选节点因不必要的额外工作而不堪重负,而这些工作本可以由其他节点处理,则您的集群可能会变得不稳定。
您可以将其中一个主节点候选节点配置为仅投票节点,以便它永远不会被选举为主节点。例如,您可以有两个专用主节点和一个既是数据节点又是仅投票主节点候选节点的第三个节点。这个第三个仅投票节点将充当主节点选举中的仲裁节点,但永远不会成为主节点本身。
总结
编辑只要满足以下条件,集群就能应对任何节点的丢失
- 集群健康状态为
绿色
。 - 至少有两个数据节点。
- 每个不是可搜索快照索引的索引都至少有一个每个分片的副本,此外还有主分片。
- 集群至少有三个主节点候选节点,只要其中至少两个节点不是仅投票的主节点候选节点。
- 客户端配置为将其请求发送到多个节点,或者配置为使用在相应节点集中平衡请求的负载均衡器。Elastic Cloud服务提供了这样的负载均衡器。