2021年大数据ELK(十一):Elasticsearch架构原理
全网最详细的大数据ELK文章系列,强烈建议收藏加关注!
新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点。
目录
Elasticsearch架构原理
一、Elasticsearch的节点类型
1、Master节点
2、DataNode节点
二、分片和副本机制
1、分片(Shard)
2、副本
3、指定分片、副本数量
三、Elasticsearch重要工作流程
1、Elasticsearch文档写入原理
2、Elasticsearch检索原理
四、Elasticsearch准实时索引实现
1、溢写到文件系统缓存
2、写translog保障容错
3、flush到磁盘
4.、segment合并
Elasticsearch架构原理
一、Elasticsearch的节点类型
在Elasticsearch有两类节点,一类是Master,一类是DataNode。
1、Master节点
在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然后使用Zen Discovery机制找到集群中的其他节点,并建立连接。
discovery.seed_hosts: ["node1", "node2", "node3"]
并从候选主节点中选举出一个主节点。
cluster.initial_master_nodes: ["node1", "node2"]
Master节点主要负责:
- 管理索引(创建索引、删除索引)、分配分片
- 维护元数据
- 管理集群节点状态
- 不负责数据写入和查询,比较轻量级
一个Elasticsearch集群中,只有一个Master节点。在生产环境中,内存可以相对小一点,但机器要稳定。
2、DataNode节点
在Elasticsearch集群中,会有N个DataNode节点。DataNode节点主要负责:
- 数据写入、数据检索,大部分Elasticsearch的压力都在DataNode节点上
- 在生产环境中,内存最好配置大一些
二、分片和副本机制
1、分片(Shard)
- Elasticsearch是一个分布式的搜索引擎,索引的数据也是分成若干部分,分布在不同的服务器节点中
- 分布在不同服务器节点中的索引数据,就是分片(Shard)。Elasticsearch会自动管理分片,如果发现分片分布不均衡,就会自动迁移
- 一个索引(index)由多个shard(分片)组成,而分片是分布在不同的服务器上的
2、副本
为了对Elasticsearch的分片进行容错,假设某个节点不可用,会导致整个索引库都将不可用。所以,需要对分片进行副本容错。每一个分片都会有对应的副本。在Elasticsearch中,默认创建的索引为1个分片、每个分片有1个主分片和1个副本分片。
- 每个分片都会有一个Primary Shard(主分片),也会有若干个Replica Shard(副本分片)
- Primary Shard和Replica Shard不在同一个节点上
3、指定分片、副本数量
// 创建指定分片数量、副本数量的索引
PUT /job_idx_shard
{"mappings": {"properties": {"id": { "type": "long", "store": true },"area": { "type": "keyword", "store": true },"exp": { "type": "keyword", "store": true },"edu": { "type": "keyword", "store": true },"salary": { "type": "keyword", "store": true },"job_type": { "type": "keyword", "store": true },"cmp": { "type": "keyword", "store": true },"pv": { "type": "keyword", "store": true },"title": { "type": "text", "store": true },"jd": { "type": "text"}}},"settings": {"number_of_shards": 3,"number_of_replicas": 2}
}
// 查看分片、主分片、副本分片
GET /_cat/indices?v
三、Elasticsearch重要工作流程
1、Elasticsearch文档写入原理
1、选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个 coordinating node(协调节点)
2、计算得到文档要写入的分片
- `shard = hash(routing) % number_of_primary_shards`
- routing 是一个可变值,默认是文档的 _id
3、coordinating node会进行路由,将请求转发给对应的primary shard所在的DataNode(假设primary shard在node1、replica shard在node2)
4、node1节点上的Primary Shard处理请求,写入数据到索引库中,并将数据同步到 Replica shard
5、Primary Shard和Replica Shard都保存好了文档,返回client
2、Elasticsearch检索原理
- client发起查询请求,某个DataNode接收到请求,该DataNode就会成为协调节点(Coordinating Node)
- 协调节点(Coordinating Node)将查询请求广播到每一个数据节点,这些数据节点的分片会处理该查询请求。协调节点会轮询所有的分片来自动进行负载均衡
- 每个分片进行数据查询,将符合条件的数据放在一个优先队列中,并将这些数据的文档ID、节点信息、分片信息返回给协调节点
- 协调节点将所有的结果进行汇总,并进行全局排序
- 协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据返回给客户端
四、Elasticsearch准实时索引实现
1、溢写到文件系统缓存
- 当数据写入到ES分片时,会首先写入到内存中,然后通过内存的buffer生成一个segment,并刷到文件系统缓存中,数据可以被检索(注意不是直接刷到磁盘)
- ES中默认1秒,refresh一次
2、写translog保障容错
- 在写入到内存中的同时,也会记录translog日志,在refresh期间出现异常,会根据translog来进行数据恢复
- 等到文件系统缓存中的segment数据都刷到磁盘中,清空translog文件
3、flush到磁盘
- ES默认每隔30分钟会将文件系统缓存的数据刷入到磁盘
4.、segment合并
- Segment太多时,ES定期会将多个segment合并成为大的segment,减少索引查询时IO开销,此阶段ES会真正的物理删除(之前执行过的delete的数据)
-
2021年大数据ELK(十一):Elasticsearch架构原理相关推荐
- 2021年大数据ELK(二):Elasticsearch简单介绍
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Elasticsearch简介 1.介绍 2.创始人 二.E ...
- 2021年大数据ELK(八):Elasticsearch安装IK分词器插件
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装IK分词器 一.下载Elasticsearch IK分词器 ...
- 2021年大数据ELK(六):安装Elasticsearch
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装Elasticsearch 一.创建普通用户 二.为普通用户 ...
- 2021年大数据ELK(五):Elasticsearch中的核心概念
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Elasticsearch中的核心概念 一.索引 index 二 ...
- 2021年大数据ELK(三):Lucene全文检索库介绍
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.什么是全文检索 1.结构化数据与非结构化数据 2.搜索结构化 ...
- 2021年大数据ELK(四):Lucene的美文搜索案例
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 美文搜索案例 一.需求 二.准备工作 1.创建IDEA项目 2. ...
- 2021年大数据ELK(一):集中式日志协议栈Elastic Stack简介
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.简介 二.ELK 协议栈介绍及体系结构 三.集中式日志协议栈 ...
- 2021年大数据ELK(二十一):Logstash简介和安装
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Logstash简介和安装 一.简介 1.经典架构 2.对比Flume 3.对 ...
- 2021年大数据ELK(二十五):添加Elasticsearch数据源
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 添加Elasticsearch数据源 一.Kibana索引模式 添加Elast ...
最新文章
- Python 标准库之 xml.etree.ElementTree xml解析
- Linux下使用Apache实现域名转发(Tomcat/JBOSS)
- Oracle AWR 报告中 No data exists for this section of the report 说明
- Android 安卓 四大组件
- echarts symbol 回调函数_凹函数和凸函数到底什么样?傻傻分不清楚
- 15行代码让苹果设备崩溃,最新的iOS 12也无法幸免
- 第9章:Bootstrap Token方式增加Node
- 机器学习参数优化数据改用所有数据还是训练集
- 20张图,带你搞懂高并发中的线程与线程池!
- (117)FPGA面试题-使用三态缓冲器实现漏极开路缓冲
- java 中hashcode 与 equals的关系
- php调用ruby,ruby、javascript、php中的观察者模式实现代码
- C++将double类型小数以16进制格式打印出
- Android平台i2c-tools及16位地址读写,以及not executable: 64-bit ELF file解决办法
- 使用spring提供的URL多级路径匹配器
- 去掉GaussView启动警告窗口的办法
- ios开发swift_10位Swift和iOS开发大师
- Web安全班作业 | WireShark抓包ARP报文分析并实施ARP中间人攻击
- SaaS是什么?是订阅吗?还是web应用?
- Windows上部署Discuz论坛
热门文章
- 2021年大数据ELK(二):Elasticsearch简单介绍