在较小的集群中,最重要的是要能够抵抗单节点故障。本节提供一些指导,使集群对单个节点的故障尽可能地具有弹性。
One-node clusters
如果您的集群由一个节点组成,则该单个节点必须执行所有操作。为了适应这一点,Elasticsearch 默认为节点分配每个角色。
单节点集群没有弹性。如果节点发生故障,集群将停止工作。由于一个节点集群中没有副本,因此无法冗余存储数据。但是,默认情况下,绿色集群运行状况至少需要一个副本。为确保您的集群可以报告 green cluster health status ,请通过将每个索引的 index.number_of_replicas 设置为 0 来覆盖默认值。
如果节点发生故障,则可能需要从 snapshot 还原所有丢失的索引的较旧副本。
因为它们不能抵抗任何故障,所以我们不建议在生产中使用单节点集群。
Two-node clusters
如果您有两个节点,我们建议它们都是数据节点。您还应通过将每个索引的 index.number_of_replicas 设置为 1 ,确保每个分片都冗余存储在两个节点上。这是默认的副本数,但可能被索引模板覆盖。自动扩展副本也可以实现相同的目的,但是不必在如此小的集群中使用此功能。
我们建议您在两个节点之一上设置 node.master:false ,以使它不符合 master 资格。这意味着你可以肯定另一个节点是集群的当选主。集群可以容忍其他不符合主机资格的节点的丢失。如果您未在一个节点上设置 node.master:false ,则两个节点都符合 master 资格。这意味着两个节点都需要进行主选举。由于任何一个节点都不可用,选举将失败,因此您的集群无法可靠地容忍任何一个节点的丢失。
默认情况下,为每个节点分配每个角色。我们建议您为两个节点分配除主节点资格以外的所有其他角色。如果一个节点发生故障,则另一节点可以处理其任务。
您应该避免仅将客户端请求发送到您的一个节点。如果这样做,并且此节点失败,那么即使其余节点本身是运行状况良好的集群,此类请求也不会收到响应。理想情况下,您应该在两个节点之间平衡客户请求。一种好的方法是在配置客户端以连接到集群时指定两个节点的地址。或者,您可以使用弹性负载平衡器来平衡集群中各个节点上的客户端请求。
由于它不能抵抗故障,因此我们不建议在生产中部署两节点集群。
Two-node clusters with a tiebreaker
由于主选举基于多数选举,因此上述的两节点集群可以容忍其节点之一丢失,而不能容忍另一个节点丢失。您不能配置两个节点的集群,以使其可以容忍任一节点的丢失,因为从理论上讲这是不可能的。您可能希望,如果任一节点发生故障,那么 Elasticsearch 都可以将其余节点选为主节点,但是无法分辨出远程节点故障与节点之间仅失去连接之间的区别。如果两个节点都能够运行独立的选举,则失去连接将导致脑裂问题,从而导致数据丢失。 Elasticsearch 避免了这一点,并通过选举两个节点都不为主节点,直到该节点可以确保其具有最新的集群状态并且集群中没有其他主节点为止,从而保护了您的数据。在恢复连接之前,这可能导致集群没有主服务器。
您可以通过添加第三个节点并使所有三个节点成为主节点来解决此问题。主选举仅需要三个符合主资格的节点中的两个。这意味着集群可以容忍任何单个节点的丢失。在两个原始节点彼此断开连接的情况下,该第三个节点充当决胜对手。您可以通过使该额外节点成为专用的仅投票主控资格节点(也称为专用平局决胜者)来减少资源需求。因为它没有其他角色,所以专用的决胜局不必像其他两个节点那样强大。它不会执行任何搜索,也不会协调任何客户端请求,也无法被选为集群的主服务器。
这两个原始节点不应是仅投票的主机资格节点,因为弹性集群至少需要三个主机资格的节点,其中至少有两个不是仅投票的主机资格节点。如果您的三个节点中有两个都是只有投票的主节点的资格,那么当选主机肯定是第三点。然后该节点成为单点故障。
我们建议为两个非决胜节点分配所有其他角色。通过确保集群中的任何任务都可以由任一节点处理的方式,创建了冗余。
您不应将任何客户端请求发送到专门的决胜局节点。您还应该避免将客户端请求仅发送到其他两个节点之一。如果这样做,并且该节点发生故障,那么即使其余节点组成了正常的集群,任何请求都将不会收到响应。理想情况下,您应该在两个非决胜节点之间平衡客户请求。您可以通过在配置客户端以连接到集群时指定两个节点的地址来执行此操作。另外,您可以使用弹性负载平衡器来平衡集群中适当节点上的客户端请求。 Elastic Cloud 服务提供了这样的负载均衡器。
带有附加决胜节点的两个节点集群是适用于生产部署的最小的集群。
Three-node clusters
如果您有三个节点,我们建议它们都是数据节点,并且每个索引应至少有一个副本。默认情况下,节点是数据节点。您可能希望某些索引具有两个副本,以便每个节点在这些索引中具有每个分片的副本。您还应将每个节点配置为符合主节点资格,以便它们中的任何两个都可以举行主选举,而无需与第三个节点进行通信。默认情况下,节点是符合主机资格的。该集群可以抵抗任何单个节点的丢失。
您应该避免仅将客户端请求发送到您的一个节点。如果这样做,并且该节点发生故障,那么即使其余两个节点组成了正常的集群,任何请求都不会收到响应。理想情况下,您应该在所有三个节点之间平衡客户请求。您可以通过在配置客户端以连接到集群时指定多个节点的地址来执行此操作。另外,您可以使用弹性负载平衡器来平衡整个集群中的客户端请求。 Elastic Cloud 服务提供了这样的负载均衡器。
Clusters with more than three nodes
一旦集群增长到三个以上的节点,就可以根据它们的职责开始专门化这些节点,从而允许您根据需要独立地扩展其资源。您可以根据需要安排任意数量的数据节点、摄取节点、机器学习节点等,以支持您的工作负载。随着您的集群的扩大,我们建议为每个角色使用专用节点。这使您可以独立扩展每个任务的资源。
但是,优良作法是将集群中符合主机要求的节点数限制为三个。主节点不会像其他节点类型那样扩展,因为集群始终只选择其中一个作为集群的主节点。如果合格的主节点太多,则主选举可能需要更长的时间才能完成。在较大的集群中,建议您将某些节点配置为专用于主设备的节点,并避免将任何客户端请求发送到这些专用节点。如果符合资格的主机节点被其他节点之一可能处理的不必要的额外工作所淹没,则集群可能会变得不稳定。
您可以将符合资格的主节点之一配置为仅投票节点,这样就永远不会将其选为主节点。例如,您可能有两个专用的主节点,而第三个节点既是数据节点又是有表决权的主节点。第三个仅投票节点将在主选举中充当决胜局,但永远不会成为主选举本身。
Summary
只要满足以下条件,集群就可以抵抗任何节点的丢失:
- 集群运行状况为绿色。
- 至少有两个数据节点。
- 除主分片外,每个索引还具有每个分片的至少一个副本。
- 该集群至少具有三个符合主机要求的节点,只要这些节点中的至少两个不是仅投票的符合主机要求的节点即可。
- 客户端被配置为将其请求发送到多个节点,或者被配置为使用负载均衡器,以在一组适当的节点之间平衡请求。 Elastic Cloud 服务提供了这样的负载均衡器。
详情见官网:www.elastic.co/guide/en/el…
翻译不准请多指教,翻译不易请勿盗用,如使用请标明出处