Elasticsearch基础概念

对照着关系型数据库中的概念,方便理解Elasticsearch中的术语:

ElasticSearch概念 MySQL对应概念
Index Database
Type Table
Document Row
Field Column
Mapping Schema
Everything is indexed Index
Query SQL
GET http://… select * from …
POST http://… update table set …

(1)关系型数据库中的数据库(Database),等价于ES中的索引(Index)

(2)一个数据库下面有N张表(Table),等价于1个索引 Index下面有N多类型(Type)

(3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。

例如:

image-20220703111333914

Sharding

索引(indices)会被拆分并分布在多个节点上, 称为分片(sharding)。

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据600GB的磁盘空间,而任一节点只有500GB,都没有这样大的磁盘空间:

image-20220708222622478

分片之所以重要,主要有两方面的原因:

  • 允许你水平分割/扩展你的磁盘容量
  • 允许在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量

有两种类型的分片:primary shardreplica shard

  • Primary shard: PUT文档时,它首先在Primary shard上写入,然后在此分片的所有副本上同步。索引可以包含一个或多个主分片 (7.0.0版本前默认设置为5,之后的版本默认为1)
  • Replica shard: 每个主分片可以具有零个或多个副本,有两个目的:增加集群的吞能力以及实现故障转移,在故障情况下可以将副本分片提升为主分片

Replication

默认情况下,Elasticsearch为每个索引创建一个primary shard和一个replica shard,这意味着每个分片将具有一个副本。

分配多个分片和副本是分布式搜索功能设计的本质,提供高可用性和快速访问索引中的文档。主副本和副本分片之间的主要区别在于只有主分片可以接受PUT请求。副本和主分片都可以提供查询请求。

Primary ShardReplica Shard组成了Replication Group,这是一个逻辑上的概念,实际上并不会分布在一个node上:

image-20220708223945095

如果ES集群只有一个节点,那么Replica Shard不会被分配到该节点,因为此时如果唯一的node挂了,整个集群数据都会丢失,当添加新的Node到集群时,Replica Shard会分配到新的节点上:

image-20220708225618211

Node Role

elasticsearch的节点有下面几种角色:

  • master: 其实这个是master准确的来说是具有成为master节点资格的节点,即master-eligible node,具体哪个节点会成为master node则由master选举算法选举出来的。主节点负责集群范围内的元数据相关的操作,例如创建或删除索引,跟踪哪些节点是集群的一部分以及确定将哪些 shard 分配给哪些节点。拥有稳定的主节点对于群集健康非常重要。
  • data:数据节点包含已建立索引的文档的分片。数据节点处理与数据相关的操作,例如 CRUD,搜索和聚合
  • ingest:用于对写入或者查询的数据进行预处理,即可以将部分client需要预处理的工作放到了server端,如常见的格式转换,空值处理以及时间处理
  • ml:机器学习节点提供了机器学习功能,该节点运行作业并处理机器学习 API 请求。
  • Remote-eligible:改节点拥有remote_cluster_client角色,可以充当远程客户端,默认情况下,集群内任意节点都可以作为跨集群的客户端连接到远程集群。
  • transform