Elasticsearch架构原理

一. Elasticsearch架构原理

1、Elasticsearch的节点类型

在Elasticsearch主要分成两类节点,一类是Master,一类是DataNode。

1.1 Master节点

在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然后使用Zen Discovery机制找到集群中的其他节点,建立连接,并从候选主节点中选举出一个主节点。
Master节点主要负责:

  1. 处理创建,删除索引等请求,负责索引的创建与删除
  2. 决定分片被分配到哪个节点
  3. 维护并且更新Cluster State

Master Node的最佳实践

  1. Master节点非常重要,在部署上需要考虑解决单点的问题
  2. 为一个集群设置多个Master节点,每个节点只承担Master 的单一角色

选主的过程

  1. 互相Ping对方,Node ld 低的会成为被选举的节点
  2. 其他节点会加入集群,但是不承担Master节点的角色。一旦发现被选中的主节点丢失,就会选举出新的Master节点
1.2 DataNode节点

在Elasticsearch集群中,会有N个DataNode节点。DataNode节点主要负责:数据写入、数据检索,大部分Elasticsearch的压力都在DataNode节点上在生产环境中,内存最好配置大一些。
可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用。
节点启动后,默认就是数据节点,可以设置node.data: false 禁止。
由Master Node决定如何把分片分发到数据节点上,通过增加数据节点可以解决数据水平扩展和解决数据单点问题。

1.3 Coordinating Node
  1. 负责接受Client的请求, 将请求分发到合适的节点,最终把结果汇集到一起。
  2. 每个节点默认都起到了Coordinating Node的职责。

1.4 其他节点

  1. Master eligible nodes:可以参与选举的合格节点
    Master eligible nodes和Master Node
    每个节点启动后,默认就是一个Master eligible节点
    ○ 可以设置 node.master: false禁止
  2. Master-eligible节点可以参加选主流程,成为Master节点
    当第一个节点启动时候,它会将自己选举成Master节点
    每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息
    ○ 集群状态(Cluster State) ,维护了一个集群中,必要的信息
    ■ 所有的节点信息
    ■ 所有的索引和其相关的Mapping与Setting信息
    ■ 分片的路由信息
  3. Hot & Warm Node
    ○ 不同硬件配置 的Data Node,用来实现Hot & Warm架构,降低集群部署的成本
  4. Ingest Node
    ○ 数据前置处理转换节点,支持pipeline管道设置,可以使用ingest对数据进行过滤、转换等操作
  5. Machine Learning Node
    ○ 负责跑机器学习的Job,用来做异常检测
  6. Tribe Node
    ○ Tribe Node连接到不同的Elasticsearch集群,并且支持将这些集群当成一个单独的集群处理

二 、分片和副本机制

2.1 分片(Primary Shard & Replica Shard)

Elasticsearch是一个分布式的搜索引擎,索引的数据也是分成若干部分,分布在不同的服务器节点中。分布在不同服务器节点中的索引数据,就是分片(Shard)。Elasticsearch会自动管理分片,如果发现分片分布不均衡,就会自动迁移一个索引(index)由多个shard(分片)组成,而分片是分布在不同的服务器上的

2.1.1 主分片(Primary Shard)
  • 用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上
  • 一个分片是一个运行的Lucene的实例
  • 主分片数在索引创建时指定,后续不允许修改,除非Reindex
2.1.2 副本分片(Replica Shard)
  • 用以解决数据高可用的问题。 副本分片是主分片的拷贝
  • 副本分片数,可以动态调整
  • 增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)
    分片的设定

对于生产环境中分片的设定,需要提前做好容量规划

2.1.3 分片数设置过小
  • 导致后续无法增加节点实现水平扩展
  • 单个分片的数据量太大,导致数据重新分配耗时
2.1.4 分片数设置过大,

7.0 开始,默认主分片设置成1,解决了over-sharding(分片过度)的问题

  • 影响搜索结果的相关性打分,影响统计结果的准确性
  • 单个节点上过多的分片,会导致资源浪费,同时也会影响性能

指定索引的主分片和副本分片数

PUT /blogs
{"settings": {"number_of_shards": 3,"number_of_replicas": 1 // 0或1 }
}

#查看集群的健康状况
GET _cluster/health

2.2 副本

为了对Elasticsearch的分片进行容错,假设某个节点不可用,会导致整个索引库都将不可用。所以,需要对分片进行副本容错。每一个分片都会有对应的副本。在Elasticsearch中,默认创建的索引为1个分片、每个分片有1个主分片和1个副本分片。每个分片都会有一个Primary Shard(主分片),也会有若干个Replica Shard(副本分片)
Primary Shard和Replica Shard不在同一个节点上

2.3 指定分片、副本数量

// 创建指定分片数量、副本数量的索引
在这里插入图片描述

2.4 集群status

● Green: 主分片与副本都正常分配
● Yellow: 主分片全部正常分配,有副本分片未能正常分配
● Red: 有主分片未能分配。例如,当服务器的磁盘容量超过85%时,去创建了一个新的索引
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的详细信息 

三、Elasticsearch重要工作流程

3.1 Elasticsearch文档写入原理

在这里插入图片描述

1.选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个coordinating node(协调节点)
2.计算得到文档要写入的分片 shard = hash(routing) % number_of_primary_shards routing 是一个可变值,默认是文档的 _id
3.coordinating node会进行路由,将请求转发给对应的primary shard所在的DataNode(假设primary shard在node1、replica shard在node2)
4.node1节点上的Primary Shard处理请求,写入数据到索引库中,并将数据同步到Replica shard
5.Primary Shard和Replica Shard都保存好了文档,返回client.

注意:es路由分片规则是 shard = hash(routing) % number_of_primary_shards,其中number_of_primary_shards为分片数。

3.2 Elasticsearch检索原理

在这里插入图片描述

  1. client发起查询请求,某个DataNode接收到请求,该DataNode就会成为协调节点(Coordinating Node)
    2.协调节点(Coordinating Node)将查询请求广播到每一个数据节点,这些数据节点的分片会处理该查询请求
    3.每个分片进行数据查询,将符合条件的数据放在一个优先队列中,并将这些数据的文档ID、节点信息、分片信息返回给协调节点 协调节点将所有的结果进行汇总,并进行全局排序
    4.协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据返回给客户端

如何对集群的容量进行规划

一个集群总共需要多少个节点?一个索引需要设置几个分片?规划上需要保持一定的余量,当负载出现波动,节点出现丢失时,还能正常运行。
做容量规划时,一些需要考虑的因素:
● 机器的软硬件配置
● 单条文档的大小│文档的总数据量│索引的总数据量((Time base数据保留的时间)|副本分片数
● 文档是如何写入的(Bulk的大小)
● 文档的复杂度,文档是如何进行读取的(怎么样的查询和聚合)

评估业务的性能需求:
● 数据吞吐及性能需求
○ 数据写入的吞吐量,每秒要求写入多少数据?
○ 查询的吞吐量?
○ 单条查询可接受的最大返回时间?
● 了解你的数据
○ 数据的格式和数据的Mapping
○ 实际的查询和聚合长的是什么样的

ES集群常见应用场景:
● 搜索: 固定大小的数据集
○ 搜索的数据集增长相对比较缓慢
● 日志: 基于时间序列的数据
○ 使用ES存放日志与性能指标。数据每天不断写入,增长速度较快
○ 结合Warm Node 做数据的老化处理

硬件配置:
● 选择合理的硬件,数据节点尽可能使用SSD
● 搜索等性能要求高的场景,建议SSD
○ 按照1∶10的比例配置内存和硬盘
● 日志类和查询并发低的场景,可以考虑使用机械硬盘存储
○ 按照1:50的比例配置内存和硬盘
● 单节点数据建议控制在2TB以内,最大不建议超过5TB
● JVM配置机器内存的一半,JVM内存配置不建议超过32G
● 不建议在一台服务器上运行多个节点

内存大小要根据Node 需要存储的数据来进行估算
● 搜索类的比例建议: 1:16
● 日志类: 1:48——1:96之间
假设总数据量1T,设置一个副本就是2T总数据量
● 如果搜索类的项目,每个节点3116 = 496 G,加上预留空间。所以每个节点最多400G数据,至少需要5个数据节点
● 如果是日志类项目,每个节点31
50= 1550 GB,2个数据节点即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java通过Excel批量上传数据!!!

一、首先在前端写一个上传功能。 <template><!-- 文件上传 --><el-upload class"upload-demo" drag action"" :on-change"onChange" :auto-upload"false"><el-icon class"el-icon--upload"><up…

贪心区间问题(最大不相交区间数量)

题目 给定 N 个闭区间 [ai,bi]&#xff0c;请你在数轴上选择若干区间&#xff0c;使得选中的区间之间互不相交&#xff08;包括端点&#xff09;。 输出可选取区间的最大数量。 输入格式 第一行包含整数 N&#xff0c;表示区间数。 接下来 N 行&#xff0c;每行包含两个整…

时间感知自适应RAG(TA-ARE)

原文地址&#xff1a;Time-Aware Adaptive RAG (TA-ARE) 2024 年 3 月 1 日 介绍 随着大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;出现了新兴能力的概念。前提或假设是LLMs具有隐藏的和未知的能力&#xff0c;等待被发现。企业家们渴望在LLMs中发现一些无人知晓…

论文笔记 - 基于振动信号的减速器故障诊断方法

1.论文摘要 基于振动信号的减速器故障诊断方法, 沈晴,《起重运输机械》,2018 原作者联系方式: shenqing@zmpc.com 这篇文章包含了一个从工程到数据处理和故障定位的完整过程。是一篇综述文档。它介绍了机械设备常见的三类故障(轴,齿轮、轴承)的故障特征,并在一个故障追…

2023年第三届中国高校大数据挑战赛(第二场)C题思路

赛题C&#xff1a;用户对博物馆评论的情感分析 博物馆是公共文化服务体系的重要组成部分。国家文物局发布&#xff0c;2021年我国新增备案博物馆 395 家&#xff0c;备案博物馆总数达 6183 家&#xff0c;排名全球前列&#xff1b;5605 家博物馆实现免费开放&#xff0c;占比达…

指针数组和数组指针(详细解释)

指针数组 指针数组的作用 指针数组和数组指针是C语言中常用的概念&#xff0c;它们分别有不同的作用和用法。 指针数组&#xff1a; 指针数组是一个数组&#xff0c;其中的每个元素都是指针类型。它可以用来存储多个指针&#xff0c;每个指针可以指向不同的数据类型或者相同…

xxl-job学习记录

1、应用场景 例&#xff1a; 某收银系统需要在每天凌晨统计前一天的财务分析、汇总 某银行系统需要在信用卡还款日前三天发短信提醒等 2、为什么需要使用任务调度 spring中提供了注解Scheduled的注解&#xff0c;这个注解也可以实现定时任务的执行 我们只需要在方法上使用这…

设计模式 单例模式

单例模式就是在整个程序运行的过程中&#xff0c;这个类的实例化对象只有一个。 单例模式和private static 有密切的关系。 举一个例子&#xff1a; 一个wife&#xff0c;在法律允许的范围内&#xff0c;只能有一个。 public class Wife{private static Wife wife null; //…

人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)

1.k-means聚类 1.1.算法简介 K-Means算法又称K均值算法&#xff0c;属于聚类&#xff08;clustering&#xff09;算法的一种&#xff0c;是应用最广泛的聚类算法之一。所谓聚类&#xff0c;即根据相似性原则&#xff0c;将具有较高相似度的数据对象划分至同一类簇&#xff0c;…

设计模式学习笔记 - 规范与重构 - 2.保证重构不出错的技术手段

前言 很多工程师对重构这种做法是很认同的&#xff0c;面对项目中的烂代码&#xff0c;也想重构一下&#xff0c;但有担心重构之后出问题&#xff0c;出力不讨好。确实&#xff0c;如果你需要重构的代码是别的同事开发的&#xff0c;你不是特别熟练&#xff0c;在没有任何保障…

2024 年中国高校大数据挑战赛赛题 D:行业职业技术培训能力评价完整思路以及源代码分享

中国是制造业大国&#xff0c;产业门类齐全&#xff0c;每年需要培养大量的技能娴 熟的技术工人进入工厂。某行业在全国有多所不同类型&#xff08;如国家级、 省级等&#xff09;的职业技术培训学校&#xff0c;进行 5 种技能培训。学员入校时需要 进行统一的技能考核&#xf…

数字化转型导师坚鹏:科技金融政策、案例及数字化营销

科技金融政策、案例及数字化营销 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融如何数字化营销&#xff1f; 课程特色&#xff1a; 以案例的方式解读原…

【个人开发】llama2部署实践(二)——基于GPU部署踩坑

折腾了一整天&#xff0c;踩了GPU加速的一堆坑&#xff0c;记录一下。 1.GPU加速方式 上篇已经写了llama2部署的大概流程&#xff1a;【【个人开发】llama2部署实践&#xff08;一&#xff09;】——基于CPU部署 针对llama.cpp文件内容&#xff0c;仅需再make的时候带上参数…

数字建筑欢乐颂,智慧工地共筑美好未来!

在解决农民工人欠薪这一长期困扰建筑业的难题上&#xff0c;某建筑公司响应政策&#xff0c;严格按照实名制管理&#xff0c;实施过程中发现并克服了传统管理模式的痛点&#xff1a;聊天群组的信息时&#xff0c;往往会被淹没在“收到”回复中&#xff0c;影响沟通效率&#xf…

Linux常用操作命令(2)

目录 echo&#xff1a;输出文本到终端或重定向到文件 date&#xff1a;显示当前日期和时间或者设置系统时间 find&#xff1a;查找文件或目录 which&#xff1a;查找命令的路径 kill/killall/pkill&#xff1a;终止进程 ln&#xff1a;创建硬链接或符号链接 sudo&#x…

探索React中的类组件和函数组件

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

每日一题leetcode-找出数组的第K大和

一.题目解析 读完题目后我们知道&#xff0c;该题就是让我们在子序列中求和&#xff0c;我们要在不同的子序列中排序找到第K大的和。何为子序列&#xff1f; 子序列就是在一个数组中抽出一些元素构成一个新的数组即可&#xff0c;不要求一定是连续的&#xff1b; 例如&#x…

深入解析汽车MCU的软件架构

一、背景知识 电动汽车&#xff08;EV&#xff09;正在成为首选的交通方式&#xff0c;为传统内燃机汽车提供了一种可持续发展的环保型替代方案。在电动汽车复杂的生态系统中&#xff0c;众多电子控制单元&#xff08;ECU&#xff09;在确保其高效运行方面发挥着至关重要的作用…

《IAB视频广告标准:综合指南(2022)》之概述篇 - 我为什么要翻译介绍美国人工智能科技公司IAB 系列(2)

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

最优算法100例之03-判断是否是栈的弹出序列

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例…