NRT(近实时搜索)
Elasticsearch是一个NRT平台。这意味着当你索引一个文件时,在细微的延迟(通常1s)之后,该文件才能被搜索到。
Cluster(集群)
cluster是在所有节点中保存全部数据且提供联合索引和搜索功能的一个或多个节点(服务器)的集合。
每个cluster有唯一的名称,默认为”elasticsearch”。该名称很重要,因为如果节点通过cluster名称加入cluster,那么该节点就只能成为该cluster的一部分。确保在不同环境中不重复使用相同的cluster名称,除非节点加入了错误的cluster。
举例,对development、stage和production集群分别使用logging-dev、logging-stage和logging-prod。
注意,cluster可以只配置一个节点。而且,你可能也会有多个独立的clusters,每个cluster都有它自己的唯一的名称。
指定cluster名称命令
./elasticsearch -- cluster.name my_cluster_name
Node(节点)
一个node是一个server,是cluster的一部分,它存储数据且参与cluster的索引和查询功能。和cluster一样,每个节点都有自己的名称,默认在启动时赋予一个随机的人名。如果你不想要默认的名称,可以自定义名称。该名称对cluster管理很有用,特别是当你想确认哪个server对应哪个节点时。
一个node可以配置指定cluster名称加入该cluster。默认,每个节点加入名为”elasticsearch”的cluster。
一个cluster可以包含任意数量的node。而且,如果没有其他node运行,启动一个node会默认形成一个单节点cluster,名为”elasticsearch”。
指定node名称命令
./elasticsearch--node.namemy_node_name
Index(索引)
index是具有相似特征的文档集合。例如,你可以有顾客数据的index、商品种类的index和订单数据的index。
每个index都有唯一的名称(必须小写),当执行索引、搜索、更新和删除操作时都需要根据该名称找到对应的index。
一个cluster可以包含任意数量的index。
Type(类型)
在一个index中,可以定义一个或多个type。type是index的逻辑分类。
通常,type拥有一组通用field的文档集合。举例,你运行一个博客平台,把全部数据存储在一个index中。在这个index中,你可以为用户数据定义一个type,为博客数据定义一个type,为评论数据定义一个type。
Document(文档)
document是索引的基本单元信息。举例,你有一个客户的document、一个商品的document和一个订单的document。该document用JSON表示。
一个index/type中,可以包含任意多的document。注意,虽然document物理上存在index中,document实际上必须被分配到index中的type上。
Shards & Replicas(分片和副本)
一个index可以存储数量超出硬件限制的数据。举例,一个index包含10亿文档,占据1TB硬盘空间,就会导致无法放在单个节点硬盘上或者响应request太慢。
为了解决这个问题,Elasticsearch提供了将索引分片的技术,称为shard。当创建一个index,可以指定shard的数量。每个shard内部都是全功能而且相互独立的”index”,可以放在cluster上的任意node上。
Sharding重要的原因:
- 允许横向扩展容量
- 分布式并行操作shard(可能在多个node上),因而提高性能
分片是如何分布、文档是如何聚合回搜索结果的机制完全由Elasticsearch管理,对用户透明。
在网络/云环境中,故障是很常见的,比如一个shard/node宕了,因而容错机制非常有效,也是被推荐的。为此,Elasticsearch允许创建index的shard的一个或多个副本,称为replica。
Replication重要的原因:
- 提供高可用性,以防shard/node失效。注意,一个replica shard绝对不能分配到它原先所在node(即创建副本的原本所在的node)。
- 允许扩展搜索容量,因为搜索可以并行在所有replica上执行
总结一下,每个index可以被分为多个shard。一个index也可以被复制0份或者多份。一旦复制过,每个index将有主shard(创建副本的原本所在的shard)和replica shard(主shard的副本)。shard和replica的数量可以在index创建的时候自定义。index创建之后,你可以动态改变replica的数量,但是不能改变shard的数量。
默认的,每个index被分配5个主shard和1个replica,这意味着,如果你在cluster中有至少两个节点,每个index将有10个shard,分别是5个主shard和另外5个replica shard(1个完整的replica)。