乾貨 | Elasticsearch 8.X 節點角色劃分深入詳解

語言: CN / TW / HK

0、問題引出

如果你的 Elasticsearch 叢集是 7.9 之前的版本,在配置節點的時候,只會涉及節點型別的概念。我相信大家會對下面的概念比較熟悉:

  • 主節點

  • 資料節點

  • 協調節點

  • Ingest 節點

  • 冷熱叢集架構

......

Elasticsearch 7.9 版本引入了節點角色的概念。最近社群小夥伴關於節點角色提了不少問題,列舉如下:

  • Q1:請問 Nginx + ES Coordinate + ES Master + ES Node 如何安裝配置呢?是否安裝一樣,只需更改節點角色即可?

  • Q2:ES部署上,node.role都是mdi和 node.role區分m、d、i ,在部署上各有什麼優勢?更推薦用哪種?

  • Q3:有 ES 7.x 的叢集角色如圖,請問在寫入海量資料時,應該連線什麼角色的節點寫入?專用協調節點還是資料節點?

  • Q4:role的配置,加上這些data_hot, data_warm, data_cold 和自定義的attr屬性有區別嗎?

  • Q5:誰能解釋一下es的角色 data data_content data_hot/warm/cold他們直接的關係?

  • Q6:請問 ES 7.10 的 data_content  角色是個什麼樣的存在?和協調節點什麼區別?

帶著這些問題,我們開始 Elasticsearch 節點角色的解讀。

1、什麼是 Elasticsearch 節點角色?

Elasticsearch 7.9 之前的版本中的節點型別:資料節點、協調節點、候選主節點、ingest 節點,在 Elasticsearch 7.9 以及之後 版本中有了升級,升級了什麼呢?

節點型別升級為節點角色(Node roles)。節點角色分的很細:資料節點角色、主節點角色、ingest節點角色、熱節點角色等。

在 Elasticsearch 叢集中,每個啟動的 Elasticsearch 程序都可以叫做一個節點。叢集中只有一個節點的時候,以  Elasticsearch 8.1.3  版本單節點叢集為例,如果我們不手動設定節點角色,預設節點角色如下“紅框”所示:

GET _cat/nodes?v

# 返回結果
ip          heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
172.21.0.14           70          96   0    0.03    0.03     0.05 cdfhilmrstw *      VM-0-14-centos

當叢集中有多個節點角色的時候,就需要手動設定、配置節點的角色。

節點角色劃分的目的在於:不同角色的節點各司其職,共同確保叢集的功能的穩定和效能的高可用。

如上截圖中的 “ cdfhilmrstw ”,我第一次看到這個串也是一臉懵逼,解釋一下,你就“豁然開朗”。

角色縮寫 英文釋義 中文釋義
c cold node 冷資料節點
d data node 資料節點
f frozen node 冷凍資料節點
h hot node 熱資料節點
i ingest node 資料預處理節點
l machine learning node 機器學習節點
m master-eligible node 候選主節點
r remote cluster client node 遠端節點
s content node 內容資料節點
t transform node 轉換節點
v voting-only node 僅投票節點
w warm node 溫資料節點
coordinating node only 僅協調節點

2、為什麼引入節點角色?節點型別不香嗎?

https://github.com/elastic/elasticsearch/pull/54998

一個新功能的誕生必然是基於早期版本存在bug或者至少使用者體驗差。

節點角色就是基於節點型別配置複雜和使用者體驗差應運而生的。

早期版本如果需要配置僅候選主節點型別,需要的配置(極端情況)如下:

node.data: false
node.ingest: false
node.remote_cluster_client: false
node.ml: false
node.master: true
node.transform: false
node.voting_only: false

這是非常繁瑣的配置,類似我要說我自己是主節點,需要我先說明我不是資料節點、不是 Ingest 預處理節點、不是機器學習節點、不是XXX各種節點.....

而節點角色的出現“革命性”的結局了這個問題,如下所示,只需要說明我是某某某,而不需要費勁巴拉的解釋我不是某某某。

node.roles: [ data, master ]

3、不同角色節點的功能詳解

3.1 主節點(Master-eligible node)

  • 主節點的核心用途:叢集層面的管理,例如建立或刪除索引、跟蹤哪些節點是叢集的一部分,以及決定將哪些分片分配給哪些節點。主節點的path.data 用於儲存叢集元資料資訊,不可缺少。

  • 主節點的重要性:擁有穩定的主節點對於叢集健康非常重要。

和早期版本不同,節點角色劃分後,主節點又被細分為:候選主節點和僅投票主節點。

  • 主節點儲存資料:叢集中每個索引的索引元資料,叢集層面的元資料。

3.1.1 專用候選主節點(Dedicated master-eligible node)

如果叢集規模大、節點多之後,有必要獨立設定專用候選主節點。

專用候選主節點配置:

node.roles: [ master ]

3.1.2 僅投票主節點(Voting-only master-eligible node)

用途:僅投票,不會被選為主節點。

硬體配置可以較專用候選主節點低一些。

僅投票主節點配置:

node.roles: [ master, voting_only ]

注意:master 必不可少。

關於叢集主節點配置,要強調說明如下:

  • 高可用性 (HA) 叢集需要至少三個符合主節點資格的節點;其中至少兩個不是僅投票節點。

  • 即使其中一個節點發生故障,這樣的叢集也將能夠選舉一個主節點。

3.2 資料節點(Data node)

資料節點用途:資料落地儲存、資料增、刪、改、查、搜尋、聚合操作等處理操作。

資料節點硬體配置:CPU 要求高、記憶體要求高、磁碟要求高。

專屬資料節點好處:主節點和資料節點分離,各司其職。

資料節點儲存內容:

  • 分片資料。

  • 每個分片對應的元資料。

  • 叢集層面的元資料,如:setting 和 索引模板。

擁有專用資料節點的主要好處是主角色和資料角色的分離。

資料節點的配置:

node.roles: [ data ]

在 Elastic 多層(tires)冷熱叢集架構體系下,資料節點又可以細分為:

  • 內容資料節點(Content data node)

  • 熱資料節點(Hot data node)

  • 溫資料節點(Warm data node)

  • 冷資料節點(Cold data node)

  • 冷凍資料節點(Frozen data node)

圖片來自:Elastic 官方部落格

3.2.1 內容資料節點

用途:處理寫入和查詢負載,具有較長的資料保留要求。

建議至少設定一個副本,以保證資料的高可用。

不屬於資料流的系統索引或其他索引會自動分配到內容資料節點。

node.roles: [ data_content ]

3.2.2 熱資料節點

用途:儲存最近、最常訪問的時序資料。

推薦使用:SSD 磁碟,至少設定一個副本。

node.roles: [ data_hot ]

3.2.3 溫資料節點

用途:儲存訪問頻次低且很少更新的時序資料。

node.roles: [ data_warm ]

3.2.4 冷資料節點

用途:儲存不經常訪問且通常不更新的時序資料。可儲存可搜尋快照。

node.roles: [ data_cold ]

3.2.5 冷凍資料節點

用途:儲存很少訪問且從不更新的時序資料。

node.roles: [ data_frozen ]

在冷熱叢集架構時序資料ILM 索引生命週期管理的實戰演練環節,驗證發現:

在配置節點角色時,data_hot、data_warm、data_cold  要和 data_content 要一起配置。且 data_hot、data_warm、data_cold 不要和原有的data 節點一起配置了。

如果僅data_hot 不設定 data_content 會導致叢集資料寫入後無法落地。

我的理解:data_hot, data_warm, data_cold 是標識性的節點,實際落地儲存還得靠 data_content 角色。

3.3 資料預處理節點(ingest node)

用途:執行由預處理管道組成的預處理任務。

關於啥是資料的預處理?之前有多篇文章解讀過:

Elasticsearch 預處理沒有奇技淫巧,請先用好這一招!

Elasticsearch的ETL利器——Ingest節點

node.roles: [ ingest ]

3.4 僅協調節點(Coordinating only node)

用途:類似智慧負載均衡器,負責:路由分發請求、聚集搜尋或聚合結果。

注意事項:在一個叢集中新增太多的僅協調節點會增加整個叢集的負擔,因為當選的主節點必須等待來自每個節點的叢集狀態更新的確認。

node.roles: [ ]

空即是“色”,不對,這裡空即是“僅協調節點”。

3.5 遠端節點(Remote-eligible node)

用途:跨叢集檢索或跨叢集複製。

node.roles: [ remote_cluster_client ]

3.6 機器學習節點(Machine learning node)

用途:機器學習,系收費功能。

node.roles: [ ml, remote_cluster_client]

3.7 轉換節點(Transform node)

用途:執行轉換並處理轉換 API 請求。這塊,咱們之前文章沒有涉及。

推薦閱讀:

https://www.elastic.co/guide/en/elasticsearch/reference/current/transform-overview.html

node.roles: [ transform, remote_cluster_client ]

4、回答開篇問題

4.1 Q1:請問 Nginx + ES Coordinate + ES Master + ES Node 如何安裝配置呢?是否安裝一樣,只需更改節點角色即可?

答案:先劃分節點角色。節點不多的話手動one by one 部署(部署好了一個,其他的拷貝後修改角色、ip等就可以),節點非常多的話可以藉助:ansible 等指令碼工具快速部署。

4.2 Q2:ES部署上,node.role都是mdi和 node.role區分m、d、i ,在部署上各有什麼優勢?更推薦用哪種?

答案:本文已介紹。m 代表主節點 master, d 代表資料節點 data, i 代表資料預處理節點 ingest。

4.3 Q3:有 ES 7.x 的叢集角色如圖,請問在寫入海量資料時,應該連線什麼角色的節點寫入?專用協調節點還是資料節點?

答案:看節點規模和節點角色劃分,如果已經有了獨立協調節點,連線獨立協調節點。如果沒有,連線硬體配置高的節點。

4.4 Q4:role的配置,加上這些data_hot, data_warm, data_cold 和自定義的attr屬性有區別嗎?

答案:新版本新特性,有區別,新的方式配置更為簡潔,可讀性強、使用者體驗優。

4.5 Q5:誰能解釋一下es的角色 data data_content data_hot/warm/cold他們直接的關係?

答案:系冷熱叢集架構的資料節點的分層處理機制。相當於早期版本冷熱叢集架構的手動配置節點屬性的部分,高版本做了精細切分,使得資料冷熱叢集管理更為高效。尤其預設遷移(migrate )自動實現機制,之前版本的分片分配策略手動配置變得不再必須:

"allocate" : {
            "include" : {
              "box_type": "hot,warm"
            }
          }

4.6 Q6:請問 ES 7.10 的 data_content  角色是個什麼樣的存在?和協調節點什麼區別?

答案:兩種完全不同的節點。data_content 屬於資料節點,永久儲存資料的地方。而協調節點是用來請求路由分發、結果匯聚處理的。

5、小結

有了節點角色劃分之後,老版本的節點型別配置還是支援的。最早使用節點角色做 ILM 索引生命週期管理還有點不適應,摸索了一小段時間。

但,我們得 擁抱 Elasticsearch 的變化

節點角色的劃分是使用者體驗層面、功能層面的改進,有了它,我們節點劃分會更加明晰,節點用途會更加聚焦、具體。

關於節點角色和硬體配置的關係,也是經常被提問的問題,推薦配置參考:

角色 描述 儲存 記憶體 計算 網路
資料節點 儲存和檢索資料 極高
主節點 管理叢集狀態
Ingest 節點 轉換輸入資料
機器學習節點 機器學習 極高 極高
協調節點 請求轉發和合並檢索結果

你的生產環境使用了什麼版本的叢集?如何做的節點角色的劃分?歡迎留言討論。

參考

推薦

1 、重磅 | 死磕 Elasticsearch 方法論認知清單(2021年國慶更新版)

2 如何從0到1打磨一門 Elasticsearch 線上直播課? (口碑不錯)

3、 如何系統的學習 Elasticsearch ?

4、 乾貨 | Elasticsearch 索引生命週期管理 ILM 實戰指南

短時間 快習得 多幹貨!

和全球  1600+  Elastic 愛好者一起精進!

比同事 搶先 一步學習進階乾貨