Elasticsearch教程(二):Elasticsearch的集群、节点、索引、分片、分组概念

本文将介绍Elasticsearch中的几个基本概念(cluster 、 node 、index、 shard、document、type )。

一、节点和集群(Node 与 Cluster)

ElasticSearch做到了随时可用和按需扩容(垂直扩容和水平扩容)。垂直扩容就是更换性能更强大的服务器,水平扩容就是添加数量更多的服务器。

但是,无论性能多强大,单台服务器的性能总归是有限的,而Elasticsearch天生就是分布式的,使用者无需像使用其它数据库那样花费很大精力、做出很大改动来实现横向扩容,所以更合适的是水平扩容(​为集群添加更多的节点),并且将负载压力和稳定性分散到这些节点中。

1.1 节点和集群概念介绍

一个运行中的Elasticsearch实例称为一个节点(Node),一个或者多个拥有相同cluster.name配置的节点组成一个集群(Cluster),它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

任何节点都可以成为主节点,主节点通过选举产生, 主节点负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。

作为用户,我们可以将请求发送到集群中的任何节点,包括主节点。每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。

1.2 集群健康

如果你已经按照第一篇文章介绍安装了 Elasticsearch ,那么可以访问/_cluster/health地址,查看集群健康信息。

其中status字段是最重要的,它表示当前集群在总体上是否工作正常。它的三种颜色含义如下:

  • green:所有的主分片和副本分片都正常运行。
  • yellow:所有的主分片都正常运行,但不是所有的副本分片都正常运行。
  • red:有主分片没能正常运行。

二、索引(Index)

Elasticsearch的索引是用来保存相关数据的地方。索引实际上是指向一个或者多个物理分片的逻辑命名空间 。

Index(索引) 是 Elasticsearch 管理 数据的顶层单位 。它是单个数据库的同义词。每个Index(即数据库)的名字必须是小写。

Elastic会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。

创建索引

PUT http://{your ip}:9200/{index name}

这边我原先就创建了一些索引。

/_cat/indices 该地址可以查看当前节点的所有 Index。

三、分片( shard)

一个分片是一个底层的工作单元 ,它仅保存了全部数据中的一部分。

Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。

一个分片可以是 主分片或者副本分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。

一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。

在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。

上面当我们是按默认方式创建了一个索引,默认情况下索引会被分配5个主分片,1个副分片。

当然,也可以通过如下参数来指定分片数、副本数量(注意它是请求时放在requestbody里的)

四、 Type(分组)

Document 可以分组,假设我们有个叫weather的 Index ,那么天气可以按城市分组,也可以按气候分组。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。

不同的 Type 应该有相似的结构(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如products和logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

/_mapping 该地址可以列出每个 Index 所包含的 Type。

五、 数据(Document)

Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。

Document 使用 JSON 格式表示,下面是一个例子。

{
“user”: “李诞”,
“title”: “脱口秀演员”,
“desc”: “搞笑大师”
}

同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

六、最后方便理解整理了一个图

+2

发表评论

邮箱地址不会被公开。