了解Elasticsearch的write_consistency和仲裁规则

run*_*arM 8 elasticsearch

根据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个节点的组之间得到一个裂脑,但我不太明白这个规则应该如何工作?我在这里使用错误的号码吗?

Zac*_*ach 5

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

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

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

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

几点说明:

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

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

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