【ELK】核心概念

参考:

https://elasticstack.blog.csdn.net/  ES官方博客,详细,推荐

https://elasticstack.blog.csdn.net/article/details/102728604  Elastic:开发者上手指南(推荐,梳理整个ES Stack的各个产品博客的使用,包括各种材料链接)

https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html  官方文档

https://www.cnblogs.com/skychen1218/p/15720522.html  实战参考:记一次引入Elasticsearch的系统架构实战 


 

 

  

引入ES背景:DB不支持复杂查询,不适合大量的查询

  

 优缺点:非关系型数据库,不支持ACID;非实时数据库(内部基于refresh机制更新);ES 宕机恢复后,数据存在丢失

存储模型(倒排索引):    

  Elastic Search内部基于Apache Lucene框架开发。

  Lucene:将写入所有信息组成倒排索引(inverted Index)结构。将词项映射到文档;倒排索引:支持快速查询的关键  

       倒排索引:记录每个词条出现在哪些文档及文档中位置;涉及到原始数据按照算法进行分词,得到词条;

       创建索引过程

        1、创建文档列表:Lucene对原始文档数据编号(DocId),形成文档列表

        

      2、创建倒排索引列表:对文档中数据进行分词,得到词条,以词条建立索引,记录下包含词条的所有文档编号。

        

概念对比(ES vs Mysql):

  

      

数据类型

  text需要用于全文搜索(会被分词), 比如产品名称、产品描述信息, 就应该使用text类型.

  keyword需要按照精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型。不会被分词

  数字类型:尽可能选择范围小的数据类型, 字段的长度越短, 索引和搜索的效率越高;

    

   date

        

 

    boolean

    

 

   binary

  range

     

 

    

建索引:只发生在主分片,而不是副本。当发请求给只有副本的节点时,请求会被转发拥有正确主分片的节点。

查询:分为scatter phase和gather phase; Scatter将query分发包含相关文档多个分片查询;gather 从众多分片中收集结果并合并、排序  ---》每个分片都会返回查询数量的数据,最终在整合阶段排序,丢弃,所以要求分片查询不能太大,否则资源消耗多。

集群存储和检索原理

  

 

 Lucene原理

Segment(Shards) -> Document(行)-> Field(列)

  

添加索引

  索引只是一个用来指向一个或多个分片的逻辑命名空间

  一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序直接与索引通信。

  分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。

   分片可以是主分片(primary shard)或者是复制分片(replica shard)。你索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。

  理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况。分片的最大容量完全取决于你的使用状况:硬件存储的大小、文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间。

  复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。

   默认情况下,一个索引被分配5个主分片

  

   状态绿色:集群功能完备且高可用

   

 横向扩展:

  

   

   

   当节点1故障时,自动将节点2为master。

  因为配置复制系数是2,但当前只有1个复制分片,所以状态是黄色。

  

 

   

 集群部署

  管理节点:集群中有一个节点被选为管理节点,负责集群状态管理和集群拓扑变化时做出反应,分发索引分片至集群相应节点上。

  所有请求可发送至任意节点,如果有需要任意节点可并行发送子查询给其他节点,并合并搜索结果返回。

 

posted @ 2021-11-04 19:26  飞翔在天  阅读(77)  评论(0编辑  收藏  举报