apache的es的原理 ES 一 架構及原理

2021-10-13 06:15:25 字數 1508 閱讀 7014

啟用乙個既沒有資料,也沒有索引的單一節點, 如下圖

在空的單節點集群中上建立乙個叫做 blogs 的索引,設定3個主分片和一組從分片(每個主分片有乙個從分片對應),**如下:

put /blogs

集群示例圖如下: (此時集群健康狀態為: yellow   三個從分片還沒有被分配到節點上)

主分片(primary shards) 啟動並且執行了,這時集群已經可以成功的處理任意請求,但是 從分片(replica shards) 沒有完全被啟用。事實上,當前這三個從分片都處於 unassigned(未分配)的狀態,它們還未被分配到節點上。在同乙個節點上儲存相同的資料副本是沒有必要的,如果這個節點故障了,就等同於所有的資料副本也丟失了

啟動第二個節點,配置第二個節點與第乙個節點的 cluster.name 相同(./config/elasticsearch.yml檔案中的配置),它就能自動發現並加入到第乙個節點的集群中,如下圖:

cluster-health 的狀態為 green,這意味著所有的6個分片(三個主分片和三個從分片)都已啟用,文件在主節點和從節點上都能被檢索

隨著應用需求的增長,啟動第三個節點進行橫向擴充套件,集群內會自動重組,如圖

在 node 1 和 node 2 中分別會有乙個分片被移動到 node 3 上,這樣一來,每個節點上就都只有兩個分片了。這意味著每個節點的硬體資源(cpu、ram、i/o)被更少的分片共享,所以每個分片就會有更好的效能表現

一共有6個分片(3個主分片和3個從分片),因此最多可以擴充套件到6個節點,每個節點上有乙個分片,這樣每個分片都可以使用到所在節點100%的資源了

從分片的數量可以在執行的集群中動態的調整,這樣我們就可以根據實際需求擴充套件或者縮小規模。接下來,我們來增加一下從分片組的數量:

put /blogs/_settings

現在 blogs 的索引總共有9個分片:3個主分片和6個從分片, 又會變成乙個節點乙個分片的狀態了,最終得到了三倍搜尋效能的三節點集群

說明:僅僅是在同樣數量的節點上增加從分片的數量是根本不能提高效能的,因為每個分片都有訪問系統資源的許可權。你需要公升級硬體配置以提高吞吐量。

嘗試一下,把第乙個節點殺掉,我們的集群就會如下圖所示:

被殺掉的節點是主節點,主分片 1 和 2 在我們殺掉 node 1 後就丟失了,我們的索引在丟失主節點的時候是不能正常工作的。如果我們在這個時候檢查集群健康狀態,將會顯示 red:存在不可用的主節點

而為了集群的正常工作必須需要乙個主節點,所以首先進行的程序就是從各節點中選擇了乙個新的主節點:node 2

新的主節點所完成的第一件事情就是將這些在 node 2 和 node 3 上的從分片提公升為主分片,然後集群的健康狀態就變回至 yellow。這個提公升的程序是瞬間完成了,就好像按了一下開關

如果再次殺掉 node 2 的時候,我們的程式依舊可以在沒有丟失任何資料的情況下執行,因為 node 3 中依舊擁有每個分片的備份

如果我們重啟 node 1,集群就能夠重新分配丟失的從分片,這樣結果就會與三節點兩從集群一致。如果 node 1 依舊還有舊節點的內容,系統會嘗試重新利用他們,並只會複製在故障期間的變更資料

ES的集群原理

文章 自 檢視集群健康狀況 url get cat health 1 es基本概念名詞 cluster 代表乙個集群,集群中有多個節點,其中有乙個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於集群內部來說的。es的乙個概念就是去中心化,字面上理解就是無中心節點,這是對於集群外部來說的,因為...

ES 004 ES工作原理

儲存資料shard hash routing number of primary shards routing是可變值,支援自定義,預設是文件 id hash函式生成資料,經過求餘演算法得到餘數,這個餘數就是分片的位置如何水平擴容put blogs settings elk 優勢 分布式實時檔案儲存...

ES路由原理

1 路由演算法 shard hash routing number of primary shards 例如 乙個index有3個primary shard p0,p1,p2每次增刪改修改乙個document的時候,都會帶過來乙個routing number,預設這個就是document 的 id。...