概述
elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,它不仅可以进行全文搜索,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器,处理PB级别的结构化或非及结构化数据
- 提供了REST API的操作接口,开箱即用
存储单位:
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
基本概念
elasticsearch是面向文档型数据库,一条数据在这里就是一个文档
-
索引(Index)
索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,您可以定义尽可能多的索引。 -
文档(document)
Elasticsearch文档是一个存储在索引中的JSON文档。每个文档都有一个类型和对应的ID,这是惟一的。
如:
{
"_index" : "packtpub",
"_type" : "elk",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source":{
book_name : "learning elk",
book_author:"鲁迅"
}
}
-
字段(Field)
文档内的一个基本单位,键值对形式(book_name : “learning elk”) -
类型(Type)
类型是index下的一个逻辑分类。比如weather这个index里,可以按照城市分组,也可以按照气候类型分组,这种分组就叫做类型 -
映射(Mapping)
映射用于映射文档的每个field及其对应的数据类型,例如字符串、整数、浮点数、双精度数、日期等等。 -
分片(Shard)
shard:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。
-
分词
把一段文本中的词按一定规则进行切分 -
主分片(Primary shard)与复制分片(replica shard)
复制分片通常驻留在一个不同的节点上,在故障转移和负载平衡的情况下,可以满足多个请求。 -
集群(Cluster)
集群是存储索引数据的节点集合。elasticsearch提供了水平的可伸缩性用以存储集群中的数据。每个集群都由一个集群名称来表示,不同的节点指明集群名称连接在一起。 -
节点(Node)
节点是一个单独运行的elasticsearch实例,它属于一个集群。默认情况下,elasticsearch中的每个节点都加入名为“elasticsearch”的集群。每个节点都可以在elasticsearch中使用自己的elasticsearch.yml,它们可以对内存和资源分配有不同的设置。
ES集群
集群节点分类
- 数据节点(Data Node)
数据节点索引文档并对索引文档执行搜索。建议添加更多的数据节点,以提高性能或扩展集群。通过在elasticsearch中设置这些属性,可以使节点成为一个数据节点。elasticsearch.yml配置
node.master = false
node.data=true - 管理节点(Master Node)
主节点负责集群的管理。对于大型集群,建议有三个专用的主节点(一个主节点和两个备份节点),它们只作为主节点,不存储索引或执行搜索。在elasticsearch.yml配置声明节点为主节点:
node.master = true
node.data=false - 路由节点亦称负载均衡节点(Routing Node or load balancer node)
这些节点不扮演主或数据节点的角色,但只需执行负载平衡,或为搜索请求路由,或将文档编入适当的节点。这对于高容量搜索或索引操作非常有用。
node.master = false
node.data=false - 提取节点(lngest节点)
可以创建多个预处理管道,用以修改传入文档
Zendiscovery通信
默认ES进程会绑定在自己的回环地址上,然后扫描本机的9300-9305号端口,尝试跟其他端口上的启动的es进程进行通信,然后自动形成一个集群。如果修改了监听地址为非回环地址,ES按照配置文件里指定的地址或自动扫描当前网段其他节点,自动跟其他节点上的es node进行通信
Master选举
如下图所示
脑裂
因为网络或者其他故障,导致一个集群被划分成了两伙或者多方势力,这些群伙都有多个node以及一个master,那么原来的集群就出现了多个master。master主宰了集群状态的维护以及shard的分配,因此如果有多个master,可能会导致数据被破坏
容错机制
状态 | 意义 |
---|---|
green | 所有主分片和从分片都可用 |
yellow | 所有主分片可用,但存在不可用的从分片 |
red | 存在不可用的主分片 |
- 宕机瞬间
master node宕机的一瞬间,该节点的primary shard(主分片)就没有了,此时状态就不是active status,那么集群中就不是所有的主分片都是active的了
- 容错步骤一
master选举,es自动选举另一个node成为master,承担起master的责任
- 容错步骤二
新master将丢失掉的主分片的某个复制分片提升为主分片,此时cluster status会变成yellow,因为所有的主分片都变成active status了,但是少了一个复制分片
- 容错步骤三
重启node,新master会将缺失的副本都copy一份到该节点,而且该节点会使用之前已有的分片数据,只是同步一下宕机的修改,cluster status变为green