聊一聊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的索引的分片分配机制》

相关推荐
G皮T8 分钟前
【Elasticsearch】检索高亮
大数据·elasticsearch·搜索引擎·全文检索·kibana·检索·高亮
zskj_zhyl5 小时前
智慧养老丨从依赖式养老到自主式养老:如何重构晚年生活新范式
大数据·人工智能·物联网
哲科软件5 小时前
从“电话催维修“到“手机看进度“——售后服务系统开发如何重构客户体验
大数据·智能手机·重构
zzywxc7875 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
专注API从业者5 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
Leon.ENV5 小时前
meilisearch-轻量级搜索引擎
搜索引擎
一瓣橙子7 小时前
缺少关键的 MapReduce 框架文件
大数据·mapreduce
永洪科技14 小时前
永洪科技荣获商业智能品牌影响力奖,全力打造”AI+决策”引擎
大数据·人工智能·科技·数据分析·数据可视化·bi
weixin_3077791314 小时前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习
大只鹅14 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch