根据elasticsearch文档,write_consistency级仲裁的规则是:

仲裁(> replicas / 2 + 1)

使用ES 0.19.10,在具有16个分片/ 3个副本的设置中,我们将获得
16个主要碎片
48个副本

运行2个节点,我们将有16个(主)+ 16个(副本)= 32个 Activity 分片。

为了满足仲裁规则,仲裁> 48/2 + 1 = 25个 Activity 分片。

现在,测试证明是相反的情况,直到我们有3个节点在运行,才达到write_consistency级别(写操作超时)。这种方式很有意义,因为在此设置中我们可以在每组2个节点之间获得一个裂脑,但是我不太了解该规则应该如何工作?我在这里使用错误的数字吗?

最佳答案

主分片计数实际上并不重要,因此我将用N代替它。

如果您的索引包含N个分片和2个副本,则复制组中将有3个分片。这意味着法定人数为两个:主副本加上一个副本。您需要两个 Activity 的分片(通常意味着两个 Activity 的机器)来满足写入一致性参数

具有N个分片和3个副本的索引在复制组中有四个分片(主+ 3个副本),因此仲裁数为3。

具有N个分片和1个副本的索引是一种特殊情况,因为您不能真正拥有只有两个分片的仲裁。在只有一个副本的情况下,Elasticsearch只需要一个 Activity 的碎片(例如主碎片),因此quorum设置与该特定排列的one设置相同。

一些注意事项:

  • 0.19确实很旧,您应该绝对,绝对地,积极地升级。自该版本发布以来,我什至无法计数已添加了多少错误修正和性能改进:)
  • 写一致性仅仅是网关检查。在执行索引请求之前,节点将进行一次稻草轮询以查看是否满足write_consistency。如果是,它将尝试执行索引并推送复制。这不能保证副本会成功...它们很容易失败,您会在响应中看到它。如果不满足一致性设置,它只是一种停止索引过程的机制。
  • 具有两个节点的“完全复制”设置是1个主分片+ 1个副本。每个节点都有完整的数据集。没有理由拥有更多副本,因为ES拒绝将相同数据的副本放置在同一台计算机上(这没有意义,对HA毫无帮助)。无法索引只是写一致性的副作用,但它指出了设置中的一个更大问题:)
  • 08-28 03:06