了解Elasticsearch的write_consistency和仲裁规则

时间:2013-06-20 11:48:50

标签: elasticsearch

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

quorum(> replicas / 2 + 1)

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

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

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

现在,测试结果证明,在我们运行3个节点之前,不满足write_consistency级别(写入操作超时)。这种方式是有道理的,因为我们可以在这个设置中的每个2个节点组之间得到一个裂脑,但我不太明白这个规则应该如何工作?我在这里使用错误的号码吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

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

一些注释:

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

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

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