了解 Elasticsearch 的 write_consistency 和 quorum 规则

Posted

技术标签:

【中文标题】了解 Elasticsearch 的 write_consistency 和 quorum 规则【英文标题】:Understanding the write_consistency and quorum rule of Elasticsearch 【发布时间】:2013-06-20 11:48:50 【问题描述】:

根据 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 个节点之间实现脑裂,但我不太明白这个规则应该如何工作?我在这里使用了错误的数字吗?

【问题讨论】:

感觉就像您已将写入一致性设置为所有。检查您的写入是否具有“一致性”:全部 ^ 我的意思是针对每个单独的索引请求。 【参考方案1】:

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

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

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

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

几点说明:

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

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

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

【讨论】:

以上是关于了解 Elasticsearch 的 write_consistency 和 quorum 规则的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch rollover index滚动索引

Node.js 可写流:write vs _write

Elasticsearch:了解 Elasticsearch combined fields 和 multi match 查询

kafka-connect-elasticsearch:当使用“write.method”作为 upsert 时,是不是可以在 kafka 主题上使用相同的 AVRO 对象来发送部分文档?

Linux进阶Ubuntu安装ElasticSearch

Elasticsearch:Elasticsearch中的refresh和flush操作指南