干貨 | Elasticsearch 8.X 節(jié)點(diǎn)角色劃分深入詳解
0、問(wèn)題引出
如果你的 Elasticsearch 集群是 7.9 之前的版本,在配置節(jié)點(diǎn)的時(shí)候,只會(huì)涉及節(jié)點(diǎn)類(lèi)型的概念。我相信大家會(huì)對(duì)下面的概念比較熟悉:
主節(jié)點(diǎn) 數(shù)據(jù)節(jié)點(diǎn) 協(xié)調(diào)節(jié)點(diǎn) Ingest 節(jié)點(diǎn) 冷熱集群架構(gòu)
......
Elasticsearch 7.9 版本引入了節(jié)點(diǎn)角色的概念。最近社群小伙伴關(guān)于節(jié)點(diǎn)角色提了不少問(wèn)題,列舉如下:
Q1:請(qǐng)問(wèn) Nginx + ES Coordinate + ES Master + ES Node 如何安裝配置呢?是否安裝一樣,只需更改節(jié)點(diǎn)角色即可? Q2:ES部署上,node.role都是mdi和 node.role區(qū)分m、d、i ,在部署上各有什么優(yōu)勢(shì)?更推薦用哪種? Q3:有 ES 7.x 的集群角色如圖,請(qǐng)問(wèn)在寫(xiě)入海量數(shù)據(jù)時(shí),應(yīng)該連接什么角色的節(jié)點(diǎn)寫(xiě)入?專(zhuān)用協(xié)調(diào)節(jié)點(diǎn)還是數(shù)據(jù)節(jié)點(diǎn)? Q4:role的配置,加上這些data_hot, data_warm, data_cold 和自定義的attr屬性有區(qū)別嗎? Q5:誰(shuí)能解釋一下es的角色 data data_content data_hot/warm/cold他們直接的關(guān)系? Q6:請(qǐng)問(wèn) ES 7.10 的 data_content ?角色是個(gè)什么樣的存在?和協(xié)調(diào)節(jié)點(diǎn)什么區(qū)別?
帶著這些問(wèn)題,我們開(kāi)始 Elasticsearch 節(jié)點(diǎn)角色的解讀。
1、什么是 Elasticsearch 節(jié)點(diǎn)角色?

Elasticsearch 7.9 之前的版本中的節(jié)點(diǎn)類(lèi)型:數(shù)據(jù)節(jié)點(diǎn)、協(xié)調(diào)節(jié)點(diǎn)、候選主節(jié)點(diǎn)、ingest 節(jié)點(diǎn),在 Elasticsearch 7.9 以及之后 版本中有了升級(jí),升級(jí)了什么呢?
節(jié)點(diǎn)類(lèi)型升級(jí)為節(jié)點(diǎn)角色(Node roles)。節(jié)點(diǎn)角色分的很細(xì):數(shù)據(jù)節(jié)點(diǎn)角色、主節(jié)點(diǎn)角色、ingest節(jié)點(diǎn)角色、熱節(jié)點(diǎn)角色等。
在 Elasticsearch 集群中,每個(gè)啟動(dòng)的 Elasticsearch 進(jìn)程都可以叫做一個(gè)節(jié)點(diǎn)。集群中只有一個(gè)節(jié)點(diǎn)的時(shí)候,以?Elasticsearch 8.1.3?版本單節(jié)點(diǎn)集群為例,如果我們不手動(dòng)設(shè)置節(jié)點(diǎn)角色,默認(rèn)節(jié)點(diǎn)角色如下“紅框”所示:

GET?_cat/nodes?v
#?返回結(jié)果
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
當(dāng)集群中有多個(gè)節(jié)點(diǎn)角色的時(shí)候,就需要手動(dòng)設(shè)定、配置節(jié)點(diǎn)的角色。
節(jié)點(diǎn)角色劃分的目的在于:不同角色的節(jié)點(diǎn)各司其職,共同確保集群的功能的穩(wěn)定和性能的高可用。
如上截圖中的 “cdfhilmrstw”,我第一次看到這個(gè)串也是一臉懵逼,解釋一下,你就“豁然開(kāi)朗”。
| 角色縮寫(xiě) | 英文釋義 | 中文釋義 |
|---|---|---|
| c | cold node | 冷數(shù)據(jù)節(jié)點(diǎn) |
| d | data node | 數(shù)據(jù)節(jié)點(diǎn) |
| f | frozen node | 冷凍數(shù)據(jù)節(jié)點(diǎn) |
| h | hot node | 熱數(shù)據(jù)節(jié)點(diǎn) |
| i | ingest node | 數(shù)據(jù)預(yù)處理節(jié)點(diǎn) |
| l | machine learning node | 機(jī)器學(xué)習(xí)節(jié)點(diǎn) |
| m | master-eligible node | 候選主節(jié)點(diǎn) |
| r | remote cluster client node | 遠(yuǎn)程節(jié)點(diǎn) |
| s | content node | 內(nèi)容數(shù)據(jù)節(jié)點(diǎn) |
| t | transform node | 轉(zhuǎn)換節(jié)點(diǎn) |
| v | voting-only node | 僅投票節(jié)點(diǎn) |
| w | warm node | 溫?cái)?shù)據(jù)節(jié)點(diǎn) |
| 空 | coordinating node only | 僅協(xié)調(diào)節(jié)點(diǎn) |
2、為什么引入節(jié)點(diǎn)角色?節(jié)點(diǎn)類(lèi)型不香嗎?
https://github.com/elastic/elasticsearch/pull/54998
一個(gè)新功能的誕生必然是基于早期版本存在bug或者至少用戶(hù)體驗(yàn)差。
節(jié)點(diǎn)角色就是基于節(jié)點(diǎn)類(lèi)型配置復(fù)雜和用戶(hù)體驗(yàn)差應(yīng)運(yùn)而生的。
早期版本如果需要配置僅候選主節(jié)點(diǎn)類(lèi)型,需要的配置(極端情況)如下:
node.data:?false
node.ingest:?false
node.remote_cluster_client:?false
node.ml:?false
node.master:?true
node.transform:?false
node.voting_only:?false
這是非常繁瑣的配置,類(lèi)似我要說(shuō)我自己是主節(jié)點(diǎn),需要我先說(shuō)明我不是數(shù)據(jù)節(jié)點(diǎn)、不是 Ingest 預(yù)處理節(jié)點(diǎn)、不是機(jī)器學(xué)習(xí)節(jié)點(diǎn)、不是XXX各種節(jié)點(diǎn).....

而節(jié)點(diǎn)角色的出現(xiàn)“革命性”的結(jié)局了這個(gè)問(wèn)題,如下所示,只需要說(shuō)明我是某某某,而不需要費(fèi)勁巴拉的解釋我不是某某某。
node.roles:?[?data,?master?]
3、不同角色節(jié)點(diǎn)的功能詳解
3.1 主節(jié)點(diǎn)(Master-eligible node)
主節(jié)點(diǎn)的核心用途:集群層面的管理,例如創(chuàng)建或刪除索引、跟蹤哪些節(jié)點(diǎn)是集群的一部分,以及決定將哪些分片分配給哪些節(jié)點(diǎn)。主節(jié)點(diǎn)的path.data 用于存儲(chǔ)集群元數(shù)據(jù)信息,不可缺少。
主節(jié)點(diǎn)的重要性:擁有穩(wěn)定的主節(jié)點(diǎn)對(duì)于集群健康非常重要。
和早期版本不同,節(jié)點(diǎn)角色劃分后,主節(jié)點(diǎn)又被細(xì)分為:候選主節(jié)點(diǎn)和僅投票主節(jié)點(diǎn)。
主節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù):集群中每個(gè)索引的索引元數(shù)據(jù),集群層面的元數(shù)據(jù)。
3.1.1 專(zhuān)用候選主節(jié)點(diǎn)(Dedicated master-eligible node)
如果集群規(guī)模大、節(jié)點(diǎn)多之后,有必要獨(dú)立設(shè)置專(zhuān)用候選主節(jié)點(diǎn)。
專(zhuān)用候選主節(jié)點(diǎn)配置:
node.roles:?[?master?]
3.1.2 僅投票主節(jié)點(diǎn)(Voting-only master-eligible node)
用途:僅投票,不會(huì)被選為主節(jié)點(diǎn)。
硬件配置可以較專(zhuān)用候選主節(jié)點(diǎn)低一些。
僅投票主節(jié)點(diǎn)配置:
node.roles:?[?master,?voting_only?]
注意:master 必不可少。
關(guān)于集群主節(jié)點(diǎn)配置,要強(qiáng)調(diào)說(shuō)明如下:
高可用性 (HA) 集群需要至少三個(gè)符合主節(jié)點(diǎn)資格的節(jié)點(diǎn);其中至少兩個(gè)不是僅投票節(jié)點(diǎn)。 即使其中一個(gè)節(jié)點(diǎn)發(fā)生故障,這樣的集群也將能夠選舉一個(gè)主節(jié)點(diǎn)。
3.2 數(shù)據(jù)節(jié)點(diǎn)(Data node)
數(shù)據(jù)節(jié)點(diǎn)用途:數(shù)據(jù)落地存儲(chǔ)、數(shù)據(jù)增、刪、改、查、搜索、聚合操作等處理操作。
數(shù)據(jù)節(jié)點(diǎn)硬件配置:CPU 要求高、內(nèi)存要求高、磁盤(pán)要求高。
專(zhuān)屬數(shù)據(jù)節(jié)點(diǎn)好處:主節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)分離,各司其職。
數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)內(nèi)容:
分片數(shù)據(jù)。 每個(gè)分片對(duì)應(yīng)的元數(shù)據(jù)。 集群層面的元數(shù)據(jù),如:setting 和 索引模板。
擁有專(zhuān)用數(shù)據(jù)節(jié)點(diǎn)的主要好處是主角色和數(shù)據(jù)角色的分離。
數(shù)據(jù)節(jié)點(diǎn)的配置:
node.roles:?[?data?]
在 Elastic 多層(tires)冷熱集群架構(gòu)體系下,數(shù)據(jù)節(jié)點(diǎn)又可以細(xì)分為:
內(nèi)容數(shù)據(jù)節(jié)點(diǎn)(Content data node) 熱數(shù)據(jù)節(jié)點(diǎn)(Hot data node) 溫?cái)?shù)據(jù)節(jié)點(diǎn)(Warm data node) 冷數(shù)據(jù)節(jié)點(diǎn)(Cold data node) 冷凍數(shù)據(jù)節(jié)點(diǎn)(Frozen data node)


圖片來(lái)自:Elastic 官方博客
3.2.1 內(nèi)容數(shù)據(jù)節(jié)點(diǎn)
用途:處理寫(xiě)入和查詢(xún)負(fù)載,具有較長(zhǎng)的數(shù)據(jù)保留要求。
建議至少設(shè)置一個(gè)副本,以保證數(shù)據(jù)的高可用。
不屬于數(shù)據(jù)流的系統(tǒng)索引或其他索引會(huì)自動(dòng)分配到內(nèi)容數(shù)據(jù)節(jié)點(diǎn)。
node.roles:?[?data_content?]
3.2.2 熱數(shù)據(jù)節(jié)點(diǎn)
用途:保存最近、最常訪(fǎng)問(wèn)的時(shí)序數(shù)據(jù)。
推薦使用:SSD 磁盤(pán),至少設(shè)置一個(gè)副本。
node.roles:?[?data_hot?]
3.2.3 溫?cái)?shù)據(jù)節(jié)點(diǎn)
用途:保存訪(fǎng)問(wèn)頻次低且很少更新的時(shí)序數(shù)據(jù)。
node.roles:?[?data_warm?]
3.2.4 冷數(shù)據(jù)節(jié)點(diǎn)
用途:保存不經(jīng)常訪(fǎng)問(wèn)且通常不更新的時(shí)序數(shù)據(jù)。可存儲(chǔ)可搜索快照。
node.roles:?[?data_cold?]
3.2.5 冷凍數(shù)據(jù)節(jié)點(diǎn)
用途:保存很少訪(fǎng)問(wèn)且從不更新的時(shí)序數(shù)據(jù)。
node.roles:?[?data_frozen?]
在冷熱集群架構(gòu)時(shí)序數(shù)據(jù) ILM 索引生命周期管理的實(shí)戰(zhàn)演練環(huán)節(jié),驗(yàn)證發(fā)現(xiàn):
在配置節(jié)點(diǎn)角色時(shí),data_hot、data_warm、data_cold ?要和 data_content 要一起配置。且 data_hot、data_warm、data_cold 不要和原有的data 節(jié)點(diǎn)一起配置了。
如果僅data_hot 不設(shè)置 data_content 會(huì)導(dǎo)致集群數(shù)據(jù)寫(xiě)入后無(wú)法落地。
我的理解:data_hot, data_warm, data_cold 是標(biāo)識(shí)性的節(jié)點(diǎn),實(shí)際落地存儲(chǔ)還得靠 data_content 角色。
3.3 數(shù)據(jù)預(yù)處理節(jié)點(diǎn)(ingest node)
用途:執(zhí)行由預(yù)處理管道組成的預(yù)處理任務(wù)。
關(guān)于啥是數(shù)據(jù)的預(yù)處理?之前有多篇文章解讀過(guò):
Elasticsearch 預(yù)處理沒(méi)有奇技淫巧,請(qǐng)先用好這一招!
Elasticsearch的ETL利器——Ingest節(jié)點(diǎn)
node.roles:?[?ingest?]
3.4 僅協(xié)調(diào)節(jié)點(diǎn)(Coordinating only node)
用途:類(lèi)似智能負(fù)載均衡器,負(fù)責(zé):路由分發(fā)請(qǐng)求、聚集搜索或聚合結(jié)果。
注意事項(xiàng):在一個(gè)集群中添加太多的僅協(xié)調(diào)節(jié)點(diǎn)會(huì)增加整個(gè)集群的負(fù)擔(dān),因?yàn)楫?dāng)選的主節(jié)點(diǎn)必須等待來(lái)自每個(gè)節(jié)點(diǎn)的集群狀態(tài)更新的確認(rèn)。
node.roles:?[?]
空即是“色”,不對(duì),這里空即是“僅協(xié)調(diào)節(jié)點(diǎn)”。
3.5 遠(yuǎn)程節(jié)點(diǎn)(Remote-eligible node)
用途:跨集群檢索或跨集群復(fù)制。
node.roles:?[?remote_cluster_client?]
3.6 機(jī)器學(xué)習(xí)節(jié)點(diǎn)(Machine learning node)
用途:機(jī)器學(xué)習(xí),系收費(fèi)功能。
node.roles:?[?ml,?remote_cluster_client]
3.7 轉(zhuǎn)換節(jié)點(diǎn)(Transform node)
用途:運(yùn)行轉(zhuǎn)換并處理轉(zhuǎn)換 API 請(qǐng)求。這塊,咱們之前文章沒(méi)有涉及。
推薦閱讀:
https://www.elastic.co/guide/en/elasticsearch/reference/current/transform-overview.html
node.roles:?[?transform,?remote_cluster_client?]
4、回答開(kāi)篇問(wèn)題
4.1 Q1:請(qǐng)問(wèn) Nginx + ES Coordinate + ES Master + ES Node 如何安裝配置呢?是否安裝一樣,只需更改節(jié)點(diǎn)角色即可?
答案:先劃分節(jié)點(diǎn)角色。節(jié)點(diǎn)不多的話(huà)手動(dòng)one by one 部署(部署好了一個(gè),其他的拷貝后修改角色、ip等就可以),節(jié)點(diǎn)非常多的話(huà)可以借助:ansible 等腳本工具快速部署。
4.2 Q2:ES部署上,node.role都是mdi和 node.role區(qū)分m、d、i ,在部署上各有什么優(yōu)勢(shì)?更推薦用哪種?
答案:本文已介紹。m 代表主節(jié)點(diǎn) master, d 代表數(shù)據(jù)節(jié)點(diǎn) data, i 代表數(shù)據(jù)預(yù)處理節(jié)點(diǎn) ingest。
4.3 Q3:有 ES 7.x 的集群角色如圖,請(qǐng)問(wèn)在寫(xiě)入海量數(shù)據(jù)時(shí),應(yīng)該連接什么角色的節(jié)點(diǎn)寫(xiě)入?專(zhuān)用協(xié)調(diào)節(jié)點(diǎn)還是數(shù)據(jù)節(jié)點(diǎn)?
答案:看節(jié)點(diǎn)規(guī)模和節(jié)點(diǎn)角色劃分,如果已經(jīng)有了獨(dú)立協(xié)調(diào)節(jié)點(diǎn),連接獨(dú)立協(xié)調(diào)節(jié)點(diǎn)。如果沒(méi)有,連接硬件配置高的節(jié)點(diǎn)。
4.4 Q4:role的配置,加上這些data_hot, data_warm, data_cold 和自定義的attr屬性有區(qū)別嗎?
答案:新版本新特性,有區(qū)別,新的方式配置更為簡(jiǎn)潔,可讀性強(qiáng)、用戶(hù)體驗(yàn)優(yōu)。
4.5 Q5:誰(shuí)能解釋一下es的角色 data data_content data_hot/warm/cold他們直接的關(guān)系?
答案:系冷熱集群架構(gòu)的數(shù)據(jù)節(jié)點(diǎn)的分層處理機(jī)制。相當(dāng)于早期版本冷熱集群架構(gòu)的手動(dòng)配置節(jié)點(diǎn)屬性的部分,高版本做了精細(xì)切分,使得數(shù)據(jù)冷熱集群管理更為高效。尤其默認(rèn)遷移(migrate )自動(dòng)實(shí)現(xiàn)機(jī)制,之前版本的分片分配策略手動(dòng)配置變得不再必須:
"allocate"?:?{
????????????"include"?:?{
??????????????"box_type":?"hot,warm"
????????????}
??????????}
4.6 Q6:請(qǐng)問(wèn) ES 7.10 的 data_content ?角色是個(gè)什么樣的存在?和協(xié)調(diào)節(jié)點(diǎn)什么區(qū)別?
答案:兩種完全不同的節(jié)點(diǎn)。data_content 屬于數(shù)據(jù)節(jié)點(diǎn),永久存儲(chǔ)數(shù)據(jù)的地方。而協(xié)調(diào)節(jié)點(diǎn)是用來(lái)請(qǐng)求路由分發(fā)、結(jié)果匯聚處理的。
5、小結(jié)
有了節(jié)點(diǎn)角色劃分之后,老版本的節(jié)點(diǎn)類(lèi)型配置還是支持的。最早使用節(jié)點(diǎn)角色做 ILM 索引生命周期管理還有點(diǎn)不適應(yīng),摸索了一小段時(shí)間。
但,我們得擁抱 Elasticsearch 的變化。
節(jié)點(diǎn)角色的劃分是用戶(hù)體驗(yàn)層面、功能層面的改進(jìn),有了它,我們節(jié)點(diǎn)劃分會(huì)更加明晰,節(jié)點(diǎn)用途會(huì)更加聚焦、具體。
關(guān)于節(jié)點(diǎn)角色和硬件配置的關(guān)系,也是經(jīng)常被提問(wèn)的問(wèn)題,推薦配置參考:
| 角色 | 描述 | 存儲(chǔ) | 內(nèi)存 | 計(jì)算 | 網(wǎng)絡(luò) |
|---|---|---|---|---|---|
| 數(shù)據(jù)節(jié)點(diǎn) | 存儲(chǔ)和檢索數(shù)據(jù) | 極高 | 高 | 高 | 中 |
| 主節(jié)點(diǎn) | 管理集群狀態(tài) | 低 | 低 | 低 | 低 |
| Ingest 節(jié)點(diǎn) | 轉(zhuǎn)換輸入數(shù)據(jù) | 低 | 中 | 高 | 中 |
| 機(jī)器學(xué)習(xí)節(jié)點(diǎn) | 機(jī)器學(xué)習(xí) | 低 | 極高 | 極高 | 中 |
| 協(xié)調(diào)節(jié)點(diǎn) | 請(qǐng)求轉(zhuǎn)發(fā)和合并檢索結(jié)果 | 低 | 中 | 中 | 中 |
你的生產(chǎn)環(huán)境使用了什么版本的集群?如何做的節(jié)點(diǎn)角色的劃分?歡迎留言討論。
參考
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集群規(guī)模和容量規(guī)劃的底層邏輯
推薦
更短時(shí)間更快習(xí)得更多干貨!
和全球?1600+?Elastic 愛(ài)好者一起精進(jìn)!

