李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
Elasticsearch集群概念介绍
Leefs
2021-02-10 PM
1925℃
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://www.lilinchao.com/archives/1059.html
上一篇
【转载】ElasticSearch分片介绍
下一篇
Elasticsearch集群搭建
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Http
Redis
数据结构和算法
Filter
队列
链表
gorm
JVM
Spark Streaming
哈希表
Spark Core
Hadoop
MyBatis-Plus
Beego
工具
SpringBoot
Flume
nginx
Git
Thymeleaf
GET和POST
查找
Netty
数据结构
字符串
Kibana
Kafka
MyBatis
Sentinel
SpringCloud
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞