「Elasticsearch」- 基本概念(学习笔记)

  CREATED BY JENKINSBOT

建议参考官方 Elasticsearch Reference [7.7] » Glossary of terms 文档。

索引(Index)

是具有某些类似特征的文档集合。例如,客户数据索引、产品目录索引、订单数据索引 等等。在单个群集中,可以根据需要定义任意数量的索引。

索引由名称进行标识(必须全部小写),此名称用于引用索引,以在对其中的文档执行索引、搜索、更新、删除操作。

分片(Shard)

Elasticsearch 可以把完整的 Index 切割分成多个“块”,“块”被称之为 Shard。因此在 Elasticsearch 中,Index 只是逻辑概念,而内部存储则是分割后的 Index —— Shard。

这样的好处有以下几点:
1)切割成多个 Shard 可以分布到不同节点,容易水平扩展集群,而不是增加单机硬件;
2)可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索,提高性能。

分片的数量只能在索引创建前指定,并且索引创建后不能更改。

副本(Replica)

索引副本,是索引的副本。在 Elasticsearch 中可以设置多个索引的副本,副本的作用:一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复;二是提高ES的查询效率,ES会自动对搜索请求进行负载均衡。

Primary Shards / Replica Shards

Primary Shards:原始分片
Replica Shards:副本分片,复制原始分片而得到的分片

默认情况下,在 Elasticsearch 6.5 中的每一个索引都分配了 5 个索引分片和 1 个索引副本,这意味着:如果群集中至少有两个节点,则一个索引将包含 5 个主索引分片和另外 5 个副本分片(一个完整的索引副本),总计为每个索引有 10 个索引分片。

集群(Cluster)

集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。ES的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看ES集群,在逻辑上是个整体,你与任何一个节点的通信和与整个ES集群通信是等价的。

节点(node)

Elasticsearch Reference [7.6] » Modules » Node
节点,是作为群集一部分的单个服务器,存储数据并参与群集的索引和搜索功能。就像集群一样,节点由名称进行标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。如果不需要默认值,可以定义所需的任何节点名称。此名称对于管理目的非常重要,可以在其中识别网络中哪些服务器与Elasticsearch集群中的哪些节点相对应。

可以将节点配置为按群集名称加入特定群集。默认情况下,每个节点都设置为加入名为”elasticsearch“的群集,这意味着如果在网络上启动了许多节点并且 – 假设他们可以相互发现 – 他们将自动形成并加入名为elasticsearch的单个群集。

在单个群集中,可以拥有任意数量的节点。此外,如果的网络上当前没有其他Elasticsearch节点正在运行,则默认情况下,启动单个节点将形成名为elasticsearch的新单节点集群。

节点类型

Master-eligible Node => node.master: true
可被选举为主节点,用于控制集群。

Data Node => node.data: true
保存数据,执行数据操作(CRUD、搜索、聚合)

Ingest Node => node.ingest: true
对文档进行使用 Ingest Pipeline 以转换和丰富文档,该操作会产生负载,因此应该与 master-eligible、data 进行分离。

Machine learning Node => xpack.ml.enabled: true, node.ml: true

Coordinating node => node.master:false, node.data: false, node.ingest: false
每个节点都是隐含的 Coordinating Node,负责接受请求,分发到对应节点,最后汇聚各个节点返回的结果集。需要具有足有内存与处理器资源。

type

类型,曾经是索引的逻辑分类,允许在同一索引中存储不同类型的文档,例如 一种用户类型,另一种用于博客帖子。 不再可能在索引中创建多个类型,并且将在更高版本中删除类型概念。
请参阅「移除映射类型」以获取更多信息。

document

文档,是可以被索引的基本信息单位。 例如,你可以提供一个个客户文档、一个产品文档、一个订单文档。文档以JSON表示。

在索引/类型中,可以根据需要存储任意数量的文档。 请注意,尽管文档实际上驻留在索引中,但实际上必须将文档放入索引中的某个类型。

附加说明

每个Elasticsearch的Shard都是一个Lucene索引。一个Lucene索引最多有2,147,483,519(= Integer.MAX_VALUE – 128)个Document。也就是说Shard数越多,可存储的Document数越多,当然也不是越多越好。可以使用_cat/shards接口监视Shard大小。

参考文献

Elasticsearch Reference [6.5] » Getting Started » Basic Concepts