Elasticsearch简介


Elasticsearch

简介:

Elasticsearch是一个基于Lucene,使用Java开发的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,而且基于RESTful web接口。

主要功能

  • 海量数据的分布式存储以及集群管理
    • 服务与数据的高可用,水平扩展
  • 近实时搜索,性能卓越
    • 结构化/全文/地理位置/自动完成
  • 海量数据的近实时分析
    • 聚合功能

文档(Document)

  • Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位
    • 日志文件中的日志项
    • 电影/MP3/文档的具体信息
  • 文档会被序列化喂JSON格式,保存再Elasticsearch 中
    • JSON队友由字段组成
    • 每个字段都由对应的字段类型
  • 每个文档都有一个Unique ID
    • ID可以自己指定或者Elasticsearch自动生成

文档的元数据

  • _index:文档的索引名
  • _type: 文档所属的类型名
  • _id:文档的唯一ID
  • _source:文档的原始Json数据
  • _all:整个字段所有内容到该字段,目前已经被废除
  • _version:文档的版本信息

索引

  • 索引是文档的容器,是一类文档的结合
    • Index体现了逻辑空间的概念,每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型
    • Shard 体现了物理空间的盖面,索引中的数据分散再Shard上
  • 索引的Mapping和Setting
    • Mapping定义文档字段的类型
    • Setting定义不同的数据分布

节点

  • 节点是一个Elasticsearch的实例
    • 本质上就是一个Java进程
    • 一台机器上可以运行多个Elasticsearch进程
  • 每个节点都有名字,通过配置文件设置,或者启动时候用-E node.name=node1 指定
  • 每个节点启动之后,会分配一个UID,保存在data目录下

节点状态

  • green:主分片和副本分片都有
  • yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的
  • red:至少一个主分片(以及它的全部副本)都在缺失中

Master Node 和 Master-eligible nodes

  • 节点启动后,默认就是一个Master-eligible 节点。当第一个节点启动时,会将自己选举成为Master节点
  • Master-eligible 参加选主流程,成为Master节点
  • 每个节点上保存了集群的状态,只有Master节点才能修改
    • 集群状态的信息包括:所有节点的信息,所有的索引和相关的Mapping和Setting信息,分片的路由信息
  • 任意节点都能修改信息会导致数据的不一致性

Data Node 和Coordinating Node

  • Data Node 用于保存数据的节点,负责保存数据分片
  • Coordinating Node 负责接收Client端的请求,将请求分发到合适的节点。每个节点默认都起到Coordinating Node的职责

其他类型的节点

  • Hot & Warm Node: 不同硬件配置的Data Node,用于实现Hot & Warm 架构
  • Machine Learning Node:负责跑机器学习的Job,用于做异常检测
  • Tribe Node: 连接不同的集群,并且支持将这些集群当成一个单独的集群处理

分片

主分片(Primary shard)

用于解决数据水平扩展的问题,通过主分片,可以将数据分布到集群内的所有节点上。一个分片就是一个运行Lucene的实例,并且再索引创建时指定,后续不允许修改,除非Reindex

副本分片(replica shard)

用以解决数据高可用的问题,是主分片的拷贝。副本分片数可以动态调整。

分片的设定

  • 分片数设置过小
    • 导致后续无法增加节点实现水平扩展
    • 单个分片数据太大,导致数据重新分配耗时
  • 分片设置过大
    • 影响搜索结果的相关性打分,影响统计结果的准确性
    • 单节点上过多的分片,会导致资源浪费,同时影响性能

Mapping

Mapping类似于数据库中的schema
作用:

  • 定义索引中的字段名称
  • 定义字段的数据类型
  • 字段,倒排索引的相关配置
  • Mapping会将JSON格式映射成Lucene所需要的扁平格式
  • 一个Mapping属于一个索引的type

文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录