河曲智叟 发表于 2024-7-16 13:47:28

最新【ES专题】ElasticSearch集群架构剖析_es集群(2),2024大厂大数据开发

https://img-blog.csdnimg.cn/img_convert/4e049a4c993309d5bb4802120f4e36c2.png
https://img-blog.csdnimg.cn/img_convert/14daf025f55d843f9731ca383d6e78f5.png
网上学习资料一大堆,但如果学到的知识不成体系,碰到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提升。
必要这份体系化资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都接待加入我们的的圈子(技能交换、学习资源、职场吐槽、大厂内推、口试辅导),让我们一起学习成长!

[*]利用何种通讯协议去同步数据,相互通讯
[*]采用何种策略同步数据(异步还是同步)
[*]怎样包管同等性,包管到什么程度(【终极同等性】 or【实时同等性 / 强同等性】)
[*]利用何种算法去选举主次节点(感觉这个比力随意,通常为了快速规复服务,选举流程是怎么快怎么来,但是不能出现【脑裂问题】)
阅读对象

有基本ES利用知识,必要利用集群架构
阅读导航

系列上一篇文章:《【ES专题】ElasticSearch搜索进阶》
系列下一篇文章:《【ES专题】ElasticSearch功能详解与原理剖析》
要点

ES要掌握什么:

[*]利用:搜索和聚合操纵语法,明确分词,倒排索引,相关性算分(文档匹配度)
[*]优化: 数据预处置惩罚,文档建模,集群架构优化,读写性能优化
条记正文

一、ES集群架构

1.1 为什么要利用ES集群架构

为什么必要利用集群架构?这就得提一下分布式体系的可用性与扩展性了。


[*]高可用性:分为两个点考虑

[*]服务高可用性:允许个别节点停止服务,个别节点停止服务不影响整体利用
[*]数据可用性:部分节点丢失,不会丢失数据(必要有备份策略)

[*]可扩展性:

[*]请求量提升/数据的不断增长(将数据分布到所有节点上)

上面所说的正是集群架构的上风地点。对ES集群架构来说,则体现在:


[*]提高体系的可用性,部分节点停止服务,整个集群的服务不受影响
[*]存储的程度扩容
https://img-blog.csdnimg.cn/752c2e0d1fe6400f8beb96e335aae3ac.png
1.2 ES集群核心概念

ES集群中有2个比力核心的概念必要明确一下。分别是:节点、分片。在聊这些概念之前,我们先重新梳理一下,ES的集群是什么。
ES的集群,亦上图所示,它通常由如下特征:


[*]集群中有一个或者多个节点
[*]不同的集群通过不同的名字来区分,默认名字【elasticsearch】
   留意:ES在现实生产情况中,还会摆设多个集群一起工作


[*]通过配置文件修改,或者在下令行中 -E cluster.name=es-cluster举行设定
1.2.1 节点

ES中的节点本质上是一个Elasticsearch的实例,一个Java历程。通常,我们建议生产情况中,一台机器只运行一个ES实例。(一台机器摆设多个节点,其实是违背【高可用】原则的)
ES节点有如下特性:


[*]每一个节点都著名字,通过配置文件配置,或者启动时间 -E node.name=node1指定
[*]每一个节点在启动之后,会分配一个UID,保存在data目录下
[*]节点有多种脚色(范例),不同脚色通常有不同的功能,它们分别是:

[*]Master Node:主节点,负责索引的删除创建
[*]Master eligible nodes:【直译:符合条件的节点】。可以参与选举的合格节点
[*]Data Node:数据节点,负责文档的写入、读取。节点保存数据并实验与数据相关的操纵,如CRUD、搜索和聚合
[*]Coordinating Node:协调治点
[*]其他节点

通过ES多脚色界说可以看的出来,ES的集群架构非常成熟,它也是我目前见过的脚色最丰富的架构。如此丰富的脚色界说,肯定是为了拓展集群架构而生的,单一职责嘛。不过有一点我没想通的是,如果节点太多了,做一次CRUD的速度能快吗?会不会在通讯上就花费了很多时间。
   节点范例,可以通过如下配置参数禁用/启用
https://img-blog.csdnimg.cn/f40eb780dfb04e26bf211b8647363614.png
关于Master eligible nodes和Master Node


[*]每个节点启动后,默认就是一个Master eligible节点,即都可以参与集群选举,成为Master节点。可以通过node.mater=false克制
[*]当第一个节点启动时间,它会将自己选举成Master节点
[*]每个节点上都保存了集群的状态,但是只有Master节点才能修改集群的状态信息。集群状态信息(Cluster State) 维护了一个集群中所有须要的信息。比如:

[*]所有节点信息
[*]所有的索引和其他相关的Mapping与Setting信息
[*]分片的路由信息

关于Data Node 和 Coordinating Node


[*]Data Node:

[*]可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用
[*]节点启动后,默认就是数据节点。可以设置node.data: false克制
[*]由Master Node决定怎样把分片分发到数据节点上
[*]通过增长数据节点可以解决数据程度扩展息争决数据单点问题

[*]Coordinating Node:

[*]负责担当Client的请求, 将请求分发到合适的节点,终极把结果汇集到一起
[*]每个节点默认都起到了Coordinating Node的职责

其他节点范例


[*]Hot & Warm Node:冷热节点。不同硬件配置 的Data Node,用来实现Hot & Warm架构,降低集群摆设的成本
   不同硬件配置,通常是CPU跟硬盘。硬盘根据冷热数据范例,可以选择固态或者机器硬盘


[*]Ingest Node:数据前置处置惩罚转换节点,支持pipeline管道设置,可以利用ingest对数据举行过滤、转换等操纵
[*]Machine Learning Node:负责跑机器学习的Job,用来做非常检测
[*]Tribe Node:Tribe Node连接到不同的Elasticsearch集群,而且支持将这些集群当成一个单独的集群处置惩罚
以下是一个多集群业务架构图:
https://img-blog.csdnimg.cn/81f11e1ca0cd44828ec34050ebce1ee4.png
1.2.1.1 Master Node主节点的功能

Master节点重要功能::

[*]管理索引和分片的创建、删除和重新分配
[*]监测节点的状态,并在必要时举行重分配
[*]协调治点之间的数据复制和同步工作
[*]处置惩罚集群级别操纵,如创建或删除索引、添加或删除节点等
[*]维护集群的状态
1.2.1.2 Data Node数据节点的功能

Data Node数据节点的功能:

[*]存储和索引数据:Data Node 节点会将索引分片存储在当地磁盘上,并对查询请求举行相应
[*]复制和同步数据:为了确保数据的可靠性和高可用性,ElasticSearch 会将每个原始分片的多个副本存储在不同的 Data Node 节点上,并定期将各节点上的数据举行同步
[*]参与搜索和聚合操纵:当客户端提交搜索请求时,Data Node 节点会利用当地缓存和分片数据完成搜索和聚合操纵
[*]实验数据维护操纵:比方,清理过期数据和压缩分片等
   官方界说:
数据节点保存包含您已索引的文档的分片。数据节点处置惩罚数据相关操纵,比方 CRUD、搜索和聚合。这些操纵是 I/O、内存和 CPU 麋集型操纵。监视这些资源并在过载时添加更多数据节点非常重要。
拥有专用数据节点的重要利益是主脚色和数据脚色的分离。
要创建专用数据节点,请设置:node.roles: [ data ]
在多层摆设体系结构中,您可以利用专门的数据脚色将数据节点分配到特定层:data_content、data_hot、data_warm、 data_cold或data_frozen。一个节点可以属于多个层,但具有专用数据脚色之一的节点不能具有通用data脚色。
1.2.1.3 Coordinate Node协调治点的功能

官方界说:
诸如搜索请求或批量索引请求之类的请求,它们可能涉及不同数据节点上保存的数据。比方,搜索请求分两个阶段实验,这两个阶段由接收客户端请求的节点(协调治点)协调。

[*]在分散阶段,协调治点将请求转发到保存数据的数据节点。每个数据节点在当地实验请求并将其结果返回给协调治点
[*]在网络阶段,协调治点将每个数据节点的结果缩减为单个全局结果集
每个节点都是隐式的协调治点。这意味着具有显式空脚色列表的节点node.roles将仅充当协调治点,无法禁用。因此,这样的节点必要有足够的内存和 CPU 才能处置惩罚网络阶段。
1.2.1.4 Ingest Node协调治点的功能

官方界说:
在现实的文档索引发生之前,利用摄取节点对文档举行预处置惩罚。摄取节点拦截批量和索引请求,应用转换,然后将文档传递回索引或批量api。
默认情况下,所有节点都启用摄取,因此任何节点都可以处置惩罚摄取任务。您还可以创建专用的摄取节点。如果要禁用节点的摄取,请在elasticsearch. conf中配置以下配置。yml文件:node.ingest: false
要在索引之前对文档举行预处置惩罚,请界说一个指定一系列处置惩罚器的管道。每个处置惩罚器都以某种特定的方式转换文档。比方,管道可能有一个处置惩罚程序从文档中删除字段,然后有另一个处置惩罚程序重定名字段。然后,集群状态存储配置的管道。
要利用管道,只需在索引或批量请求上指定pipeline参数。这样,摄取节点就知道要利用哪个管道。比方:
PUT my-index/my-type/my-id?pipeline=my_pipeline_id
{
"foo": "bar"
}

1.2.1.5 其他节点功能

其他节点相对来说利用的比力少,不做介绍了
1.2.1.6 Master Node主节点选举流程

ES的选举流程也很简单,如下:

[*]通常集群启动时,第一个启动的节点会被选为主节点。当主节点挂了的时间,举行下一步
[*]相互Ping对方,Node ld 低的会成为被选举的节点
[*]其他节点会加入集群,但是不负担Master节点的脚色。一旦发现被选中的主节点丢失,就会重新选举出新的Master节点
   在我们的生产过程中,Master Node的最佳实践方案


[*]Master节点非常重要,在摆设上必要考虑解决单点的问题
[*]为一个集群设置多个Master节点,每个节点只负担Master 的单一脚色
1.2.2 分片

分片是ES中一个比力重要的概念。ElasticSearch是一个分布式的搜索引擎,索引可以分成一份或多份,多份分布在不同节点的分片当中。ElasticSearch会自动管理分片,如果发现分片分布不均衡,就会自动迁徙。
分片又有【主分片】、【副本分片】之分。它们的区别如下:


[*]主分片(Primary Shard)

[*]用以解决数据程度扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
[*]一个分片是一个运行的Lucene的实例
[*]主分片数在索引创建时指定,后续不允许修改,除非Reindex

[*]副本分片

[*]用以解决数据高可用的问题。 副本分片是主分片的拷贝(备份)
[*]副本分片数,可以动态调解
[*]增长副本数,还可以在肯定程度上提高服务的可用性(读取的吞吐)

# 指定索引的主分片和副本分片数
PUT /csdn_blogs
{
"settings": {
    "number\_of\_shards": 3,
    "number\_of\_replicas": 1
}
}

分片架构
https://img-blog.csdnimg.cn/e36ec8e69f45439aa13775068e63e745.png
如上图是某个集群的分片架构,它有如下特征:

[*]集群中有3个节点
   通常都是奇数,所谓【集群奇数法则】。但其实只是名字很唬人,本质上也没那么神奇。你自己想想,如果是偶数的话,是不是很有可能出现选举平票的时间?根据我的经验,选举算法通常都渴望快速选举一个master或者leader出来,以便能够快速提供服务,所以没空扯皮

[*]每个节点各有一个主副分片
   高可用之——故障转移

[*]主副分片之间交叉存储(node1的副本放在node3,node2放在node1,node3放在node2)
   利用【cat API查看集群信息】


[*]GET /_cat/nodes?v #查看节点信息
[*]GET /_cat/health?v #查看集群当前状态:红、黄、绿
[*]GET /_cat/shards?v #查看各shard的具体情况
[*]GET /_cat/shards/{index}?v #查看指定分片的具体情况
[*]GET /_cat/master?v #查看master节点信息
[*]GET /_cat/indices?v #查看集群中所有index的具体信息
[*]GET /_cat/indices/{index}?v #查看集群中指定index的具体信息 `
1.3 搭建三节点ES集群

1.3.1 ES集群搭建步骤

下面是在Linux情况,centos7下面的集群搭建步骤:
1)体系情况预备
起首创建用户,因为es不允许root账号启动
adduser es
passwd es

安装版本:elasticsearch-7.17.3。接着切换到root用户,修改/etc/hosts:
vim/etc/hosts
192.168.66.150 es-node1
192.168.66.151 es-node2
192.168.66.152 es-node3

2)修改elasticsearch.yml
留意配置里面的注释,里面有一些细节。比如:

[*]留意集群的名字,3个节点的集群名称必须一直
[*]给每个节点指定名字,比如这里是node1/2/3
[*]是否要开启外网访问,跟redis的配置差不多
[*]
# 指定集群名称3个节点必须一致
cluster.name: es-cluster
#指定节点名称,每个节点名字唯一
node.name: node-1
#是否有资格为master节点,默认为true
node.master: true
#是否为data节点,默认为true
node.data: true
# 绑定ip,开启远程访问,可以配置0.0.0.0
network.host: 0.0.0.0
#用于节点发现
discovery.seed_hosts: ["es-node1", "es-node2", "es-node3"]
#7.0新引入的配置项,初始仲裁,仅在整个集群首次启动时才需要初始仲裁。
#该选项配置为node.name的值,指定可以初始化集群节点的名称
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "\*"

三个节点配置很简单,按照上面的模板,依次修改node.name就行了
3) 启动每个节点的ES服务
# 注意:如果运行过单节点模式,需要删除data目录, 否则会导致无法加入集群
rm -rf data
# 启动ES服务
bin/elasticsearch -d

4)验证集群
正常来说,如果我们先启动了192.168.66.150,那么它就是这个集群当中的主节点,所以我们验证集群的话,只必要访问http://192.168.66.150:9200即可看到如下界面:
https://img-blog.csdnimg.cn/f7535a7b6c6a43b68d453007bbfac2e9.png
1.3.2 安装客户端

介绍完了ES的集群摆设,我们再来看看ES客户端的摆设。这里有两个可选方案,它们分别是Cerebro和Kibana,它们的区别与接洽如下:
   Cerebro和Kibana都是用于Elasticsearch的开源工具,但它们在功能和利用场景上存在一些区别。
功能:


[*]Cerebro:Cerebro是Elasticsearch的图形管理工具,可以查看分片分配和实验常见的索引操纵,功能集中管理alias和index template,非常快捷。此外,Cerebro还具有实时监控数据的功能。
[*]Kibana:Kibana是一个强大的可视化工具,可以用于Elasticsearch数据的探索、分析和展示。它提供了丰富的图表范例,包罗折线图、直方图、饼图等,可以方便地展示基于时间序列的数据。此外,Kibana还提供了日志管理、分析和展示的功能
利用场景:


[*]Cerebro:Cerebro适合用于生产和测试情况的Elasticsearch集群管理,尤其实用于必要快速查看和实验索引操纵的情况。由于Cerebro轻量且实用于实时监控,它可能更实用于较小的集群和实时监控的场景。
[*]Kibana:Kibana适合对Elasticsearch数据举行深入的分析和探索,以及对日志举行管理和分析。它提供了丰富的可视化功能和灵活的数据展示方式,实用于各种规模的数据分析和监控场景。
Cerebro安装
Cerebro 可以查看分片分配和通过图形界面实验常见的索引操纵,完全开源,而且它允许添加用户,暗码或 LDAP 身份验证问网络界面。Cerebro 基于 Scala 的Play 框架编写,用于后端 REST 和 Elasticsearch 通讯。 它利用通过 AngularJS 编写的单页应用程序(SPA)前端。
安装包下载地址如下:https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro-0.9.4.zip
下载安装之后,用以下下令启动即可:
cerebro-0.9.4/bin/cerebro

#后台启动
nohup bin/cerebro > cerebro.log &

访问:http://192.168.66.150:9000/
https://img-blog.csdnimg.cn/0841a586e74348e79d7b560b68a1a470.png
输入ES集群节点:http://192.168.66.150:9200,创建连接。然后会出现以下界面:
https://img-blog.csdnimg.cn/6958e8dc27d045469e49bcba27ffbb05.png
kibana安装
1)修改kibana配置
vim config/kibana.yml

server.port: 5601
server.host: "192.168.66.150"
elasticsearch.hosts: ["http://192.168.66.150:9200","http://192.168.66.151:9200","http://192.168.66.152:9200"]
i18n.locale: "zh-CN"   

2)运行Kibana
#后台启动
nohupbin/kibana &

3)访问
访问http://192.168.66.150:5601/验证
二、生产情况最佳实践

2.1 一个节点只负担一个脚色的配置

我们在上面的介绍中知道,节点有多种不同的范例(脚色),有:Master eligible / Data / Ingest / Coordinating /Machine Learning等。不过跟之前学习的各种集群架构不同的是,ES一个节点可负担多种脚色。
不过,在生产情况中尽量还是一个节点一种脚色比力好,优点是:极致的高可用;缺点是:可能有点费钱
想要一个节点只负担一个脚色,只必要修改如下配置:
#Master节点
node.master: true
node.ingest: false
node.data: false

#data节点
node.master: false
node.ingest: false
node.data: true

#ingest 节点
node.master: false
node.ingest: true
node.data: false

#coordinate节点
node.master: false
node.ingest: false
node.data: false

2.2 增长节点程度扩展场景

在现实生产中,我们可能会碰到必要程度扩展容量的场景,通常来说,以下是几个常见的场景:


[*]当磁盘容量无法满意需求时,可以增长数据节点
[*]磁盘读写压力大时,增长数据节点
[*]当体系中有大量的复杂查询及聚合时间,增长Coordinating节点,增长查询的性能
2.3 异地多活架构

下面是一个多集群架构。集群处在三个数据中心,数据三写,利用GTM分发读请求
https://img-blog.csdnimg.cn/a61422712dbe442bb55371d7227c4182.png
   全局流量管理(GTM)和负载均衡(SLB)的区别:
GTM 是通过DNS将域名解析到多个IP地址,不同用户访问不同的IP地址,来实现应用服务流量的分配。同时通过康健查抄动态更新DNS解析IP列表,实现故障隔离以及故障切换。终极用户的访问直接连接服务的IP地址,并不通过GTM。
而 SLB 是通过署理用户访问请求的形式将用户访问请求实时分发到不同的服务器,终极用户的访问流量必须要经过SLB。 一般来说,相同Region利用SLB举行负载均衡,不同region的多个SLB地址时,则可以利用GTM举行负载均衡。
2.4 Hot & Warm 架构

热节点存放用户最关心的热数据;温节点或者冷节点存放用户不太关心或者关心优先级低的冷数据或者暖数据。
它的典范的应用场景如下:
在成本有限的条件下,让客户关注的实时数据和历史数据硬件隔离,最大化解决客户反应的相应时间慢的问题。业务场景描述:每日增量6TB日志数据,高峰时段写入及查询频率都较高,集群压力较大,查询ES时,常出现查询迟钝问题。


[*]ES集群的索引写入及查询速度重要依靠于磁盘的IO速度,冷热数据分离的关键为利用SSD磁盘存储热数据,提升查询效率。
[*]若全部利用SSD,成本过高,且存放冷数据较为浪费,因而利用平凡SATA磁盘与SSD磁盘混搭,可做到资源充分利用,性能大幅提升的目标。
https://img-blog.csdnimg.cn/img_convert/7f9b9b632937367ffffd9882c9c8e527.png
https://img-blog.csdnimg.cn/img_convert/243f6d17900a06e65927af4e026b46f3.png
https://img-blog.csdnimg.cn/img_convert/304208ab0c36f0fd1de0bc78005173ec.png
既有适合小白学习的零底子资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包含大厂面经、学习条记、源码讲义、实战项目、大纲蹊径、解说视频,而且后续会连续更新
必要这份体系化资料的朋友,可以戳这里获取
应用场景如下:
在成本有限的条件下,让客户关注的实时数据和历史数据硬件隔离,最大化解决客户反应的相应时间慢的问题。业务场景描述:每日增量6TB日志数据,高峰时段写入及查询频率都较高,集群压力较大,查询ES时,常出现查询迟钝问题。


[*]ES集群的索引写入及查询速度重要依靠于磁盘的IO速度,冷热数据分离的关键为利用SSD磁盘存储热数据,提升查询效率。
[*]若全部利用SSD,成本过高,且存放冷数据较为浪费,因而利用平凡SATA磁盘与SSD磁盘混搭,可做到资源充分利用,性能大幅提升的目标。
[外链图片转存中…(img-fp8oLye6-1715814346334)]
[外链图片转存中…(img-wAuzKe2A-1715814346334)]
[外链图片转存中…(img-05tEPA98-1715814346334)]
既有适合小白学习的零底子资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包含大厂面经、学习条记、源码讲义、实战项目、大纲蹊径、解说视频,而且后续会连续更新
必要这份体系化资料的朋友,可以戳这里获取

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 最新【ES专题】ElasticSearch集群架构剖析_es集群(2),2024大厂大数据开发