Elasticsearch架构原理

news2024/10/2 1:30:06

一. 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.coloradmin.cn/o/1505461.html

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

相关文章

kali当中不同的python版本切换(超简单)

kali当中本身就是自带两个python版本的 配置 update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --install /usr/bin/python python /usr/bin/python3 150 切换版本 update-alternatives --config python 0 1 2编号选择一个即可…

2024护网面试题精选(二)完

0x02. 内网渗透篇 00- 内网渗透的流程 拿到跳板后,先探测一波内网存活主机,用net user /domian命令查看跳板机是否在域 内,探测存活主机、提权、提取hash、进行横向移动,定位dc位置,查看是否有能直接提权域 管的漏洞…

springboot整合shiro的实战教程(二)

文章目录 整合思路1.创建springboot项目2.引入依赖3.创建Shiro Filter0.创建配置类1.配置shiroFilterFactoryBean2.配置WebSecurityManager3.创建自定义Relm4.配置自定义realm5.编写控制器跳转至index.html6.加入资源的权限控制7. 常见过滤器 登录认证实现登录界面开发controll…

复盘-PPT

调整PPT编号起始页码在设计→幻灯片大小 设置所有以及文本项目符号 ## 打开母版,找到对应级别设置重置 当自动生成的smartart图形不符合预期时

set函数

set() 函数创建的集合具有以下特点: 无序性(Unordered):集合中的元素没有固定的顺序,每次输出的顺序可能不同。 唯一性(Unique):集合中的元素是唯一的,重复的元素会被自…

LeetCode刷题笔记之两数相加【数组】【中等】

两数相加 刷题笔记 🕥日期: 2024/03/09 题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同…

C++面试宝典一部分

今天整理书籍资料时,发现多年前打印的面试资料,拍照分享给大家。

挑战杯 基于计算机视觉的身份证识别系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-sen…

博士推荐 | 美国知名化工企业研发主管,高分子科学与工程博士

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态,用科技解决职业领域问题,提升行业数字化服务水平,提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

Python学习之基础语法

一、HelloWorld 二、Python基础语法 2.1 字面量 定义:在代码中,被写下来的固定的值,称之为字面量。 常用的6种值的类型 字符串 Python中,字符串需要用双引号包围; 被双引号包围的都是字符串 666 13.14 "黑马…

【C++初阶】第五站:C/C++内存管理 (匹配使用,干货到位)

前言: 本文知识点: 1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理4. operator new与operator delete函数 5. new和delete的实现原理 (干货在此) 6. 定位new表达式(placement-new)7. 常见面试题 目录 C/C内…

MybatisPlus知识点总结(基于黑马2023MybatisPlus课程)

MybatisPlus知识点总结 配套资料 黑马微服务框架笔记,内含mpMybatisPlus.pptxMyBatis-Plus (mp中文官网) 快速入门 入门案例 使用MybatisPlus的基本步骤:1.引入MybatisPlus依赖,代替Mybatis依赖2.定义Mapper接口并继…

浅谈2024 年 AI 辅助研发趋势!

目录 ​编辑 引言 一、AI辅助研发现状 1. 技术发展 2. 工具集成 3. 应用场景 二、AI辅助研发趋势 1. 更高的自动化程度 2. 更高的智能化程度 3. 更多的领域应用 4. 更高的重视度 三、结论 四. 完结散花 悟已往之不谏,知来者犹可追 创作不易&#xff…

编码器-解码器模型(Encoder-Decoder)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 编码器-解码器模型简介 Encoder-Decoder算法是一种深度学习模型结构,广泛应用于自然语言处理(NLP)、图像处理…

红包题第一弹

下载附件,发现有86个压缩包 现每个压缩包里面都有图片,010打开图片末尾都有base64部分,并且每个压缩包里面图片末尾的base64长度一样,刚好每一张的base64长度为100。猜测需要拼接起来然后解码 写个python脚本 import os import …

Midjourney绘图欣赏系列(九)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

SpringBoot多数据源切换 多数据源事务解决方案 二

SpringBoot多数据源事务解决方案 https://blog.csdn.net/u013407099/article/details/124526396多数据源切换下保证事务解决方案 https://blog.csdn.net/reee112/article/details/90442542概述 前情提要 多数据源切换流程结构图如下所示,包含几个组成元素&#xff…

浪潮信息InManage升级发布 三大功能释放数据中心运维管理压力

近日,浪潮信息官网开放了数据中心管理平台InManage全新版本的开放体验渠道,升级后的InManage拥有更强大的功能体验,可以有效解决大模型等AIGC应用对于数据中心的运维管理压力,通过全新功能的加持,浪潮信息将让数据中心…

Flutter 开发环境搭建-VS Code篇

1.准备环境 Java SDK 下载及安装Flutter SDK 安装及配置环境变量 下载地址将flutter sdk解压目录下的bin目录放到系统环境变量中 检查环境,在系统终端中输入: # 打印flutter sdk版本号 flutter --version# 检查flutter运行环境 flutter doctor第一次运…

(C语言)strlen函数模拟实现(三种方法)

目录 1. strlrn函数 2. 注意事项&#xff1a; 3. 计数器法 4. 指针减指针方法&#xff1a; 5. 递归方法&#xff1a; 1. strlrn函数 头文件<string.h> 实现函数模拟须知&#xff1a; • 字符串以 \0 作为结束标志 &#xff0c;strlen函数返回的是在字符串中 \0 …