9

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

法定人数(>副本/2+1)

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

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

要满足仲裁规则,仲裁 > 48/2 + 1 = 25 个活动分片。

现在,对此进行测试证明,在我们运行 3 个节点之前,不会满足 write_consistency 级别(写入操作超时)。这是有道理的,因为在这个设置中,我们可以在每组 2 个节点之间实现脑裂,但我不太明白这个规则应该如何工作?我在这里使用了错误的数字吗?

4

1 回答 1

6

主分片数实际上并不重要,所以我将用 N 替换它。

如果您有一个包含 N 个分片和 2 个副本的索引,则复制组中有三个分片。这意味着法定人数是两个:主要加上一个副本。您需要两个活动分片,这通常意味着两台活动机器,以满足写入一致性参数

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

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

几点注意事项:

  • 0.19 真的很老了,你应该绝对,绝对,积极升级。我什至无法计算自该版本以来添加了多少错误修复和性能改进:)

  • 写一致性仅仅是一个网关检查。在执行索引请求之前,节点会进行一次稻草轮询,以查看是否满足 write_consistency。如果是,它会尝试执行索引并推送复制。这并不能保证副本会成功……它们很容易失败,您会在响应中看到它。如果不满足一致性设置,它只是一种停止索引过程的机制。

  • 具有两个节点的“完全复制”设置是 1 个主分片 + 1 个副本。每个节点都有一套完整的数据。没有理由拥有更多的副本,因为 ES 拒绝将相同数据的副本放在同一台机器上(没有意义,对 HA 没有帮助)。无法索引只是写入一致性的副作用,但它指出了您的设置存在更大的问题:)

于 2014-01-23T02:41:03.447 回答