我没有用过 AWS Elasticsearch,但我用过 Cloud Elasticsearch 服务。
当您使用 3 个可用区(可用区)时,意味着您的集群将使用 3 个区域以使其具有弹性。如果一个区域出现问题,那么该区域中的节点也会出现问题。
如描述部分所述,如果选择 3 AZ,则需要指定 3 的倍数。如果您有 3 个节点,那么每个 AZ 将有一个区域。如果一个区域有问题,那么那个节点就出问题了,剩下的两个必须从那里接起来。
现在来回答您的问题。你用这些配置得到了什么。你可以自己检查一下。通过 kibana 或任何 HTTP 客户端使用它
GET _nodes
检查部分:
- nodes.roles
- nodes.attributes
在各种文档、博客文章等中,您会看到对于生产用途,3 个节点和 3 个可用区是一个很好的起点,以便拥有一个弹性生产集群。
让我们一步一步来:
通过将这两者结合起来,您至少需要 3 个节点(尚未提及区域)。
但是有一个主节点和两个数据节点,不会削减它。您需要有 3 个符合主节点资格的节点。因此,如果您有一个节点出局,其他两个仍然可以形成一个仲裁并投票选出一个新的主节点,因此您的集群将在两个节点上运行。但是为了让它工作,你需要设置你的主分片和副本分片,让你的任何两个节点都可以保存你的全部数据。
示例(为简单起见,我们只有一个索引):
- 1 个主,2 个副本。每个节点都拥有一个分片,即 100% 的数据
- 3 个初选,1 个复本。每个节点将拥有一个主节点和一个副本(33% 主节点,33% 副本)。两个节点组合在一起(这也是构成仲裁的最小值)将保存您的所有数据(以及更多数据)
你可以有更多的组合,但你明白了。
如您所见,分片配置需要与您的节点数量和类型(主合格、仅数据等)相匹配。
现在,如果您添加可用区域,您就可以解决一个区域出现问题的问题。如果您的集群作为一个整体在一个区域中(一个节点中有 3 个节点),那么如果该区域有问题,那么您的整个集群就出局了。
如果您设置一个主节点和两个数据节点(不符合主节点资格),则拥有 3 个可用区(甚至 3 个节点)对弹性没有多大帮助,因为如果主节点退出,您的集群将无法选举一个新的,它将一直存在,直到主节点再次启动。现在对于相同的设置,如果数据节点出现故障,那么如果您将分片配置为具有冗余的方式(这意味着剩余的两个节点如果合并则具有所有数据),那么它将正常工作。