假设我有5个数据节点。然后,我保存一个Person
文档。现在有几个问题:
如何找到保存的文档到哪个节点?
将一个Person
文档保存到具有两个副本的节点后,如何查询此Person
信息并获取信息,得出的答案来自哪个副本/节点?
如何检查一个节点的两个副本中文档的可用速度?
编辑
用例如下:一般情况下,如何在主分片中写入新数据但数据尚未与副本同步的情况下确保一致性。同时,正在查询副本以获取在查询副本时仅存在于主分片上的新数据。我几乎想知道分布式阅读文档最后一段中所描述的情况一致性的细节===>,但是另一方面,该文档说到查询阶段,每个主数据库和副本数据库都被查询并建立优先级队列 然后将它们合并,因此,将基于协调节点上所有优先级队列中构建的全局排序结果集,将主要分片的结果形式包括在合并队列中。
换一种说法。我想确保我的分布式ES集群中的数据一致性。现在,我要测试是否会发生以下情况。假设我有一个包含5个节点的群集,并且数据仅放置到一个节点(例如,node2
使用主分片)。在数据有时间复制到其余副本之前,我查询了这个新数据node3
,理论上应该对此数据进行复制,但是node2
在更改后还没有得到它。因此,在这种情况下,node3
即使已将新数据放置到“ node2”中,但针对请求新数据的查询也不会返回新数据。
node3
?如何找到保存的文档到哪个节点?
更正确的问题是将文档保存到哪个分片上,因为分片可以在群集中移动。您可以使用_search_shards
API并提供文档的ID:
GET /index/type/_search_shards?routing=4
将一个Person文档保存到具有两个副本的节点后,如何查询此Person并获取信息,得出的答案来自哪个副本/节点?
我认为您不容易做到。您可以降低慢速日志的阈值,并fetch
在搜索请求的特定阶段检查慢速日志文件,以查看某个节点是否记录了该日志。如果您fetch
在慢日志中找到,则意味着结果(如果仅一个文档)来自该节点的分片。
如何检查一个节点的两个副本中文档的可用速度?
您从运行索引操作获得的响应时间是包括对碎片的所有副本(主副本及其副本)进行索引的响应时间:https : //www.elastic.co/guide/en/elasticsearch/guide/ current / distrib-write.html#distrib-write
如果发生这种情况,我该如何控制复制阶段/状态,以便知道复制是否完成?
我认为您可以尝试使用consistency: all
(https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/docs-index_.html#index-consistency),这意味着只有所有其他分片都可以返回索引操作副本已将文档编入索引。但是我认为这不会停止在正确的时间对其中一个副本进行的查询,而该副本仍在从主索引编制文档的过程中。
我怎么知道副本是否与主分片一致,这很困难。
我认为,仅通过查询分片的那两个副本上的数据,您就可以查看副本是否未同步。
如果我无法控制此复制流程和数据一致性,如何消除潜在的不一致
如果您发现不一致,我相信唯一的选择是将副本计数设置为0(删除副本),然后再返回到初始值。基本上,从主数据库重新创建副本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句