当前位置: 首页 > 面试题库 >

了解Elasticsearch的write_consistency和仲裁规则

鲜于阳
2023-03-14
问题内容

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

仲裁(> replicas / 2 + 1)

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

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

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

现在,进行测试证明是相反的,直到我们有3个节点在运行,才达到write_consistency级别(写操作超时)。这种方式很有意义,因为在此设置中我们可以在每个2个节点的组之间获得一个裂脑,但是我不太了解该规则应该如何工作?我在这里使用错误的数字吗?


问题答案:

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

如果您的索引具有N个分片和2个副本,则复制组中将有3个分片。这意味着法定人数为两个:主要人数加上一个副本。您需要两个活动的分片(通常意味着两个活动的计算机)来满足写入一致性参数

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

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

一些注意事项:

  • 0.19确实很老,您应该绝对,绝对地,积极地升级。自该版本发布以来,我什至无法计数已添加了多少错误修正和性能改进:)

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

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



 类似资料:
  • 为仲裁模式选定足够的服务器是很重要的。无论系统延迟和奔溃,仲裁者必须保证任何的更新请求Zookeeper都会积极的响应并保存,直到另外一个请求取代它。 这个例子就是在第一章提到过的脑裂场景之一。为了避免这个问题,这个例子中仲裁者的数量不得低于三个,这是五台服务器的大多数。为了继续运行,整个Zookeeper集合必须保证三台服务器可用。为了确认更新请求已经成功的完成了,Zookeeper集合需要至少

  • 幸运的是,即使我们只有一台机器也能运行多个服务器。我们只需要建立一个更高级的配置文件。 为了让服务器之间相互联系,它们需要一些联系人的信息。理论上服务器可以通过多播协议来发现对方,但是我们支持除了单一网络外运行Zookeeper集合分散在多个网络中以支持多个Zookeeper集合。 图2-7 客户端重连接例子 initLimit=10 dataDir=./data server.2=127.0.0

  • 问题内容: hbase-site.xml中的zookeeper仲裁设置到底是什么? 问题答案: 如hbase- default.xml中所述, 这是设置: ZooKeeper Quorum中用逗号分隔的服务器列表。例如,“ host1.mydomain.com,host2.mydomain.com,host3.mydomain.com”。默认情况下,对于本地和伪分布式操作模式,此选项设置为loca

  • 问题内容: 我当时假设Elasticsearch中的每个碎片都是一个索引。但是我在某处读到,每个段都是一个Lucene索引。 细分到底是什么?它如何影响搜索效果?我的索引每天使用默认的Elasticsearch设置达到450GB左右(我每天创建一个新索引)。 当我执行时,我得到 和。 上面的值不应该是1吗?也许是因为价值?无论如何,这层是什么? 问题答案: 在Elasticsearch中,“索引”

  • 我想对我的映射myMap使用Quorum进行映射锁定操作。 我对仲裁使用编程配置。 我使用com.hazelcast.config.MapConfig.setQuorumName方法来设置仲裁。 我的地图配置如下,因为仲裁设置为xxx。 MapConfig{name='myMap',inMemoryFormat=BINARY',..,mapAttributeConfigs=null,quorumN

  • 所以我一直试图在启用kerberos的单个节点上设置kafka broker和zookeeper。 大部分都是基于这个教程:https://qiita.com/visualskyrim/items/8f48ff107232f0befa5a 系统:Ubuntu 18.04设置:一个EC2盒子里有zoopeeker实例和kafka broker进程,另一个EC2盒子里有KDC。两者都在同一个安全组上,