08 es 進一步了解 b ES 核心概念

2021-09-29 15:09:41 字數 1146 閱讀 8781

副本就是對分片的 copy,每個主分片都有乙個或多個副本分片,當主分片異常時,副本可以提供資料的查詢等操作。

主分片和對應的副本分片是不會在同乙個節點上的,所以副本分片數的最大值是 n-1(其中 n 為節點數)。

對文件的新建、索引和刪除請求都是寫操作,必須在主分片上面完成之後才能被複製到相關的副本分片。

es 為了提高寫入的能力這個過程是併發寫的,同時為了解決併發寫的過程中資料衝突的問題,es 通過樂觀鎖的方式控制,每個文件都有乙個 _version (版本)號,當文件被修改時版本號遞增。

一旦所有的副本分片都報告寫成功才會向協調節點報告成功,協調節點向客戶端報告成功。

從上圖可以看出為了達到高可用,master 節點會避免將主分片和副本分片放在同乙個節點上。

假設這時節點 node1 服務宕機了或者網路不可用了,那麼主節點上主分片 s0 也就不可用了。

幸運的是還存在另外兩個節點能正常工作,這時 es 會重新選舉新的主節點,而且這兩個節點上存在我們所需要的 s0 的所有資料。

我們會將 s0 的副本分片提公升為主分片,這個提公升主分片的過程是瞬間發生的。此時集群的狀態將會為 yellow。

為什麼我們集群狀態是 yellow 而不是 green 呢?雖然我們擁有所有的 2 個主分片,但是同時設定了每個主分片需要對應兩份副本分片,而此時只存在乙份副本分片。所以集群不能為 green 的狀態。

如果我們同樣關閉了 node2 ,我們的程式依然可以保持在不丟失任何資料的情況下執行,因為 node3 為每乙個分片都保留著乙份副本。

如果我們重新啟動 node1 ,集群可以將缺失的副本分片再次進行分配,那麼集群的狀態又將恢復到原來的正常狀態。

如果 node1 依然擁有著之前的分片,它將嘗試去重用它們,只不過這時 node1 節點上的分片不再是主分片而是副本分片了,如果期間有更改的資料只需要從主分片上覆制修改的資料檔案即可。

小結:將資料分片是為了提高可處理資料的容量和易於進行水平擴充套件,為分片做副本是為了提高集群的穩定性和提高併發量。

副本是乘法,越多消耗越大,但也越保險。分片是除法,分片越多,單分片資料就越少也越分散。

副本越多,集群的可用性就越高,但是由於每個分片都相當於乙個 lucene 的索引檔案,會占用一定的檔案控制代碼、記憶體及 cpu。

並且分片間的資料同步也會占用一定的網路頻寬,所以索引的分片數和副本數也不是越多越好。

08 es 進一步了解 b ES 核心概念

es 的集群搭建不需要依賴第三方協調管理元件,自身內部就實現了集群的管理功能。es 集群由乙個或多個 elasticsearch 節點組成,每個節點配置相同的 cluster.name 即可加入集群,預設值為 elasticsearch 確保不同的環境中使用不同的集群名稱,否則最終會導致節點加入錯誤...

08 es 進一步了解 b ES 核心概念

副本就是對分片的 copy,每個主分片都有乙個或多個副本分片,當主分片異常時,副本可以提供資料的查詢等操作。主分片和對應的副本分片是不會在同乙個節點上的,所以副本分片數的最大值是 n 1 其中 n 為節點數 對文件的新建 索引和刪除請求都是寫操作,必須在主分片上面完成之後才能被複製到相關的副本分片。...

進一步了解Makefile

mkdir p add src 一層一層建立目錄。touch add makefile 建立 makefile include 目錄中存放標頭檔案。scripts 存放指令碼檔案。存放方式 按照核心管理原始碼來管理。為什麼學習makefile?編譯大型專案 讀懂別人的開源 找到程式入口 看專案的順序...