elasticsearch 基本概念

概念

ElasticSearch 是一个基于Lucene搜索引擎为核心构建的开源、分布式、RESTFUL搜索服务器

集群(cluster)

由多个elasticsearch实例组成的去中心化的服务。

节点(node)

即一个elasticsearch 实例。节点有三种类型

  • master-node 主节点,所有的新增、删除,数据分片由主节点操作

es底层无更新数据操作,上层封装的更新实际是删除后再新增

  • client-node

用于分发请求,做负载均衡用

  • data-node 处理搜索操作,

> `client-node`决定分发至哪 个 `data-node` , data-node 的数据则由 master-node 同步

分片

es存储数据时,会将数据分发给多个存储`Lucene`索引的物理机上,这些`Lucene`索引称为分片索引,分发的过程被称为索引分片。在es集群中,索引分片是自动完成的,而所有分片索引(shard)是作为一个整体呈现给用户的。

分片有`主分片` 以及`复制分片`

  • 主分片

在一个多分片的索引写入数据时,通过路由来确定具体写入哪个分片。 routing 是一个可变值,默认为文档 `_id` 。

创建索引时,一但指定主分片的个数,即决定该索引能够存储多少数据 - `分片数 = 索引数据大小 / 30G`

shard = hash(routing) % number_of_primary_shards
  • 复制分片

复制分片是主分片的一个副本,主要用于防止数据丢失,同时可以提供请求,比如搜索或者从另的shard取回文档

分片设置实例如下


{ 	"settings":{ 		"number_of_shards": 3, 		"number_of_replicas":1 	} }


段(segment)

索引数据写入时,会先将数据发送至`index buffer` 同时将操作记录至`translog` 中。 再解析成`segment` 写到filesystem cache中即`refresh`,可如下设置 。最后再`flush`至disk中

{ 	"settings":{ 		"refresh_interval":1s 	} }

数据由index buffer 解析至filesystem cache的过程叫`refresh`.


elasticsearch 基本概念

您可能还会对下面的文章感兴趣: