ToB企服应用市场:ToB评测及商务社交产业平台
标题:
【ES专题】ElasticSearch集群架构剖析_es集群(1)
[打印本页]
作者:
莱莱
时间:
2024-8-16 06:03
标题:
【ES专题】ElasticSearch集群架构剖析_es集群(1)
前言
阅读对象
阅读导航
要点
条记正文
一、ES集群架构
1.1 为什么要使用ES集群架构
1.2 ES集群核心概念
1.2.1 节点
1.2.1.1 Master Node主节点的功能
1.2.1.2 Data Node数据节点的功能
1.2.1.3 Coordinate Node调和节点的功能
1.2.1.4 Ingest Node调和节点的功能
1.2.1.5 其他节点功能
1.2.1.6 Master Node主节点选举流程
1.2.2 分片
1.3 搭建三节点ES集群
1.3.1 ES集群搭建步骤
1.3.2 安装客户端
二、生产情况最佳实践
2.1 一个节点只承担一个角色的配置
2.2 增加节点程度扩展场景
2.3 异地多活架构
2.4 Hot & Warm 架构
2.5 怎样对集群的容量举行规划
2.6 怎样计划和管理分片
前言
个人感觉集群架构其实都有点大同小异,看了这么多集群架构之后,感觉无非要思量的地方就几点:
使用何种通信协议去同步数据,互相通信
采用何种计谋同步数据(异步照旧同步)
怎样保证一致性,保证到什么程度(【终极一致性】 or【实时一致性 / 强一致性】)
使用何种算法去选举主次节点(感觉这个比较随意,通常为了快速规复服务,选举流程是怎么快怎么来,但是不能出现【脑裂问题】)
阅读对象
有基本ES使用知识,需要使用集群架构
阅读导航
系列上一篇文章:《【ES专题】ElasticSearch搜索进阶》
系列下一篇文章:《【ES专题】ElasticSearch功能详解与原理剖析》
要点
ES要掌握什么:
使用:搜索和聚合操纵语法,理解分词,倒排索引,相干性算分(文档匹配度)
优化: 数据预处置惩罚,文档建模,集群架构优化,读写性能优化
条记正文
一、ES集群架构
1.1 为什么要使用ES集群架构
为什么需要使用集群架构?这就得提一下分布式系统的可用性与扩展性了。
高可用性:分为两个点思量
服务高可用性:允许个别节点停止服务,个别节点停止服务不影响整体使用
数据可用性:部分节点丢失,不会丢失数据(需要有备份计谋)
可扩展性:
哀求量提升/数据的不断增长(将数据分布到所有节点上)
上面所说的正是集群架构的优势所在。对ES集群架构来说,则体现在:
提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
存储的程度扩容
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的速率能快吗?会不会在通信上就耗费了很多时间。
节点范例,可以通过如下配置参数禁用/启用
关于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集群,并且支持将这些集群当成一个单独的集群处置惩罚
以下是一个多集群业务架构图:
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
}
}
复制代码
分片架构
如上图是某个集群的分片架构,它有如下特性:
集群中有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即可看到如下界面:
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/
输入ES集群节点:http://192.168.66.150:9200,创建连接。然后会出现以下界面:
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
#后台启动
nohup bin/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 增加节点程度扩展场景
既有得当小白学习的零基础资料,也有得当3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目次截图出来,全套包罗大厂面经、学习条记、源码课本、实战项目、大纲路线、讲解视频,并且后续会持续更新
需要这份系统化资料的朋侪,可以戳这里获取
#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 增加节点水平扩展场景
[外链图片转存中...(img-YjOKQvdb-1714255991059)]
[外链图片转存中...(img-UlHjYR27-1714255991060)]
[外链图片转存中...(img-fCKkkTnd-1714255991060)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4