elastic search--术语深悉

2020-06-01 00:00:00 索引 集群 多个 节点 分片

前言

ES的强大始终让人着迷,本来想继上篇elastic search--集群搭建写下集群健康状况,但是涉及到很多专业术语:集群、节点、分片以及索引等,所以这篇来总结下这几个术语的真理与内涵,然后把这几个概念深入的了解下,然后后面就可以更清晰的了解ES的存储、映射、读取等机制。否则在模糊中探索总是让人不爽。

索引(index)

在ES中提到多的就是索引、索引文档,索引是什么意思,官方的解说:存储数据到 Elasticsearch 的行为叫做索引。其实在关系型数据库中(sql server、oralce等)就是建立一个数据库。然后索引文档其实就是查询数据库中的每一行数据。

一个 ES 集群可以 包含多个 索引 ,相应的每个索引可以包含多个类型 。这些不同的类型存储着多个 文档 ,每个文档又有多个属性 。

注意:索引 (index) 的复数词为 indicesindexes后面会用到

转换成关系型数据库的描述就是:

一个ES集群可以包含多个 数据库,相应的每个数据库可以包含多个 表。这些不同的表存储着很多 行,每行数据又有多列。

这样就对应上了:索引---》数据库

类型---》表名

文档---》行

属性---》列

ES中索引+类型+Id确定一个的文档,所以就不用我这里多说了吧!

节点(node)

其实再上篇中已经讲解过了,就是运行一个elasticsearch的实例就是一个节点。

集群(cluster)

集群的概念更好理解,就是多个相同cluser.name的节点集合,就是在/config/elasticsearch.yml中设置了cluser.name='web.news.query',就构建成了一个集群。

分片(shards)

这个分片就有意思的多了,其实我们并不需要太深入了解分片的底层原理,因为涉及的东西太多太多了,讲了多了反而更让人模糊了。比如:分片是什么?分片是一个是一个 Lucene 的实例,那Lucene 是什么?打住,不要继续深究下去。而是换一种思维,分片是一个Lucene的实例,分片是索引的一个小单元,也就是数据存储的小的一个单元。

什么意思呢?这样理解文档(一行数据)存储在分片内。在简单理解点,就是磁盘上的一块空间。ES集群把分片分在不同的节点内。但是有一点要注意,就是分配存储的是索引中部分数据

当然可能又来了另一个问题了,既然是索引的部分数据,那查询的时候,怎么知道文档是从哪个节点下的哪个分片中读取的数据呢?

是不是更有意思了,这个问题暂时先不回答,这个呢先作为一个问题留着,后面经过实战后再进一步解说。

集群健康

集群健康是一个很值得探讨的问题,也是一个很重要必需关注的问题,因为这个往往影响的是数据能否正确获取到。先看几个颜色吧:

green:绿色

yellow:黄色

red:红色

(嗯,应该翻译的没有错)。这几个颜色代表什么意思呢?先来看一个例子,现在只留下一个节点:5001---》36001(就是留下端口为5001的ES节点),这个时候请求:

192.168.1.2:36001/_clus返回结果如下:

{
"cluster_name": "web_news_query",
#重点
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 4,
"active_shards": 4,
"relocating_shards": ,
"initializing_shards": ,
"unassigned_shards": 4,
"delayed_unassigned_shards": ,
"number_of_pending_tasks": ,
"number_of_in_flight_fetch": ,
"task_max_waiting_in_queue_millis": ,
"active_shards_percent_as_number": 50
}

相关文章