根据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个节点组之间得到一个裂脑,但我不太明白这个规则应该如何工作?我在这里使用错误的号码吗?
答案 0 :(得分:5)
主分片计数实际上并不重要,因此我将用N替换它。
如果您的索引包含N个分片和2个副本,则复制组中有三个分片。这意味着仲裁是两个:主要加上一个副本。您需要两个活动分片,通常意味着两个活动机器,以满足写入一致性参数
具有N个分片和3个副本的索引在复制组中有四个分片(主要+3个副本),因此法定数量为3。
具有N个分片和1个副本的索引是一种特殊情况,因为您实际上不能只有两个分片的仲裁。只有一个副本,Elasticsearch只需要一个活动分片(例如主分片),因此quorum
设置与此特定排列的one
设置相同。
一些注释:
0.19真的很老了,你绝对应该肯定,积极升级。我甚至无法计算自该版本以来添加了多少错误修正和性能改进:)
写一致性只是一个网关检查。在执行索引请求之前,节点将执行预测轮询以查看是否满足write_consistency。如果是,则尝试执行索引并推送复制。这并不能保证复制品能够成功......它们很容易失败,你会在响应中看到它。如果不满足一致性设置,它只是一种停止索引过程的机制。
具有两个节点的“完全复制”设置是1个主分片+ 1个副本。每个节点都有一整套数据。没有理由拥有更多的副本,因为ES拒绝将相同数据的副本放在同一台机器上(没有意义,也没有帮助HA)。无法索引只是写入一致性的副作用,但它指出了您的设置更大的问题:)