ES节点类型和读写流程

2019-08-14  本文已影响0人  mysia

1. ElasticSearch节点类型

1.1 master node

职责:

最佳实践:

1.2 data node

职责:

最佳实践:

1.3 Master Eligible Nodes & 选主流程

1.4 Coordinating Node

1.5 节点类型总结

节点类型 配置参数 默认值
master eligible node.master true
data node.data true
ingest node.ingest true
coordinating only 设置上面三个参数全部为false
machine learning node.ml true(需要enable x-pack)

2. ElasticSearch写入流程

Elasticsearch 在创建,更新甚至删除的时候会更改 document version

2.1 Elasticsearch 如何做到高可用

  1. 数据首先写入到 Index buffer(内存) 和 Transaction log(磁盘) 中,即便内存数据丢失,也可读取磁盘中的 Transaction log
  2. 默认 1s 一次的 refresh 操作将 Index buffer 中的数据写入 segments(内存),此时数据可查询
  3. 默认30分钟执行一次的 flush 操作,将 segments 写入磁盘,同时清空 Transaction log。若Transaction log 满(默认512M),也会执行此操作;
  4. merge 操作,定期合并 segment

Elasticsearch 中的每个索引操作首先使用路由解析到一个副本组,通常基于文档ID。一旦确定了副本组,操作将在内部转发到组的当前主分片。主分片负责验证数据格式并将其转发到其他副本。由于副本可以由主分片异步复制,所以不需要主副本复制到所有副本。相反,Elasticsearch 维护一个应该接收操作的副本分片列表。这个列表称为同步副本,由主节点维护。顾名思义,这些是一组保证处理了所有已向用户确认的索引操作和删除操作的分片副本。主分片负责维护,因此必须将所有操作复制到这个集合中的每个副本分片

主分片遵循以下基本流程:

2.2 Lucene Index

2.3 什么是 Refresh

2.4 什么是 Transaction log

2.5 什么是 Flush

ES Flush & Lucene Commit

2.6 什么是 Merge

3. Elasticsearch 读流程

Elasticsearch 使用主备模型。主备份模型的一个优点是,主分片和其所有副本分片存有相同的数据。因此,一个同步副本就足以满足读请求。

Elasticsearch 中的读取可以直接使用 document ID,也可以是非常复杂的搜索,包含复杂的聚合,这个操作会占用大量CPU资源。

当节点接收到读请求时,该节点负责将其转发给包含相关分片的节点、整合所有分片的返回值并响应客户端(类似于一个MapReduce)。我们将该节点称为请求的协调节点。基本流程如下:

参考: https://juejin.im/post/5d4beac0f265da03c23ec053

上一篇下一篇

猜你喜欢

热点阅读