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`.