干货 | Elasticsearch 8.X 节点角色划分深入详解
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節點
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 節點 | 轉換輸入數據 | 低 | 中 | 高 | 中 |
| 機器學習節點 | 機器學習 | 低 | 極高 | 極高 | 中 |
| 協調節點 | 請求轉發和合并檢索結果 | 低 | 中 | 中 | 中 |
你的生產環境使用了什么版本的集群?如何做的節點角色的劃分?歡迎留言討論。
參考
https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
https://www.elastic.co/cn/blog/whats-new-elasticsearch-7-11-0-schema-on-read-is-here
探究 | Elasticsearch集群規模和容量規劃的底層邏輯
推薦
1、重磅 | 死磕 Elasticsearch 方法論認知清單(2021年國慶更新版)
2、如何從0到1打磨一門 Elasticsearch 線上直播課?(口碑不錯)
3、如何系統的學習 Elasticsearch ?
4、干貨 | Elasticsearch 索引生命周期管理 ILM 實戰指南
更短時間更快習得更多干貨!
和全球?1600+?Elastic 愛好者一起精進!
比同事搶先一步學習進階干貨!
總結
以上是生活随笔為你收集整理的干货 | Elasticsearch 8.X 节点角色划分深入详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google Interview - 数
- 下一篇: 开店没有客流量怎么办?二狗子告诉你