elasticsearch存储、查询机制(学习中......)

elasticsearch存储、查询机制(学习中…)


文章目录

  • elasticsearch存储、查询机制(学习中......)
  • 一、Elasticsearch的节点类型
  • 二、分片和副本 (Shard)
  • 三、Elasticsearch工作流程
    • 1、Elasticsearch写入原理
    • 2、Elasticsearch检索原理
    • 3、Elasticsearch准实时索引实现
  • 总结


一、Elasticsearch的节点类型

在Elasticsearch主要分成两类节点,一类是Master,一类是DataNode。

1、Master节点
1.1 master节点具备主节点的选举权,有资格成为主节点,主节点控制整个集群的元数据(metadata),比如索引的新增、删除、分片分配等
1.2 角色配置方式:node.master: true
2、DataNode节点
1.1 会存储分配在该node上的shard的数据并负责这些shard的写入、查询等,ES集群的性能取决于该节点的个数(每个节点最优配置的情况下),data节点会占用大量的CPU、io和内存;
1.2 角色配置方式:node.data: true

二、分片和副本 (Shard)

1、分片(Primary Shard)
Elasticsearch是一个分布式的搜索引擎,索引的数据也是分成若干部分,分布在不同的服务器节点中。
分布在不同服务器节点中的索引数据,就是分片(Shard)。Elasticsearch会自动管理分片,如果发现分片分布不均衡,就会自动迁移一个索引(index)由多个shard(分片)组成,而分片是分布在不同的服务器上的

2、副本(Replica Shard)
为了对Elasticsearch的分片进行容错,假设某个节点不可用,会导致整个索引库都将不可用。所以,需要对分片进行副本容错。每一个分片都会有对应的副本。
每个分片都会有一个Primary Shard(主分片),也会有若干个Replica Shard(副本分片)
Primary Shard和Replica Shard不在同一个节点上

三、Elasticsearch工作流程

1、Elasticsearch写入原理

elasticsearch存储、查询机制(学习中......)_第1张图片
1、选择一个数据节点发送请求,比如节点2,该节点就会成为协调节点(Coordinating Node)
2、协调节点(Coordinating Node)计算出要写入的分片,将请求转发到对应主分片所在的节点(数据节点),如主分片1
3、主分片写入索引库中并把数据同步至副分片
4、主分片和副分片都保存好了返回给客户端
总结:协调节点计算出并转发给对应的分片所在节点,所在节点处理完返回给客户端

2、Elasticsearch检索原理

elasticsearch存储、查询机制(学习中......)_第2张图片
1、发起查询请求,某个节点接收到请求,该DataNode就会成为协调节点(Coordinating Node)
2、协调节点(Coordinating Node)将查询请求广播到每一个数据节点,这些数据节点的分片会处理该查询请求
3、每个分片进行数据查询,将符合条件的数据放在一个优先队列中,并将这些数据的文档ID、节点信息、分片信息返回给协调节点
4、协调节点将所有的结果进行汇总,并进行全局排序
总结:协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据返回给客户端

3、Elasticsearch准实时索引实现

下图为网络素材:
elasticsearch存储、查询机制(学习中......)_第3张图片
写到文件系统缓存
1、当数据写入到ES分片时,会首先写入到内存中,然后通过内存的buffer生成一个segment,并刷到文件系统缓存中,数据可以被检索(注意不是直接刷到磁盘)ES中默认1秒,refresh一次
写translog保障容错
2、在写入到内存中的同时,也会记录translog日志,在refresh期间出现异常,会根据translog来进行数据恢复等到文件系统缓存中的segment数据都刷到磁盘中,清空translog文件
flush到磁盘
3、ES默认每隔30分钟会将文件系统缓存的数据刷入到磁盘
segment合并
4、Segment太多时,ES定期会将多个segment合并成为大的segment,减少索引查询时IO开销,此阶段ES会真正的物理删除(之前执行过的delete的数据)

总结

自我学习,每天进步一点点。

你可能感兴趣的:(java,elasticsearch,搜索引擎,分布式)