干货 | Elasticsearch 8.X 节点角色划分深入详解
如果你的 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#返回结果ipheap.percentram.percentcpuload_1mload_5mload_15mnode.rolemastername172.21.0.14709600.030.030.05cdfhilmrstw*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 | 仅协调节点 |
https://github.com/elastic/elasticsearch/pull/54998
一个新功能的诞生必然是基于早期版本存在bug或者至少用户体验差。
节点角色就是基于节点类型配置复杂和用户体验差应运而生的。
早期版本如果需要配置仅候选主节点类型,需要的配置(极端情况)如下:
node.data:falsenode.ingest:falsenode.remote_cluster_client:falsenode.ml:falsenode.master:truenode.transform:falsenode.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 请求。这块,咱们之前文章没有涉及。
关键词: 机器学习
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...