Elasticsearch 分片原理1

2022-08-26 10:30:10 字數 2136 閱讀 8843

elasticsearch版本:6.0

elasticsearch基於lucene,採用倒排索引寫入磁碟,lucene引入了按段搜尋的概念,來動態更新索引。

乙個lucene索引包含乙個提交點和三個短,如圖:

關於索引和分片乙個lucene索引在elasticsearch成為分片,乙個elasticsearch索引是分片的集合。

elasticsearch在索引中搜尋時,它傳送查詢到每乙個屬於索引的分片,然後合併每個分片的結果到乙個全域性的結果集。

按段寫入磁碟的流程如下:

1、新文件的lucene索引到達記憶體快取

2、提交後新的段新增到提交點,並清空記憶體快取

3、在從記憶體快取提交到磁碟的過程中,文件會先被寫入到檔案系統快取,這一步的代價比重新整理到磁碟的代價低,而在檔案快取就可以像其他檔案一樣被開啟讀取。而lucene在此時就可以對這個未完成提交的文件進行搜尋。

elasticsearch中,寫入和開啟乙個新段的過程叫refresh,預設情況每個分片每秒自動重新整理一次,所以稱elasticsearch是近實時搜尋的。文件的變化並不是立即對搜尋可見,但會在一秒之內變為可見。

重新整理時間可以手動指定

post /_refresh 重新整理(refresh)所有的索引。

post /blogs/_refresh 只重新整理(refresh) blogs 索引。

關閉或者設定重新整理時間

put /my_logs/_settings
put /my_logs/_settings
為了保證elasticsearch的可靠性,增加了translog事務日誌,每次elasticsearch的操作均進行了日誌記錄。

1.乙個文件被索引之後,就會被新增到記憶體緩衝區,並且 追加到了 translog

2. 重新整理(refresh)完成後, 快取被清空但是事務日誌不會

3.這個程序繼續工作,更多的文件被新增到記憶體緩衝區和追加到事務日誌

4. 每隔一段時間--例如 translog 變得越來越大--索引被重新整理(flush);乙個新的 translog 被建立,並且乙個全量提交被執行,並且事務日誌被清空

這個執行乙個提交並且截斷 translog 的行為在 elasticsearch 被稱作一次 flush 。 分片每30分鐘被自動重新整理(flush),或者在 translog 太大的時候也會重新整理。

段合併

elasticsearch通過後台進行段合併,合併時會將舊的已刪除的文件從檔案系統清除。

1、兩個提交了的段和乙個未提交的段正在被合併到乙個更大的段

2、一旦合併結束,老的段被刪除

elasticsearch 分片選擇

相信讀者建立index的時候,一定曾經糾結過分片數應該分配多少。筆者從實用角度來講述一下index分片數量的選擇,index分片數量嚴格來說不能過多,也不能過少,還要兼顧分片平衡以及集群壓力。現在從一些角度來講主分片數應該怎麼選擇。分析 若乙個es集群的節點數為3,則考慮業務擴充套件 無論是容量還是...

ElasticSearch分片詳解

1.我們能夠傳送請求給集群中任意乙個節點。每個節點都有能力處理任意請求。每個節點都知道任意文件所在的節點 2.新建索引和刪除請求都是寫操作,它們必須在主分片上成功完成才能賦值到相關的複製分片上 3.在主分片和複製分片上成功新建 索引或刪除乙個文件必要的順序步驟 1 客戶端給node1 傳送新建 索引...

控制Elasticsearch分片和副本的分配

es集群中索引可能由多個分片構成,並且每個分片可以擁有多個副本。通過將乙個單獨的索引分為多個分片,我們可以處理不能在乙個單一的伺服器上面執行的大型索引,簡單的說就是索引的大小過大,導致效率問題。不能執行的原因可能是記憶體也可能是儲存。由於每個分片可以有多個副本,通過將副本分配到多個伺服器,可以提高查...