ElasticSearch核心概念

Dev视角:doc、index

Ops视角:Node、Shard

1.集群

  一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认叫elasticsearch。这个名字很重要且不能重复,因为一个节点只能通过指定某个集群的名字,来加入这个集群。

  集群的目的是为了提供高可用和海量数据的存储以及更快的跨节点查询能力。

  查看集群的健康状况

  

 

     green:主分片与副本都正常分配

     yellow:主分片全部分配正常,有副本分片未能正常分配

     red:有主分片未能分配(例如:当服务器的磁盘容量超过85%时,去创建了一个新的索引)

    

2.节点

  节点是一个ElasticSearch的实例

    本质上就是一个Java进程

    一台机器上可以运行多个ElasticSearch实例,但是生产环境一般建议一台机器上只运行一个ElasticSearch实例

  Master-eligible nodes 和 Master Node

    Master-eligible节点可以参加选主的流程,成为Master节点

    每个节点启动后,默认就是一个Master-eligible节点(可在配置文件中设置node.master:false禁止)

    当第一个节点启动的时候, 它将会自己选举程主节点

    每个节点上都保存了集群的状态, 只有Master节点才能修改集群的状态信息    

  Data Node 和 Coordinating Node(协调节点)

    Data Node: 可以保存数据的节点, 负责保存分片数据。在数据扩展上起至关重要的作用

    Coordinating Node

      负责接收client的请求,将请求分发到合适的节点,最终把结果汇集到一起

      每个节点默认都起到了Coordinating Node的职责

  配置节点类型

    开发环境中一个节点可以承担多种角色

    生产环境中, 应该设置单一的角色节点

 

3.分片

  用于解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点上

    一个分片就是一个在运行的Lucene实例

    主分片数在创建索引时指定,后续不允许修改,除非Reindex

  分片的设定

    对于生产环境中分片的设定, 需要提前做好容量规划

      分片数设置过小

        导致后续无法增加节点实现水平扩展

        单个分片的数据量太大, 导致数据重新分配耗时

      分片数过大

        影响搜索结果的相关性打分, 影响统计结果的准确性

        单个节点上过多的分片, 会导致资源浪费, 同时也会影响性能

 

4.副本 

  (副本不与主分片存储在同一个节点上

  用于解决数据的高可用问题, 副本是主分片的拷贝

    副本分片数可以动态调整

    增加副本数, 还可以在一定程度上提高服务的可用性(读取的吞吐量, 因为搜索可以在所有的副本上并行运行)    

 

5.索引

  

 

   索引是文档的容器,是一类文档的集合

    index体现了逻辑空间的概念:每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型。(类似mysql的scheme)

    shard体现了物理空间的概念:索引中的数据分散在Shard上

  索引的Mapping与Settings

    Mapping定义文档字段的类型

    Setting定义不同的数据分布

  索引的不同语义:

    名词:一个ElasticSearch集群中,可以创建很多个不同的索引

    动词:保存一个文档到ElasticSearch的过程也叫索引

 

6.类型(文档)

  Type(文档)在7.0之前,一个Index可以设置多个Types,从7.0开始一个索引只能创建一个Type-“_doc”

 

7.文档

  ElasticSearch是面向文档的,文档是可搜索数据的最小单位。例如:日志文件中的日志项、一部电影的具体信息..

  文档会被序列化为JSON格式,保存在ElasticSearch中

    JSON对象由字段组成

    每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)

  每个文档都有一个UniqueID

    你可以自己制定ID

    或者通过ElasticSearch自动生成

  文档的元数据

   

 

  

8.路由

  ElasticSearch给每个文档建索引后,通过路由的计算可以算出所查的文档处在哪个分片上。

  公式:Shard = hash(routing) % number_of_primary_shards。(routing默认为文档的ID, 也就是说可以通过人工制定某个文档放在哪个shard上)

因为路由的计算依赖于主分片数,所以如果要改变索引的主分片数,必须重建索引,要不然就无法找到原文档分配在那个分片上了。

 

9.Mapping映射

  mapping相当于mysql中的scheme概念,ElasticSearch用mapping来定义一个文档,可以定义所包含的字段名称、字段类型和分词器等等。

  而映射可以分为动态映射和静态映射

  动态映射

    在关系型数据库中,我们要先创建一张表,定义好scheme,才可以插入数据。而ElasticSearch不用事先建好index, 也不用事先定义好mapping,文档写入ElasticSearch时,index会自动创建,也会根据文档字段自动生成该index的mapping,这种机制称之为动态映射。

  静态映射

    就是指ElasticSearch事先定义好某个index的mapping,再往里面插入文档。(此方式可以更有力控制数据的合法性, 生产模式建议使用静态映射)

  详细介绍  

 

10.模板

  模板是ElasticSearch的一种复用机制。我们可以先在模板中设置好相应的setting和mapping等信息,当新建一个ElasticSearch索引时,会自动匹配模板,完成索引的基础部分搭建。

  • 模板仅在一个索引被新创建时,才会产生作用。修改模板不会影响已创建的索引
  • 可以设定多个索引模板,这些设置会被"merge"在一起
  • 可以指定order的数值,控制merging的过程
posted @ 2020-09-19 22:39  下山打老虎i  阅读(93)  评论(0)    收藏  举报