ES-基本概念

目录:

1.  ElasticSearch是什么
2. 基本概念
3. 几个关键词
 
正文:
1.  ElasticSearch是什么
    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
 
2. 基本概念
   Lucene是由一个Java语言开发的开源全文检索引擎工具包。把Lucene用Netty封装成服务,使用JSON访问就说是Elasticsearch。
Elasticserach内置了对分布式集群和分布式索引的管理,所以相对Solr来说,不需要额外安装Zookeeper,其更容易分布式部署。
使用Elasticsearch的搜索系统整理架构图如下所示:
 
    Elasticsarch的每一个运行实例称为一个节点,即可以在同一台计算机上运行多个实例,也可以在每台计算机上只运行一个实例。
在一个分布式系统里,多个ES运行实例可以组成一个集群(cluster),该集群里有一个动态选举出来的主节点。如果主节点失败,会自动选出新的节点做为主节点,所以不存在单点故障。
   在同一个子网内,只需要在每个节点上设置相同的集群名,这些集群名相同的节点会自动组成一个集群。ES包含了节点和节点之间的通信模块及节点之间的数据分配和平衡模块。
   为了实现容错,ES会把查询文档集合分解为多个小的索引,每一个小的索引就叫做分片(shards)。每一个分片都可以有0到多个副本(replicas),而每一个副本也都是分片的完整复制品,这样也提高了查询速度。
    一旦ES的某个节点数据损坏或者服务不可用的时候,就可以用其他的节点来代替坏掉的节点,以达到高可用的目的。当有节点加入或者退出时,主节点会根据机器的负载对索引分片进行重新分配,当“挂掉”对节点再次重现启动对时候也会进行数据恢复(recovery)。
    ES通过网关(Gateway)来管理集群恢复,可以配置集群需要加入多少节点才能启动恢复数据。网关配置用于恢复任务失败的索引。当节点崩溃并重新启动时,ES将从网关读取所有的索引和元数据。
 
3. 几个关键词
 
索引:
     ES将它的数据存储在一个或者多个索引中。用sql领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ES内部使用的Lucene将数据写入索引或从索引中检索数据。
索引是具有某些类似特征的文档集合,索引由名称标识(必须全部小写)。
 
文档:
    文档是可以建立索引的基本信息单元。例如,您可以为单个客户提供文档,为单个产品提供一个文档,为单个订单提供一个文档。该文档以JSON(JavaScript Object Notation)表示,JSON是一种普遍存在的互联网数据交换格式。
在索引/类型中,您可以根据需要存储任意数量的文档。请注意,尽管文档实际上驻留在索引中,但实际上必须将文档编入索引/分配给索引中的类型。
 
映射(mapping):
    ES中的索引模式叫做Mapping。索引中的每个文档都有一个type,每个type拥有自己的模式或者模式定义。
用户可以设置一些参数,来决定如何将输入文本分割为词条,哪些词条应该被过滤掉,或者哪些附加处理时有必要被调用的。如排序时所需的字段内容信息,者就是mapping扮演的角色。
 
类型:
    ES中每个文档都有与之对应的类型定义。这允许用户在一个索引中存储多种文档类型,并为不同文档类型提供不同的映射。
 
节点:
     单个的ES服务实例称为节点(node)。很多时候部署一个ES节点就足以应付大多数简单的应用,但是考虑到容错性或在数据膨胀到单机无法应付这些状况时,你也许会更倾向于使用多节点的ES集群。

集群:
     集群(cluster)是一组具有相同cluster.name的节点集合,他们协同工作,共享数据并提供故障转移和扩展功能,当然一个节点也可以组成一个集群。
     集群由唯一名称标识,默认情况下为“elasticsearch”。此名称很重要,因为如果节点设置为按名称加入集群的话,则该节点只能是集群的一部分。
确保不同的环境中使用不同的集群名称,否则最终会导致节点加入错误的集群。
     集群状态通过 绿,黄,红 来标识:
     绿色 - 一切都很好(集群功能齐全)。
     黄色 - 所有数据均可用,但尚未分配一些副本(集群功能齐全)。
     红色 - 某些数据由于某种原因不可用(集群部分功能)。
     注意:当群集为红色时,它将继续提供来自可用分片的搜索请求,但您可能需要尽快修复它,因为存在未分配的分片。

分片:
    索引可能存储大量可能超过单个节点的硬件限制的数据。例如,占用1TB磁盘空间的十亿个文档的单个索引可能不适合单个节点的磁盘,或者可能太慢而无法单独从单个节点提供搜索请求。
    为了解决这个问题,Elasticsearch 提供了将索引细分为多个称为分片的功能。创建索引时,只需定义所需的分片数即可。每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。
   设置分片的目的及原因主要是:

  •    它允许您水平拆分/缩放内容量;
  •    它允许您跨分片(可能在多个节点上)分布和并行化操作,从而提高性能/吞吐量;
  •    分片的分布方式以及如何将其文档聚合回搜索请求的机制完全由 Elasticsearch 管理,对用户而言是透明的。

   在可能随时发生故障的网络/云环境中,分片非常有用,建议使用故障转移机制,以防分片/节点以某种方式脱机或因任何原因消失。为此,Elasticsearch 允许您将索引的分片的一个或多个副本制作成所谓的副本分片或简称副本。

副本:
     副本,是对分片的复制。目的是为了当分片/节点发生故障时提供高可用性,它允许您扩展搜索量/吞吐量,因为可以在所有副本上并行执行搜索。
总而言之,每个索引可以拆分为多个分片。索引也可以复制为零次(表示没有副本)或更多次。复制之后,每个索引将具有主分片(从原始分片复制而来的)和复制分片(主分片的副本)。
    可以在创建索引时为每个索引定义分片和副本的数量。创建索引后,您也可以随时动态更改副本数,但这不是一项轻松的任务,所以预先计划正确数量的分片是最佳方法。
    默认情况下,Elasticsearch 中的每个索引都分配了5个主分片和1个副本,这意味着如果集群中至少有两个节点,则索引将包含5个主分片和另外5个副本分片(1个完整副本),总计为每个索引10个分片。
 
网关:
    在ES的工作过程中,关于集群状态,索引设置的各种信息都会被收集起来,并在网关(gateway)中被持久化

posted @ 2019-08-04 16:55  源码在深山  阅读(1267)  评论(0编辑  收藏  举报