Elasticsearch架构图

一、整体架构图如下

Elasticsearch架构图.png


Cluster:ES集群,高可用和高容错,一个集群下有多个节点。

Node:集群中得每个实例成为节点。节点根据配置不同有各自不同得职责:

    1.主节点:负责集群层面得工作,如创建、删除索引,跟踪节点位置,决定分片位置。不负责读写数据

    2.数据节点:负责数据层面得工作,如数据的保存、修改、删除。对CPU、内存、IO要求较高

    3.预处理节点:负责写入数据前的一些预处理

    4.协调节点:用以转发客户端的请求,一般情况下,每个节点都是协调节点

Index:索引,指向一个或多个物理存储分片的逻辑命名空间,类似于Oracle的库或表空间

Type:类型,类似于Oracle的表。ES6之后,一个Index下只允许建一个Type,ES7之后,取消了Type的概念

Shard:分片,底层的基本读写单位,每个分片都是一个Lucene实例,每个分片都有完整的建立索引处理请求的能力。多分片是为了分割巨大索引,实现并发读写。分为主分片(PrimaryShard)和副分片(ReplicaShard)来实现高可用和读写分离。查询可在副分片上执行

Segment:段,分片的Lucene由多个子索引(Lucene.index)组成,这些子索引就是段。每个段都包含索引文件和数据文件

Document:文档,是可被索引的基础单位信息,类似于Oracle表中的一条数据

Field:域,文档中不同类型的信息,类似于Oracle表中的字段,也就是一条数据的一个字段

Term:词,索引的最小单位,是经过分词处理后的字符串



二、Shard读写逻辑

如下图,集群内有3个节点,每个节点2个分片,R表示ReplicaShard副分片,P表示PrimaryShard主分片。node1为分片2的主分片P1,node3有分片1的主分片P0,而node2的2个分片都是副分片

image.png


1.写入流程如下:

image.png

(1)客户端向Node1(master)发送新建、索引或者删除请求。

(2)根据节点使用文档的_id确定文档属于分 0(_id%2=0,通过取余确定数据所在分片)。请求会被转发到Node3因为分片 0 的主分片目前被分配在 Node3上。

(3)Node 3在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。

在客户端收到成功响应时,文档变更已经在主分片和所有副本分片执行完成,变更是安全的。

(现在的es版本是可用shard过半就可以写入,成功后会发送消息给master,所以如果分片设置为1主1副本的时候,那默认的就是主分片写如成功了就会返回成功。)


2.查询流程如下:

image.png

(1)客户端向Node1发送获取请求。

(2)节点使用文档的_id来确定文档属于分片0,分片0的数据在三个节点上都有。 在这种情况下,它会根据负载均衡策略将请求转发到其中一个,比如Node2 。

(3)Node2将文档返回给Node1然后将文档返回给客户端。

在处理读取请求时,协调结点在每次请求的时候都会通过轮询所有的副本分片来达到负载均衡。

在文档被检索时,已经被索引的文档可能已经存在于主分片上但是还没有复制到副本分片。 在这种情况下,副本分片可能会报告文档不存在,但是主分片可能成功返回文档。



{context}