基本概念

本文介绍阿里云Elasticsearch服务使用过程中遇到的常用名词的基本概念和简要描述。

集群(cluster)

一个Elasticsearch集群由一个或多个Elasticsearch节点组成,所有节点共同存储数据。每个集群都应有一个唯一的集群名(ClusterName),同一环境内如果存在同名集群,可能会出现不可知异常。

节点(node)

一个节点是集群中的一个服务器,用来存储数据并参与集群的索引和搜索。一个集群可以拥有多个节点,每个节点可以扮演不同的角色:
  • 数据节点:存储索引数据的节点,主要对文档进行增删改查、聚合等操作。
  • 专有主节点:对集群进行操作,例如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康非常重要,默认情况下集群中的任一节点都可能被选为主节点。
  • 协调节点:分担数据节点的CPU开销,从而提高处理性能和服务稳定性。

索引(index)

一个索引是一个拥有一些相似特征的文档的集合,相当于关系型数据库中的一个数据库。例如,您可以拥有一个客户数据的索引,一个商品目录的索引,以及一个订单数据的索引。一个索引通常使用一个名称(所有字母必须小写)来标识,当针对这个索引的文档执行索引、搜索、更新和删除操作的时候,这个名称被用来指向索引。

类型(type)

一个类型通常是一个索引的一个逻辑分类或分区,允许在一个索引下存储不同类型的文档,相当于关系型数据库中的一张表,例如用户类型、博客类型等。由于6.x以后的Elasticsearch版本已经不支持在一个索引下创建多个类型,因此类型概念在后续版本中不再被提及。Elasticsearch 5.x允许在一个索引下存储不同类型的文档,Elasticsearch 6.x在一个索引下只允许一个类型,Elasticsearch 7.x索引类型命名只允许_doc,详情请参见Elasticsearch官方文档

文档(document)

一个文档是可以被索引的基本信息单元,相当于关系型数据库中的一行数据。例如,您可以为一个客户创建一个文档,或者为一个商品创建一个文档。文档可以用JSON格式来表示。在一个索引中,您可以存储任意多的文档,且文档必须被索引。

字段(field)

field是组成文档的最小单位,相当于关系型数据库中的一列数据。

映射(mapping)

mapping用来定义一个文档以及其所包含的字段如何被存储和索引,相当于关系型数据库中的Schema,例如在mapping中定义字段的名称和类型,以及所使用的分词器。

Elasticsearch与关系型数据库的映射关系如下表所示:
Elasticsearch关系型数据库
索引(index)数据库(Database)
文档类型(type)表(Table)
文档(document)一行数据(Row)
字段(field)一列数据(Column)
映射(mapping)数据库的组织和结构(Schema)

分片(shards)和副本(replicas)

shards代表索引分片,Elasticsearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。主分片的数量只能在索引创建时指定,并且索引创建后不能更改。

replicas是索引的备份,Elasticsearch可以设置多个副本。写操作会先在主分片上完成,然后分发到副本分片上。因为索引的主分片和副本分片都可以对外提供查询服务,所以副本能够提升系统的高可用性和搜索时的并发性能。但如果副本太多,也会增加写操作时数据同步的负担。

Elasticsearch 7.0以下版本默认为一个索引创建5个主分片,并分别为每个主分片创建1个副本分片,7.0及以上版本默认为一个索引创建1个主分片和1个副本分片。两者区别如下:
分片类型支持处理的请求数量是否可修改其他说明
主分片支持处理查询和索引请求。在创建索引时设定,设定后不可更改,详细信息请参见步骤三:创建索引索引内任意一个文档都存储在一个主分片中,所以主分片的数量决定着索引能够保存的最大数据量。
重要 主分片不是越多越好,因为主分片越多,Elasticsearch性能开销也会越大。
副本分片支持处理查询请求,不支持处理索引请求。可在任何时候添加或删除副本分片,详细信息请参见索引模板副本分片对搜索性能非常重要,主要体现在以下两个方面:
  • 提高系统的容错性能,当某个节点某个分片损坏或丢失时可以从副本中恢复。
  • 提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡。
重要 shard的大小和数量是影响Elasticsearch集群稳定性和性能的重要因素之一。Elasticsearch集群中任何一个索引都需要有一个合理的shard规划。合理的shard规划能够防止因业务不明确,导致分片庞大消耗Elasticsearch本身性能的问题,详细信息请参见规格容量评估

gateway

gateway代表Elasticsearch索引快照的存储方式,Elasticsearch默认优先将索引存放到内存中,当内存满时再将这些索引持久化存储至本地硬盘。gateway对索引快照进行存储,当这个Elasticsearch集群关闭再重新启动时就会从gateway中读取索引备份数据。Elasticsearch支持多种类型的gateway,有本地文件系统(默认)、分布式文件系统、Hadoop的HDFS和阿里云的OSS云存储服务。

discovery.zen

discovery.zen代表Elasticsearch的自动发现节点机制,Elasticsearch是一个基于P2P的系统,它先通过广播寻找存在的节点,再通过多播协议进行节点之间的通信,同时也支持点对点的交互。

Transport

Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认使用TCP协议进行交互。同时支持通过插件的方式集成,因此也可以使用HTTP协议(JSON格式)、thrift、memcached、zeroMQ等传输协议进行交互。