Elasticsearch原理剖析

news2024/10/6 16:26:12

一、 Elasticsearch结构

Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成,如下图所示,模块说明如表下所示。

在这里插入图片描述
说明如表:

名称说明
ClientClient使用HTTP或HTTPS协议同Elasticsearch集群中的EsClient以及各EsNode实例进程进行通信,进行分布式索引和分布式搜索操作。
EsMasterEsMaster为Elasticsearch的主节点,负责集群的管理,主要是集群相关的操作,如决定分片的分配、跟踪集群节点等。
EsNode1-9EsNode1-9为Elasticsearch的数据节点,主要是存储索引数据,对文档进行增删改查、聚合等操作。
EsClientEsClient为Elasticsearch的协调节点,只处理路由请求、搜索,及分发索引等操作。自身不存储数据,也不管理集群。
ZooKeeper集群ZooKeeper为Elasticsearch集群中各进程提供心跳感应机制

二、Elasticsearch基本概念

  • Index: 即索引,是Elasticsearch中一个逻辑命名空间,指向一个或多个分片,内部Apache Lucene实现索引中数据的读写。索引与关系数据库实例Table相当。一个Elasticsearch实例可以包含多个索引。

  • Document: 文档,是可以被索引的基本单位,特指最顶层结构或根对象序列化成的JSON数据。相当于数据库中的Row。一个索引包含多个文档。

  • Mapping:映射,用来约束字段的类型,可以根据数据自动创建。相当于数据库中的Schema。

  • Field: 字段,组成文档的最小单位。相当于数据库中的Column。每个文档包含多个字段。

  • EsMaster: 主节点,可以临时管理集群级别的一些变更,例如新建或删除索引、增加或移除节点等。主节点不参与文档级别的变更或搜索,也不接收请求。在流量增长时,该主节点不会成为集群的瓶颈。

  • EsNode: Elasticsearch节点,一个节点就是一个Elasticsearch实例。

  • EsClient: Elasticsearch节点,该节点只能路由请求,处理搜索减少阶段和分发批量索引。其自身不进行数据存储,也没有管理集群的能力。

  • Shard: 分片,Elasticsearch中最小级别的工作单元,文档存储在分片中,并且在分片中被索引。

  • Primary Shard: 主分片,索引中的每个文档属于一个单独的主分片,主分片的数量决定了索引最多能存储多少数据。

  • Replica Shard: 复制分片,它是主分片的一个副本,可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。

  • Recovery: 代表数据恢复或叫数据重新分布,Elasticsearch在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,故障的节点重新启动时也会进行数据恢复。

  • Gateway: 代表Elasticsearch索引快照的存储方式,默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。Gateway对索引快照进行存储,当这个Elasticsearch集群关闭再重新启动时就会从Gateway中读取索引备份数据。支持多种类型的Gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS。

  • Transport: 代表Elasticsearch内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互,同时它支持HTTP协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

  • ZooKeeper集群: 在Elasticsearch是必须的,为其提供安全认证信息的存储等功能。

三、Elasticsearch原理

1.Elasticsearch内部架构

Elasticsearch通过RESTful API或者其他语言(比如Java)API提供丰富访问接口,使用集群发现机制,支持脚本语言,支持丰富的插件。底层基于Lucene,保持Lucene绝对的独立性,通过本地文件、共享文件、HDFS完成索引存储,如下图所示。
在这里插入图片描述

2.倒排序索引

传统的搜索方式(正排序索引,如图3所示)按照文档编号进行搜索,搜索时要扫描每个文档关键字的信息,直到找出所有满足条件的关键字的信息。正排序索引的优点是易于维护,缺点搜索耗时太长。如下图所示:
在这里插入图片描述
而Elasticsearch(Lucene)的搜索则是采用了倒排序索引(如下图所示)的方式。由不同的关键字组成的表,称为“词典”,其中包含了各种关键字和关键字的统计信息(包含所在文档编号,文档中位置和出现频率等)。通过倒排序索引进行搜索,就是通过关键字查询相对应的文档编号和文档中所在位置,再找到完整文档,类似于查字典,或通过查书目录查指定页码书的内容。倒排在构建索引时较为耗时且维护成本较高,但是搜索耗时短。
在这里插入图片描述

2.Elasticsearch分布式索引流程

Elasticsearch分布式索引操作流程如下图所示。
在这里插入图片描述
操作流程说明如下:

阶段1: 客户端发送一个索引请求给任意节点,假设是Node 1。

阶段2: Node 1通过请求判断出该文档应该被存储的分片,假设是shard 0这个分片中,因此Node 1会把请求转发到shard 0的primary shard P0存在的Node 3节点上。

阶段3: Node 3在shard 0的primary shard P0上执行请求。如果请求执行成功,Node 3并行地将该请求发给shard 0的所有存在于Node 1和Node 2中的replica shard R0上。如果所有的replica shard都成功地执行了请求,那么将会向Node 3回复一个成功确认,当Node 3收到了所有replica shard的确认信息后,则向用户返回一个Success消息。

3.Elasticsearch分布式搜索流程

Elasticsearch分布式搜索操作流程分为两个阶段,即查询阶段与获取阶段。分布式搜索操作流程之查询阶段如下图所示:

3.1分布式搜索操作流程之查询阶段

在这里插入图片描述操作流程说明如下:

阶段1: 客户端发送一个检索请求给任意节点,假设是Node 3。

阶段2: Node 3将检索请求发送给该index中的每一个shard,此时会采取轮询策略,在primary shard及其所有replica shard中随机选择一个,让读请求负载均衡。每个shard在本地执行检索,并将结果排序添加到本地。

阶段3: 每个shard返回本地所记录的结果,发送给Node 3。Node 3将这些值合并,做全局排序。

查询阶段主要定位了所要检索数据的具体位置,而获取阶段的任务就是将这些定位好的数据内容取回并返回给客户端。获取阶段如下图所示:

3.2分布式搜索操作流程之获取阶段

在这里插入图片描述操作流程说明如下:

阶段1: Node 3获取了所有待检索数据的定位之后,发送请求给与数据相关的shard。

阶段2: 每个收到Node 3请求的shard,将读取相关文档中的内容,并将它们返回给Node 3。

阶段3: 当Node 3获取到了所有shard返回的文档后,Node 3将它们合并成一条汇总结果,返回给客户端。

4.Elasticsearch分布式批量索引流程

在这里插入图片描述
操作流程说明如下:

阶段1: 客户端向Node 1发送bulk请求。

阶段2: Node 1为每个分片构建批量请求,然后转发到这些请求所需的主分片上。

阶段3: 主分片一个接一个的按序执行操作。当一个操作执行完,主分片转发新文档(或者删除部分)给对应的复制节点,然后执行下一个操作。复制节点操作完成后报告给请求节点,请求节点整

5.Elasticsearch分布式批量搜索流程

在这里插入图片描述操作流程说明如下:

阶段1: 客户端向Node 1发送mget请求。

阶段2: Node 1为每个分片构建一个多条数据检索请求,然后转发到这些请求所需的主分片或复制分片上。当所有回复被接收,Node 1构建响应并返回给客户端。

6.Elasticsearch路由算法

Elasticsearch中提供了两种路由算法:

  • 默认路由:shard=hash(routing)%number_of_primary_shards
  • 自定义路由:该路由方式,通过指定routing的方式,可以影响文档写入到哪个shard,也可以仅仅检索特定的shard。

7.Elasticsearch平衡算法

Elasticsearch中提供了自动平衡功能,适用于扩容、减容、导入数据场景。算法如下:

  • weight_index(node, index) = indexBalance * (node.numShards(index) - avgShardsPerNode(index))
  • Weight_node(node, index) = shardBalance * (node.numShards() -avgShardsPerNode)
  • weight(node, index) = weight_index(node, index) + weight_node(node,index)

8.Elasticsearch单节点多实例部署

在同一个节点上部署多个Elasticsearch实例,根据IP和不同的端口号来区分不同的Elasticsearch实例。可以提高单节点CPU、内存和磁盘的利用率,同时提高Elasticsearch的索引和搜索能力。具体部署如下图所示:
在这里插入图片描述

9.Elasticsearch副本自动跨节点分配策略

单节点多实例部署下,多副本时,如果只做到跨实例分配,存在单点故障,增加默认配置cluster.routing.allocation.same_shard.host:true即可。
在这里插入图片描述

四、Elasticsearch与HBase的关系

Elasticsearch索引HBase数据是将HBase数据写到HDFS的同时,Elasticsearch建立相应的HBase索引数据。其中索引ID与HBase数据的rowkey对应,保证每条索引数据与HBase数据的唯一,实现HBase数据的全文检索。

批量索引: 针对HBase中已有的数据,通过提交MapReduce任务的形式,将HBase中的全部数据读出,然后在Elasticsearch中建立索引,索引过程如下图所示:
在这里插入图片描述

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

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

相关文章

统计连续字符-2022年全国青少年信息素养大赛Python国赛第7题

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第9讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计…

2.1 线性表的逻辑结构与存储结构

在之前的数据结构知识铺垫2:物理结构与逻辑结构一文中, 我们介绍了物理结构与逻辑结构, 物理结构即存储结构. 本篇文章我们着重探讨一下线性表的逻辑结构与存储结构. 1. 线性表的逻辑结构 图1. 线性表的逻辑结构 线性表是具有相同特性的数据元素的有限序列, 每个元…

SHELL CLASH配置规则

本地环境 小米AX1800路由器,旧版(黢黑的四方立柱体,没有天线),已降级至固定版本小米 AX1800 1.0.336 问题 因为某些网络原因,在WiFi中安装了shell clash作为互联网代理,使用部分软件时提示网…

ChatGPT在大学里该怎么用?24所英国顶级大学宣布立场!

自从ChatGPT横空出世以来,许多行业都被得到赋能。而在教育行业,许多大学生把它视为写作业的“神器”:节省查阅复杂文献的时间、编写简单的Python代码、辅助学生理解知识点,甚至直接“生成”论文...... 但这些行为,学校…

个人使用:Windows下 OpenCV 的下载安装(2021.12.4详细)

一、下载OpenCV   到OpenCV官网Release(发布)板块下载OpenCV-4.5.4 Windows。 下载后是这样的 然后双击他,解压,就是大佬们说的安装,实质就是解压一下,解压完出来一个文件夹,其他什么也没发生。你把这个文件夹放在哪…

4、Kubernetes 架构、理解 k8s 架构

kubeadm 用于初始化 Cluster。 kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。 kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。 Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Ku…

【Linux从入门到精通】gdb调式技巧大全

本篇文章会对开发工具:gdb调试器的使用进行讲解。希望本篇文章会对你有所帮助。 目录 一、gdb简单介绍 二、gdb 调试 2、1 加入调试信息 2、2 调试命令 2、2、1 gdb可执行程序——进入调式 2、2、2 l行号/函数名——显示代码 2、2、3 b行号/函数名——打断点 2、2、4 infob——…

mysql数据库的定时备份脚本(docker环境和非docker环境)

一、非docker安装的MySQL MySQL作为一种常用的数据库管理系统,拥有着众多的优秀特性,如高性能、高可靠性、高可扩展性等。然而,在数据备份上,也需要我们进行一定的处理,这样才能保证数据的安全性。因此,在这里我们将介绍如何定时备份MySQL数据库。 我们可以通过MySQL自…

Filebeat+ELK (grok、mutate、mutiline、date)详解

目录 一:FilebeatELK 部署 1.安装 Filebeat 2.设置 filebeat 的主配置文件 3.在 Logstash 组件所在节点上新建一个 Logstash 配置文件 4.访问登录 二:grok 正则捕获插件 1、内置正则表达式调用 2、举例说明 3、自定义表达式…

飞腾开发者平台上线龙蜥专区,为开发者提供硬核技术支持

开源的本质在“人”,开源社区是由一个个做贡献的人构建起来的。近日,飞腾开发者平台联合国内领先的操作系统开源社区——龙蜥社区,推出龙蜥专区,旨在为广大开源爱好者提供社区前沿技术和一线开源文档。 龙蜥专区(专区…

从低效率到高效率,开源大数据技术助力职场办公质的飞跃!

在办公流程化管理越来越流行的今天,如何让职场办公实现高效率飞跃和发展?应用开源大数据技术和低代码技术平台,可以实现这一目的,助力企业从传统的开发模式中剥离出来,实现高效率办公发展。今天,趁着大好契…

天池大赛中药说明书实体识别挑战冠军方案开源(一)方案及模型原理说明

目录 Introduction 导言赛题背景任务描述数据探索分析 核心思路数据预处理Baseline: BERT-CRF优化1:对抗训练优化2:混合精度训练(FP16)优化3:多模型融合优化4:半监督学习其他无明显提升的尝试方案最终线上成…

Linux开发工具【gdb】

Linux开发工具【gdb】 程序的发布方式有两种,debug模式(调试版本)和release模式(发布版本)。Linux下gcc/g出来的二进制程序,默认是release模式。无法保证我们的代码有时候会出现问题,这时就要使…

博客质量分计算——发布 version 5.0

目录 1. 背景2. 质量分 version 5.02.1 version 4 存在问题分析2.2 version 5.0 改进2.3 消融分析2.3.1 正向积极得分消融实验2.3.2 正向累积得分单变量实验2.3.3 非高分文章消融实验 2.4 V4 和 V5.0 版本质量分分布对比 3. 总结4. 参考 1. 背景 博客质量分顾名思义是用于衡量…

最新CMS指纹识别技术

点击星标,即时接收最新推文 本文部分节选于《web安全攻防渗透测试实战指南(第二版)》,即将上架,敬请期待。 指纹识别 1.CMS简介 CMS(Content Management System,内容管理系统&#x…

微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录

数据绑定,事件绑定,事件传参与数据同步 1. 数据绑定1.1. 在data中定义数据1.2. 在wxml中渲染数据 (mustache语法) 2. 事件绑定2.1. 事件2.2. 常用的事件2.3. 事件对象的属性列表2.4. target 和 currentTarget的区别 3. 事件传参与…

YOLOv5/v7 引入渐进特征金字塔网络 AFPN 结构 | 《2023年6月28日最新发表》

包含 yolov5-AFPN.yaml 和yolov7-AFPN.yaml 论文地址:https://arxiv.org/pdf/2306.15988.pdf 代码地址:https://github.com/gyyang23/AFPN 多尺度特征在目标检测任务中对于编码具有尺度变化的对象非常重要。一种常见的多尺度特征提取策略是采用经典的自顶向下和自底向上的特…

53 # 反转二叉树

由于我学习的视频这一节跟上一节重复。没找到该节的学习资源,我自己参考网上实现的,有问题还请指出。 如图,下面实现反转 // 节点 class Node {constructor(element, parent) {this.element element; // 存的数据this.parent parent; // …

Stable Diffusion - ReV Animated v1.2.2 的 2.5D 模型与提示词

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131655644 ReV Animated v1.2.2 模型能够创建类似 2.5D 的图像生成。该模型是 checkpoint 合并,是其他模型的产物,以创建源…

微擎后台getshell,低权限也可以

/web/index.php?csite&aeditor 这个文件可以编辑html,然后前台会解析成php 没测试最新版 比如编辑专题:/web/index.php?csite&aeditor&dopage&multiid0 上架抓包 改html内容为php 复制前台url 访问之 博客原文: 微擎后…