elasticsearch 集群初識篇(四)

2021-10-06 20:37:08 字數 3111 閱讀 9064

elasticsearch 的集群監控資訊中包含了許多的統計資料,其中最為重要的一項就是 集群健康 , 它在 status 欄位中展示為 green 、 yellow 或者 red 。

get /_cluster/health
status 字段指示著當前集群在總體上是否工作正常。它的三種顏色含義如下:

我們往 elasticsearch 新增資料時需要用到索引--> 儲存相關資料的地方。 索引實際上是指向乙個或者多個物理分片的 邏輯命名空間 。

乙個 分片 是乙個底層的 工作單元 ,它僅儲存了全部資料中的一部分。 在分片內部機制中,我們將詳細介紹分片是如何工作的,而現在我們只需知道乙個分片是乙個 lucene 的例項,以及它本身就是乙個完整的搜尋引擎。 我們的文件被儲存和索引到分片內,但是應用程式是直接與索引而不是與分片進行互動。

elasticsearch 是利用分片將資料分發到集群內各處的。分片是資料的容器,文件儲存在分片內,分片又被分配到集群內的各個節點裡。 當你的集群規模擴大或者縮小時, elasticsearch 會自動的在各節點中遷移分片,使得資料仍然均勻分布在集群裡。

乙個分片可以是分片或者副本分片。 索引內任意乙個文件都歸屬於乙個主分片,所以主分片的數目決定著索引能夠儲存的最大資料量。

乙個副本分片只是乙個主分片的拷貝。副本分片作為硬體故障時保護資料不丟失的冗餘備份,並為搜尋和返回文件等讀操作提供服務。

在索引建立的時候就已經確定了主分片數,但是副本分片數可以隨時修改。

讓我們在包含乙個空節點的集群內建立名為 blogs 的索引。 索引在預設情況下會被分配5個主分片, 但是為了演示目的,我們將分配3個主分片和乙份副本(每個主分片擁有乙個副本分片):

put /blogs

}

如果我們現在檢視集群健康,我們將看到如下內容:

集群的健康狀況為 yellow 則表示全部 主 分片都正常執行(集群可以正常服務所有請求),但是 副本 分片沒有全部處在正常狀態。 實際上,所有3個副本分片都是 unassigned —— 它們都沒有被分配到任何節點。 在同乙個節點上既儲存原始資料又儲存副本是沒有意義的,因為一旦失去了那個節點,我們也將丟失該節點上的所有副本資料。

當集群中只有乙個節點在執行時,意味著會有乙個單點故障問題——沒有冗餘。 幸運的是,我們只需再啟動乙個節點即可防止資料丟失。

啟動第二個節點

為了測試第二個節點啟動後的情況,你可以在同乙個目錄內,完全依照啟動第乙個節點的方式來啟動乙個新節點。多個節點可以共享同乙個目錄。

當你在同一臺機器上啟動了第二個節點時,只要它和第乙個節點有同樣的 cluster.name 配置,它就會自動發現集群並加入到其中。 但是在不同機器上啟動節點的時候,為了加入到同一集群,你需要配置乙個可連線到的單播主機列表。 詳細資訊請檢視最好使用單播代替組播

如果啟動了第二個節點,我們的集群將會如figure 3, 「擁有兩個節點的集群——所有主分片和副本分片都已被分配」。

所有新近被索引的文件都將會儲存在主分片上,然後被並行的複製到對應的副本分片上。這就保證了我們既可以從主分片又可以從副本分片上獲取資料。

cluster-health 現在展示的狀態為 green ,這表示所有6個分片(包括3個主分片和3個副本分片)都在正常執行。

擁有三個節點的集群——為了分散負載而對分片進行重新分配,如下圖:

結論:node 1 和 node 2 上各有乙個分片被遷移到了新的 node 3 節點,現在每個節點上都擁有2個分片,而不是之前的3個。 這表示每個節點的硬體資源(cpu, ram, i/o)將被更少的分片所共享,每個分片的效能將會得到提公升。

分片是乙個功能完整的搜尋引擎,它擁有使用乙個節點上的所有資源的能力。 我們這個擁有6個分片(3個主分片和3個副本分片)的索引可以最大擴容到6個節點,每個節點上存在乙個分片,並且每個分片擁有所在節點的全部資源。

如果我們想要擴容超過6個節點怎麼辦呢?

主分片的數目在索引建立時就已經確定了下來。實際上,這個數目定義了這個索引能夠 儲存 的最大資料量。(實際大小取決於你的資料、硬體和使用場景。) 但是,讀操作——搜尋和返回資料——可以同時被主分片 或 副本分片所處理,所以當你擁有越多的副本分片時,也將擁有越高的吞吐量。

在執行中的集群上是可以動態調整副本分片數目的,我們可以按需伸縮集群。讓我們把副本數從預設的 1 增加到 2 :

put /blogs/_settings

關閉第乙個節點,這時集群的狀態圖可描述為:

我們關閉的節點是乙個主節點。而集群必須擁有乙個主節點來保證正常工作,所以發生的第一件事情就是選舉乙個新的主節點: node 2 。

在我們關閉 node 1 的同時也失去了主分片 1 和 2 ,並且在缺失主分片的時候索引也不能正常工作。 如果此時來檢查集群的狀況,我們看到的狀態將會為 red :不是所有主分片都在正常工作。

幸運的是,在其它節點上存在著這兩個主分片的完整副本, 所以新的主節點立即將這些分片在 node 2 和 node 3 上對應的副本分片提公升為主分片, 此時集群的狀態將會為 yellow 。 這個提公升主分片的過程是瞬間發生的,如同按下乙個開關一般。

為什麼我們集群狀態是 yellow 而不是 green 呢? 雖然我們擁有所有的三個主分片,但是同時設定了每個主分片需要對應2份副本分片,而此時只存在乙份副本分片。 所以集群不能為 green 的狀態,不過我們不必過於擔心:如果我們同樣關閉了 node 2 ,我們的程式 依然 可以保持在不丟任何資料的情況下執行,因為 node 3 為每乙個分片都保留著乙份副本。

如果我們重新啟動 node 1 ,集群可以將缺失的副本分片再次進行分配,那麼集群的狀態也將引數 number_of_replicas 調大到 2。 如果 node 1 依然擁有著之前的分片,它將嘗試去重用它們,同時僅從主分片複製發生了修改的資料檔案。

構建elasticsearch集群

初始化系統環境 在 etc security limits.conf 增加如下兩行 elasticsearch soft nofile 4096 elasticsearch hard nofile 65536 curl o elasticsearch 解壓軟體包 tar xvf elasticsea...

Elasticsearch集群搭建

1 主節點 儲存資料資訊 meta data 元資料 描述資料的資料,客戶端通過主節點獲取真正的資料位置,到資料節點datanode獲取資料分片 2 資料節點 只負責資料的讀和寫 3 負載均衡節點 當主節點連線的客戶端過多,可以引入負載均衡節點 分擔併發,既不是主節點,也不是資料節點 搭建另外兩台e...

Elasticsearch集群搭建

1 分發 scp 2.修改每一台機器的配置檔案 a 集群的名字 cluster.name my es b 節點名字 node.name node 1 c es儲存資料的路徑 path.data home zpark esdata data d es生成log資訊的路徑 path.logs home ...