1. Elasticsearch5.2 --- 基本概念
Basic Concepts
理解Elasticsearch 的核心,能够轻松的学习Elasticsearch.
NRT
Elasticsearch 是一个接近实时搜索的平台,这意味着你在根据索引查询文档时,只有一个轻微的延迟(这个时间通常是一秒)。
Cluster
一个集群是由一个节点或者多个节点(服务)组成的一个集合,来存储所有的数据,Elasticsearch提供联合索引提高查询性能,在查询所有节点时。
通常不同的节点通过唯一的名称(cluster.name)来定义一个集群,具有相同名称的节点认为是一个集群。默认的名字是 ‘elasticsearch',在 $ES_HOME/config/elasticsearch.yml 中可以进行配置。这个名字是至关重要的,如果一个节点通过一个这个名字来加入到集群中,这个节点紧紧是这个集群中的一部分。
需要确保在不同的环境中你的集群名字是不被重用的,否则你可能会将你的节点加错集群。例如你可以使用 logging-dev,logging-stage,logging-prod 来表示 本地集群、测试集群、生产集群。
注意:一个单节点也可以表示为一个集群。另外你可以有很多个独立的集群,每个独立的集群都有自己唯一的名字。
Node
一个节点是一个集群中的一部分,提供存储数据、创建索引、以及搜索功能。一个节点通过唯一的名字来标识,在不指定名字的前提下,Elasticsearch 在服务启动的时候会分配一个UUID来作为此节点的名字。如果你不想使用默认的名字,你可以指定任意的名字作为你的node name.这个名字的重要目的是,在你的网络通信中,一个集群中都有哪些节点。
在一个集群中,你可以尽可能多的加入节点。而且如果当前在你的网络通信中没有运行任何的Elasticsearch 节点,当你启动一个节点的时候,默认的会新建一个 single-node 集群,名字为 elasticsearch.
Index
索引是一个有类似特点的文档的集合。例如你可以有一个客户数据的索引,产品目录的索引,订单数据的索引。通过一个名字来标识这个索引,索引的明明必须全部是小写,通过这个索引来对文档进行查询、更改、删除操作。一个集群中你可以定义很多个索引。
Type
在一个索引中你可以定义一个或者多个type,一个type可以将你的索引分成不同的类别。type的命名没有规则限制,完全取决于你。通常的在文档中拥有共同file的部分可以定义为一个type.例如:你运营一个博客平台,存储你所有的数据在一个index下面,在这个index中,你可以定义一个 用户数据的type, 博客内容数据的type等。
Document
一个Document 是可以被索引查询的基本的信息单元。例如:你可以为一个客户指定一个Document,一个产品指定一个Document,一个订单指定一个Document。这些document用JSON来表示。说白了就是一个存储对象表示一个Document ,这个对象被格式化为JSON格式。
在一个 index/type中你可以存储很多个你想存储的Document。尽管一个document物理位置在一个index中,实际上一个document必须被指定在一个type下。也就是说 一个document必须存储在 一个index下面的type下。
Shards & Replicas
一个索引上可能存储大量的数据超过单个节点的物理限制。例如:一个索引上存储了将近十亿的文件占用了将近1TB的磁盘空间,这会导致在此节点上查询时非常慢,也许这些文件不适合存储在一个节点的磁盘上。为了解决这个问题,Elasticsearch 提供了将你的索引细分成多个分片的功能。当你创建index的时候你可以定义 shards的数量。每一个shard 本身就是一个完整的独立的index,可以托管在集群中的任意一个节点上。碎片是如何分布的机制以及其文档是如何聚合回搜索请求是完全由Elasticsearch管理,作为用户是透明的。
shard 可以横向切割扩展内容。index在索引的时候会索引所有的分片,进而提高吞吐量以及查询性能。
shard分片
每个Index(对应Database)包含多个Shard,默认是5个,分散在不同的Node上,但不会存在两个相同的Shard存在一个Node上,这样就没有备份的意义了。Shard是一个最小的Lucene索引单元。
当插入document的时候,Elasticsearch通过对docid进行hash来确定其放在哪个shard上面,然后在shard上面进行索引存储。
shard代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replica副本
replicas就是备份,Elasticsearch采用的是Push Replication模式,当你往 master主分片上面索引一个文档,该分片会复制该文档(document)到剩下的所有 replica副本分片中,这些分片也会索引这个文档。
es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
replica 不会与碎片存在同一个节点上。 扩展搜索量\吞吐量 搜索可以并行在所有副本中执行。
总而言之,每个索引可以分成多个 shard ,每个索引可以创建一个或者多个 replica,在创建索引的时候可以指定 shard和replica的数量。默认情况下会创建 5 个分片,一个副本(指的是一个分片对应一个副本,一共五个副本。),shard 一旦创建不可更改,replica的数量可以进行更改。
注意:每个Elasticsearch碎片是一个Lucene索引。单个索引中存在的最大数量的document 是 2,147,483,519 个document,你可以通过 _cat/shards api来监控碎片的数量。
官网地址:www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html