聊一聊Elasticsearch的基本原理与形成机制

1、搜索引擎的基本原理

通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图:
在这里插入图片描述

  1. 数据采集模块负责采集需要搜索的数据源。

  2. 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户把切分出来的词作为搜索条件就可以搜索到对应的文本了。

  3. 索引存储模块是将采集到的数据按着定义好的结构写入到索引。

    搜索引擎的索引数据是根据倒排索引来组织的。倒排索引中保存了每个词在索引中所在文档的编号以及文档中的所在位置,如下图: 在这里插入图片描述

  4. 搜索模块是根据用户的输入找到索引中匹配的文档。

2、Elasticsearch集群是如何形成的(形成机制)

2.1、主节点、主候选节点、投票配置

在讲ES集群如何形成(形成机制)之前,需要先介绍几个重要的概念:主节点、主候选节点、投票配置。

  1. 主节点(master node):每个集群有且只有一个主节点,主节点作为整个集群的管理者,维护着整个集群的元数据,当集群内的节点数量发生变化时更新集群状态并将状态发布给集群中的其他节点。同时还负责分片的分配。
  2. 主候选节点(master-eligible node):有权参与主节点选举的节点,即主节点的候选人名单。
  3. 投票配置(voting configuration):可参与投票的节点名单(即有投票权的节点)。通常与主候选节点的列表一致。在选举主节点的时候,只有得到投票配置中半数节点投票的节点才能称为主节点。

如果把主节点选举看成美国大选的话,那么主节点就是总统,主候选节点就是总统候选人,而投票配置就是选民,得到半数选民支持的总统候选人将成为下一任总统。

2.2 一个全新的Elasticsearch集群形成所经历的步骤

一个全新的ES集群启动的时候,需要通过集群节点的引导来把各自孤立的节点统一起来对外提供服务。这个集群节点的引导分为以下四个步骤:

  1. 初始化投票配置

    确定主候选节点的列表,并将主候选节点列表写入投票配置。

  2. 选举主节点

    有投票配置中的主候选节点发起主节点的选举,当超过一半的主候选节点达成一致,则主节点选举成功。

  3. 发现集群的其他节点

    节点尝试和节点上配置的主候选节点列表中节点进行连接,如果成功连接了则发起加入集群的申请,主节点确认连接成功后将该节点加入到集群中并修改集群的状态,然后将集群的最新状态发布到集群中的各个节点上。

    这里需要注意的是:节点上的配置的主候选节点列表中可能没有主节点,但是没关系,能通过列表中的节点间接的找到主节点,也同样让主节点将当前节点加入到集群中。

  4. 集群中的所有节点发现完毕后,就可以对外提供统一的服务了。

2.3 集群状态的发布过程

ES集群中的主节点更新完集群状态后,会将新的状态发布到集群中的其他节点上,这个过程有两个阶段:

  1. 预提交阶段:主节点将最新的集群状态发布给各节点,各节点接收到状态数据后保存到本地并向主节点发送确认响应。如下图: 在这里插入图片描述
  2. 正式提交阶段:如果主候选节点中中有一半的节点返回确认响应成功,那么将进入正式提交阶段。主节点通知所有节点应用最新的集群状态,每个节点应用最新的集群状态后,还会再向主节点发送最终确认响应。当所有的确认响应都成功时,本次状态发布完成。如下图:
    在这里插入图片描述

集群状态的发布是有时间限制的,如果主节点不能在规定时间内(默认为30秒)将集群状态发布成功,则需要重新选举出一个新的主节点。如果某个非主节点无法在规定时间内(默认为90秒)返回给主节点最终的确认响应,则主节点会认为该节点已经掉线,会将该节点从集群中移除。

主节点和非主节点会保持周期性的相互联系,即相互发送心跳检测包。如果某个非主节点多次心跳检测失败,则主节点会认为该节点已掉线,并将该节点从集群中移除。如果主节点掉线,则需要通过投票配置来选出一个新的主节点。

3、参考文献

  • 《Elasticsearch数据搜索与分析实战》——王深湛

上一篇:《聊一聊Elasticsearch的一些基本信息》
下一篇:《聊一聊Elasticsearch的索引的分片分配机制》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

**AI的三大支柱:神经网络、大数据与GPU计算的崛起之路**

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Python | Leetcode Python题解之第542题01矩阵

题目: 题解: class Solution:def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:m, n len(matrix), len(matrix[0])# 初始化动态规划的数组,所有的距离值都设置为一个很大的数dist [[10**9] * n for _ in range(m)]…

RabbitMQ 管理平台(控制中心)的介绍

文章目录 一、RabbitMQ 管理平台整体介绍二、Overview 总览三、Connections 连接四、Channels 通道五、Exchanges 交换机六、Queues 队列查看队列详细信息查看队列的消息内容 七、Admin 用户给用户分配虚拟主机 一、RabbitMQ 管理平台整体介绍 RabbitMQ 管理平台内有六个模块&…

【机器学习】聚类算法分类与探讨

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

易语言模拟真人动态生成鼠标滑动路径

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

Linux:防火墙和selinux对服务的影响

1-1selinux 1-1 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 1-2 SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是…

华为eNSP:QinQ

一、什么是QinQ? QinQ是一种网络技术,全称为"Quantum Insertion",也被称为"Q-in-Q"、"Double Tagging"或"VLAN stacking"。它是一种在现有的VLAN(Virtual Local Area Network&#xff0…

运动控制 PID算法

文章目录 一、自动控制简介1.1 开环控制系统1.2 闭环控制系统1.3 电机速度闭环控制系统 二、PID算法2.1 比例2.1.1 静态误差 2.2 积分2.3 微分环节2.4 位置式PID2.5 增量式PID 一、自动控制简介 自动控制系统是使用自动控制装置对关键控制参数进行自动控制,使它在收…

Pytorch实现transformer语言模型

转载自&#xff1a;| 03_language_model/02_Transformer语言模型.ipynb | 从头训练Transformer语言模型 |Open In Colab | Transformer语言模型 本节训练一个 sequence-to-sequence 模型&#xff0c;使用pytorch的 nn.Transformer <https://pytorch.org/docs/master/nn.ht…

C语言例题练手(1)

前几篇博客的内容已经涉及了C语言的部分语法知识&#xff0c;我们可以尝试做一些编程题&#xff0c;或者换一种说法就是可以写出什么样的程序以此来解决一些问题。 题目来自牛客网https://www.nowcoder.com和C语言菜鸟教程C 语言教程 | 菜鸟教程 数值计算 【例1】带余除法计…

Spring AI 核心概念

SpringAI 核心概念 1. Models2. Prompts3. Prompt Templates4. Embeddings5. Tokens6. Structured Output7. Bringing Your Data & APIs to the AI Model7.1 Retrieval Augmented Generation7.2 Function Calling 1. Models AI 模型是用于处理和生成信息的算法&#xff0c…

http请求响应详解

http介绍 http协议&#xff1a; Http”协议称为是“超文本传输协议”&#xff08;HTTP-Hypertext transfer protocol&#xff09;。它定义了浏览器怎么向万维网服务器请求万维网文档&#xff0c;以及服务器怎么样把文档传送给浏览器。 https协议&#xff1a; 传统的HTTP协议…

直播系统搭建教程安装说明

需要安装的软件(宝塔【软件商店】中查找安装): 1.PHP7.0 ~ PHP7.3 需要安装的扩展:(宝塔【PHP管理】【安装扩展】中安装) *PDO PHP Extension * MBstring PHP Extension * CURL PHP Extension * Mylsqi PHP Extension * Redis PHP Extension * fileinfo PHP Extension …

redis7学习笔记

文章目录 1. 简介1.1 功能介绍1.1.1 分布式缓存1.1.2 内存存储和持久化(RDBAOF)1.1.3 高可用架构搭配1.1.4 缓存穿透、击穿、雪崩1.1.5 分布式锁1.1.6 队列 1.2 数据类型StringListHashSetZSetGEOHyperLogLogBitmapBitfieldStream 2. 命令2.1 通用命令copydeldumpexistsexpire …

51c~C语言~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12428240 一、C语言和C的区别 ​ C语言虽说经常和C在一起被大家提起&#xff0c;但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准&#xff0c;C是C99标准的。C89就是在1989年制定的标准&#xff0c;如今最新…

【论文解读】EdgeYOLO:一种边缘实时目标检测器(附论文地址)

论文地址&#xff1a;https://arxiv.org/pdf/2302.07483 这篇文章的标题是《EdgeYOLO: An Edge-Real-Time Object Detector》&#xff0c;由中国北京理工大学的Shihan Liu、Junlin Zha、Jian Sun、Zhuo Li和Gang Wang共同撰写。这篇论文提出了一个基于最新YOLO框架的高效、低复…

基于SSM的企业管理系统(源码+lw+调试+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【MyBatis源码】CacheKey缓存键的原理分析

文章目录 Mybatis缓存设计缓存KEY的设计CacheKey类主体CacheKey组成CacheKey如何保证缓存key的唯一性 Mybatis缓存设计 MyBatis 每秒过滤众多数据库查询操作&#xff0c;这对 MyBatis 缓存键的设计提出了很高的要求。MyBatis缓存键要满足以下几点。 无碰撞&#xff1a;必须保证…

Mac M1 Docker创建Rocketmq集群并接入Springboot项目

文章目录 前言Docker创建rocketmq集群创建rocketmq目录创建docker-compose.yml新增broker.conf文件启动容器 Springboot 接入 rocketmq配置maven依赖修改appplication.yml新增消息生产者新增消费者测试发送消息 总结 前言 最近公司给配置了一台mac&#xff0c;正好有时间给装一…

pycharm小游戏贪吃蛇及pygame模块学习()

由于代码量大&#xff0c;会逐渐发布 一.pycharm学习 在PyCharm中使用Pygame插入音乐和图片时&#xff0c;有以下这些注意事项&#xff1a; 插入音乐&#xff1a; - 文件格式支持&#xff1a;Pygame常用的音乐格式如MP3、OGG等&#xff0c;但MP3可能需额外安装库&#xf…