Elasticsearch从浅入深(一):基本介绍
基本介绍
Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful的搜索引擎,
能够实现快速,近实时的搜索。
Elasticsearch不仅是一种全文索引技术,也是一种面向文档型的nosql数据库。
Elasticsearch的应用场景
ES的大部分场景是:
“一个常见的设置是使用其它数据库作为主要的数据存储,
例如mysql等数据库,然后再使用 Elasticsearch 做数据检索”。
基本名词介绍
一:Near Realtime (NRT)
Elasticsearch是一个近乎实时的搜索平台。这意味着从索引文档到可以搜索的时间只有轻微的延迟(通常是1秒)。
二:Cluster
集群,是多个节点(服务器)的集合。每一个集群都有属于自己的名字,要确保不要出现相同的集群名字。
三:Document
文档,是可以被索引的基本信息单元。文档是用JSON来表示的。
四:Index
索引,具有某种相似特征的文档的集合。也就是有多个文档的意思。
例如,你可以有一个顾客信息索引,产品信息索引,订单信息索引。
索引都有一个名称,而且必须是小写的。
索引可以用于对它包含的多个文档进行索引,搜索,更新等操作。
五:Shar & Replicas
分片 和 副本
-
分片:
一个索引可能存储了大量的数据,这些数据可以超过了单个节点的硬件限制。
例如,一个包含了10亿条文档占用了1TB的磁盘空间,那么它就不适合在单个节点上了。
所以,为了解决这个问题,ES就提供了可以把索引分为多个片(分片)的功能。
在创建索引的时候,我们就可以定义所需要的分片数量。每个分片就是一个功能完全独立的索引,可以驻留在集群中的任何节点上。 -
副本:
在一个网络环境,很有可能出现故障,所以需要有一个容灾机制。
ES就提供了将一个或者多个索引分片复制到其他的节点的功能。
(而且复制之后是放在另外的节点的,并不是自身的节点,也保证了shard的高可用)这种复制后的索引或者索引分片,我们称之为副本。
在默认情况下,ES的每个索引都分配了5个主分片和一个副本。(这里的副本是针对索引而言。也就是复制了一个完整的索引。)
举例,例如一个ES集群有两个节点,而且每个索引分配5个主分片和一个副本,那么就是每个索引有10个分片(包括主分片和副分片,因为副分片也是复制主分片的)如下图显示
看了上图我们可以发现,每个分片的主和副分片都是在不同节点的。这样才能保证高可用。
注意:我们可以为每个索引定义分片和副本的数量。
创建索引后,可以随时动态地更改副本的数量,但不能更改分片的数量。
总结:就是一个索引可以分成多个分片。分片也可以被复制。
扩展问题
1)主分片和副本分片有什么区别?
主分片与副本都能处理查询请求,
它们的唯一区别在于只有主分片才能处理索引请求。
同时用户也可在任何时候添加或删除副本。
额外的副本能给带来更大的容量, 更高的呑吐能力及更强的故障恢复能力。
2)为什么要主分片和副分片在不同的节点上?
一是为了更好的均衡负载,不同节点上二是节点发生故障时,
主分片和副本分片一起故障,没法保证高可用性。
所以 Elasticsearch 集群最好要有 2 个节点或以上。
3)分片的大小是多少?
分片的大小没有固定的限制,
但是通常情况下很多场景限制在 50GB 的分片大小以内。
一般都是几G到几十G,尽量避免使用非常大的分片。