李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
Elasticsearch集群概念介绍
Leefs
2021-02-10 PM
2393℃
0条
# 12.Elasticsearch集群概念介绍 ### 一、Elasticsearch集群架构介绍 集群就是多个node统一对外提供服务。这样,就避免了单节点故障带来的服务的中断,保证了服务的高可用,同时,也因为多台节点的协同运作,提高了集群服务的计算能力和吞吐量。ES服务在实际应用中也是以集群的方式存在着。首先我们看一张典型的集群架构图: ![12.Elasticsearch基础架构介绍01.png](https://lilinchao.com/usr/uploads/2021/02/2891539232.png) **对于用户来说**, ES是一个无中心化的集群,ES集群内部运行原理是对外面来说是透明的。你操作一个节点跟操作一个集群是一样的。也就是说,ES集群没有中心节点,任何一个节点出现故障都不会影响其它节点。这是由ES本身特性所决定的。这是它的典型特征。但是通过集群内部来看ES是有节点的。 在ElasticSearch的架构中,有三类角色,分别是Client Node、Data Node和Master Node,搜索查询的请求一般是经过Client Node来向Data Node获取数据,而索引查询首先请求Master Node节点,然后Master Node将请求分配到多个Data Node节点完成一次索引查询。我们看一下这张图: ![12.Elasticsearch基础架构介绍02.png](https://lilinchao.com/usr/uploads/2021/02/2890217894.png) 我们讲解一下集群中各节点的作用: + **Master Node**:可以理解为主节点,用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等,以及管理集群各个节点的状态包括集群节点的协调、调度。elasticsearch集群中可以定义多个主节点,但是,**在同一时刻,只有一个主节点起作用**,其它定义的主节点,是作为主节点的候选节点存在。当一个主节点故障后,集群会从候选主节点中选举出新的主节点。也就是说,主节点的产生都是由选举产生的。Master节点它仅仅是对索引的管理、集群状态的管理。像其它的对数据的存储、查询都不需要经过这个Master节点。因此在ES集群中。它的压力是比较小的。所以,我们在构建ES的集群当中,Master节点可以不用选择太好的配置,但是我们一定要保证服务器的安全性。因此,必须要保证主节点的稳定性。 + **Data Node:** 存储数据的节点,数据的读取、写入最终的作用都会落到这个上面。数据的分片、搜索、整合等 这些操作都会在数据节点来完成。因此,数据节点的操作都是比较消耗CPU、内存、I/O资源。所以,我们在选择data Node数据节点的时候,硬件配置一定要高一些。高的硬件配置可以获得高效的存储和分析能力。因为最终的结果都是需要到这个节点上来。 + **Client Node:**可选节点。作任务分发使用。它也会存储一些元数据信息,但是不会对数据做任何修改,仅仅用来存储。它的好处是可以分担datanode的一部分压力。因为ES查询是两层汇聚的结果,第一层是在datanode上做查询结果的汇聚。然后把结果发送到client Node 上来。Cllient Node收到结果后会再做第二次的结果汇聚。然后client会把最终的结果返回给用户。 那么从上面的结构图我们可以看到ES集群的工作流程: 1、搜索查询,比如Kibana去查询ES的时候,默认走的是Client Node。然后由Client Node将请求转发到datanode上。datanode上的结构返回给client Node.然后再返回给客户端。 2、索引查询,比如我们调用API去查询的时候,走的是MasterNode,然后由master 将请求转发到相应的数据节点上,然后再由Master将结果返回。 3、最终我们都知道,所有的服务请求都到了datanode上。所以,它的压力是最大的。 ### 二、生产环境集群设计 **1、节点配置** 在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。 默认情况下,elasticsearch 集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。这些功能是由两个属性控制的: + node.master + node.data 默认情况下这两个属性的值都是true。 + **node.master:**这个属性表示节点是否具有成为主节点的资格 *注意:此属性的值为 true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。所以,这个属性只是代表这个节点是不是具有主节点选举资格。* + **node.data:**这个属性表示节点是否存储数据。 **2、组合方式** 1. node.master: **true** AND node.data: **true AND node.ingest: true** > 这种组合表示这个节点既有成为主节点的资格,又可以存储数据,还可以作为预处理节点,这个时候如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。 > elasticsearch 默认是:每个节点都是这样的配置,在测试环境下这样做没问题。实际工作中建议不要这样设置,这样相当于 主节点 和 数据节点 的角色混合到一块了。 2. node.master: **false** AND node.data: **true **AND node.ingest: **false** > 这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。这个节点我们称为 data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据。后期提供存储和查询服务 3. node.master: **true** AND node.data: **false** AND node.ingest: **false** > 这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。这个节点我们称为master节点 4. node.master: **false** AND node.data: **false** AND node.ingest: **true** > 这种组合表示这个节点即不会成为主节点,也不会存储数据,这个节点的意义是作为一个 client(客户端)节点,主要是针对海量请求的时候可以进行负载均衡。在新版 ElasticSearch5.x 之后该节点称之为:coordinate 节点,其中还增加了一个叫:ingest 节点,用于预处理数据(索引和搜索阶段都可以用到),当然,作为一般应用是不需要这个预处理节点做什么额外的预处理过程,那么这个节点和我们称之为 client 节点之间可以看做是等同的,我们在代码中配置访问节点就都可以配置这些 ingest 节点即可。 ### 总结 **master节点:**普通服务器即可(CPU 内存 消耗一般) **data 节点:**主要消耗磁盘,内存 **client | ingest 节点:**普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)
标签:
Elasticsearch
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1059.html
上一篇
【转载】ElasticSearch分片介绍
下一篇
Elasticsearch集群搭建
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
微服务
Sentinel
Elastisearch
前端
JavaWEB项目搭建
并发线程
Spark Streaming
链表
Spark RDD
Filter
查找
Docker
Redis
线程池
Java
Zookeeper
Livy
Kibana
Flume
容器深入研究
Hive
JavaWeb
GET和POST
二叉树
排序
ajax
Tomcat
Spring
MyBatisX
栈
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭