【问题标题】:ElasticSearch for High availabilityElasticSearch 实现高可用性
【发布时间】:2020-10-15 10:13:44
【问题描述】:

我有一个位于 3 个数据中心的 5 节点 ElasticSearch 集群

DC1:

  • ES01(主合格,数据
  • ES02(数据

DC2:

  • ES03(主合格,数据
  • ES04(数据

DC3:

  • ES05(仅主节点

所以我需要继续读/写操作以防任何 DC 失败 例如,如果 DC2 已关闭,则集群现在由 3 个节点 (ES-01, ES-02 and ES-05) 组成,并且可以正常工作 那么有多少分片/或其他设置,比如读/写的一致性,我应该是 DC 容错的?

我认为(1 个主分片和 3 个副本分片适合这种情况)有什么建议吗?

【问题讨论】:

  • 这些是真正不同的物理 DC 还是单个 DC 内的可用区?
  • 不同的物理
  • 不建议跨不同数据中心运行单个 ES 集群。为 HA 设置的 ES 集群最好在具有不同 availability zones 的单个 DC 中运行

标签: elasticsearch


【解决方案1】:

不建议跨不同数据中心运行单个 ES 集群。为 HA 设置的 ES 集群最好在具有不同 availability zones (AZ) 的单个 DC 中运行。

由于您有两个带有数据的可用区,因此 N 个主(数量取决于您的数据量)和 1 个带有shard allocation awareness 的副本就足够了。无需在每个节点上都有一份数据副本,只需在每个 AZ 中的(至少)一个节点上。

ES01 和 ES02 应配置为:

node.attr.zone: zone1

ES03 和 ES04 应配置为:

node.attr.zone: zone2

ES01、ES03 和 ES05(即所有符合主节点资格的节点)应配置为:

cluster.routing.allocation.awareness.attributes: zone

这将确保主分片和副本分片在两个区域之间保持平衡。如果 zone2 失败,则 zone1 仍然包含数据的完整副本。 ES 还要做的是为 zone1 中的每个主分片重新创建一个副本。如果您认为单个区域中可能没有足够的容量来包含数据的完整副本,您可以使用forced awareness 来阻止 ES 将新的副本分片分配给单个区域。

为此,您需要在 ES01、ES03 和 ES05 中添加以下行:

cluster.routing.allocation.awareness.force.zone.values: zone1,zone2

【讨论】:

  • 我正在创建一个错误问题 btw @val github.com/elastic/elasticsearch/issues/63717
  • 我不确定这是一个错误...因为您的快照中的集群状态与您的新集群中的状态不同...当您恢复快照时,您是否也恢复了集群状态?
  • 而且,ES02 和 ES04 只需要node.attr.zone,别的什么都不需要
  • 为什么只有es02和es04只需要这个属性?上面你写它应该在所有节点上,我正在恢复集群状态,但无论如何索引必须尊重弹性搜索配置吗?
  • 对不起,我的意思是cluster.routing.allocation.awareness.attributes,但是复制/粘贴了错误的。我的坏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多