Elasticsearch简介

举报
Ragnar 发表于 2020/08/25 14:10:24 2020/08/25
【摘要】 基本原理结构Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、 EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成,如图1-2 所示,模块说明如表1-3所示。图 1-2 Elasticsearch 结构表 1-3 模块说明名称说明ClientClient使用HTTP或HT...

基本原理

结构

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

图 1-2 Elasticsearch 结构

els.PNG


表 1-3 模块说明

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

ZooKeeper 集群

ZooKeeper为Elasticsearch集群中各进程提供心跳感应机制。

基本概念

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

● Type:文档类型,相当于数据库中的Table。一个索引对应一个文档类型。

● 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通过RESTful API或者其他语言(比如Java) API提供丰富访问接 口,使用集群发现机制,支持脚本语言,支持丰富的插件。底层基于Lucene,保 持Lucene绝对的独立性,通过本地文件、共享文件、HDFS完成索引存储,如图 1-3所示。

图 1-3 内部架构

els01.PNG

● 倒排序索引 传统的搜索方式(正排序索引,如图1-4所示)按照文档编号进行搜索,搜索时要 扫描每个文档关键字的信息,直到找出所有满足条件的关键字的信息。正排序索 引的优点是易于维护,缺点搜索耗时太长。

图 1-4 正排序索引

els02.PNG

而Elasticsearch(Lucene)的搜索则是采用了倒排序索引(如图1-5所示)的方 式。由不同的关键字组成的表,称为“词典”,其中包含了各种关键字和关键字 的统计信息(包含所在文档编号,文档中位置和出现频率等)。通过倒排序索引 进行搜索,就是通过关键字查询相对应的文档编号和文档中所在位置,再找到完 整文档,类似于查字典,或通过查书目录查指定页码书的内容。倒排在构建索引 时较为耗时且维护成本较高,但是搜索耗时短。

图 1-5 倒排序索引

els03.PNG

● 分布式索引流程 Elasticsearch分布式索引操作流程如图1-6所示。

图 1-6 分布式索引流程

els04.PNG

操作流程说明如下: 阶段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消息。 

● 分布式搜索流程 Elasticsearch分布式搜索操作流程分为两个阶段,即查询阶段与获取阶段。 查询阶段如图1-7所示。

图 1-7 分布式搜索操作流程之查询阶段

els05.PNG

操作流程说明如下:

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

     阶段2:Node 3将检索请求发送给该index中的每一个shard,此时会采取轮询策 略,在primary shard及其所有replica shard中随机选择一个,让读请求负载均 衡。每个shard在本地执行检索,并将结果排序添加到本地。 阶段3:每个shard返回本地所记录的结果,发送给Node 3。Node 3将这些值合 并,做全局排序。 查询阶段主要定位了所要检索数据的具体位置,而获取阶段的任务就是将这些定 位好的数据内容取回并返回给客户端。获取阶段如图1-8所示。

图 1-8 分布式搜索操作流程之获取阶段

els06.PNG

操作流程说明如下:

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

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

阶段3:当Node 3获取到了所有shard返回的文档后,Node 3将它们合并成一条汇 总结果,返回给客户端。 ● 分布式批量索引流程

图 1-9 分布式批量索引流程

els10.PNG

操作流程说明如下: 

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

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

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

● 分布式批量搜索流程

图 1-10 分布式批量搜索流程

els11.PNG

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

● 路由算法 Elasticsearch中提供了两种路由算法: – 默认路由: shard=hash(routing)%number_of_primary_shards ,该路 由策略扩展受到shards个数的限制,扩容的时候需要成倍扩容(ES6.x),并 且在创建index的时候要指定未来允许扩容的规模。ES5.x不支持扩容;ES7.x 可以自由扩容。 – 自定义路由:该路由方式,通过指定routing的方式,可以影响文档写入到哪 个shard,也可以仅仅检索特定的shard。 

● 平衡算法 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) 

● 单节点多实例部署 在同一个节点上部署多个Elasticsearch实例,根据IP和不同的端口号来区分不同的 Elasticsearch实例。可以提高单节点CPU、内存和磁盘的利用率,同时提高 Elasticsearch的索引和搜索能力。

图 1-11 单节点多实例部署

els12.PNG

● 副本自动跨节点分配策略 单节点多实例部署下,多副本时,如果只做到跨实例分配,存在单点故障,增加 默认配置cluster.routing.allocation.same_shard.host:true即可。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。