2016-08-19 214 views
0

假設我有5個數據節點。然後我保存一份Person文件。現在有多少個問題:ElasticSearch:如何檢查文檔來自/去哪個節點/副本?

  1. 我怎樣才能找到保存到哪個節點的文件?

  2. 將一個Person文檔保存到具有兩個副本的節點後,如何查詢此Person並獲取信息哪個副本/節點得到的答案來自哪裏?

  3. 如何檢查文檔在兩個副本節點中的可用速度?

EDIT

用例是如下: 通常如何保證萬一一致性當主碎片有寫入新的數據,但數據尚未與同步複製品。與此同時,正在查詢複製副本中查詢副本時僅存在於主碎片中的新數據。差不多我想知道詳情的情況一致的是,從另一方面here the doc says about query phase每個主和副的查詢,並建立優先級隊列被後來合併在最後一段of the distributed read documentation ===>描述,因此本根據協調節點上所有優先級隊列中的全局排序結果集構建合併隊列中的結果表單主分片。

  • 問X所以從主碎片獨家文檔在返回搜索與否的情況下,它沒有被複制到其餘的副本?

換句話說, 我想確保整個分佈式ES羣集的數據一致性。現在我想測試下面的情況是否可以發生。比方說,我有一個有5個節點的集羣,數據只能放到一個節點上(例如,帶有主分片的node2)。在數據有時間複製到剩餘副本之前,我得到了這個新數據朝node3的查詢,這在理論上應該有數據的副本,但在node2發生變化後還沒有得到它。因此,在這種情況下,查詢承諾朝node3請求新數據即使已被放入'node2'也不會返回新數據。

  • 問題A)如果這件事會發生如何控制複製 階段/狀態,這樣我可以告訴大家,如果複製完成?
  • 問題B)如何判斷副本是否與主要碎片一致,以及它處於何種狀態(副本的數據與主要碎片一致或不一致)?
  • 問題C)如果我無法控制此複製流和數據的一致性,如何消除針對node3提交的查詢 的潛在不一致性?
  • 問題D)我如何觀察將文檔添加到主分片並將其保存在副本分片中的行爲(例如,是否可以減慢/自定義複製時間,或者是否可以通過其他方式測試此行爲)?
+0

出於好奇,請問爲什麼您對這些底層細節非常關心?您的需求背後有什麼用途? – Val

+0

嗯,我只是想測試如果兩個節點將用於查詢可能會發生什麼。如果來自'node1'的文檔尚未處於'node2',但正在查詢文檔的「node2」,會發生什麼情況? – mCs

回答

1

如何找到保存到哪個節點的文件?

更正確的問題是文檔保存在哪個分片上,因爲分片可以在集羣中移動。你也可以使用_search_shards API,並提供該文件的ID:

GET /index/type/_search_shards?routing=4 

保存一個個人文檔到一個節點有兩個副本我怎麼可以查詢這個人後,並得到信息,其副本/節點不由此產生的答案來自?

我認爲你不能輕易做到這一點。您可以降低slowlogs的閾值,並檢查搜索請求的特定fetch階段的緩慢日誌文件,以查看某個節點是否記錄該階段。如果您發現緩存日誌中的fetch將意味着結果(如果它只有一個文檔)來自該節點的分片。

如何檢查文檔在兩個副本節點中的可用速度?

的響應時間,你從運行索引操作得到的回覆是,包括對碎片的所有副本索引的一個(主及其副本):https://www.elastic.co/guide/en/elasticsearch/guide/current/distrib-write.html#distrib-write

如果這件事會發生怎麼樣我可以控制複製階段/狀態,以便我可以判斷複製是否完成?

認爲你可以嘗試使用consistency: allhttps://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#index-consistency),這意味着,只有當所有其他碎片副本已索引的文檔的索引操作的回報。但我不認爲這會停止在正確的時間對其中一個副本進行的查詢,這些副本仍處於從主數據庫索引文檔的過程中。

如何判斷複製副本是否與主要碎片一致或不太困難。

我認爲只有通過查詢分片的這兩個副本上的數據,纔可以看到副本是否不一致。

如果如果發現不一致,我相信唯一的選擇是設置你的副本數爲0,我無法控制這種複製流程和數據的一致性我怎麼能消除潛在的不一致性

(刪除副本),然後回到初始值。基本上,從主要重新創建副本。

+0

另外值得注意的是,如果@mCs使用路由來保存個人文檔,他會確切知道文檔保存在哪個分片上。 – Val

+0

因此,如果我在'node1'上放置一個'document1',並且它的副本還沒有在'node2'上,如果我想爲'document1'查詢'node2',會發生什麼? – mCs

+0

當一個文檔可用於搜索時,你可以保證它在所有分片上都可用(糾正我,如果我錯了,@AndreiStefan) – Val

相關問題