ElasticSearch 数据分片

一、ElasticSearch 分片

ElasticSearch集群中有许多个节点(Node),每一个节点实例就是一个实例;数据分布在分片之间。集群的容量和性能主要取决于分片如何在节点上如何分配。将数据分片是为了提高可处理的容量和易于进行水平扩展,为分片做副本是为了提高集群的稳定性和提高并发量。每个分片之间是相互独立的,对于搜索request 每个分片都会执行。

二、分片

分片好比在 Mysql中 的分表,将数据分布在多张表中。

主分片(shard):主分片是数据的容器,文档保存在主分片内,主分片又被分配到集群内的各个节点里。每个shard都是一个lucene的索引文件(index)。

副本分片(replica):副本是对主分片的Copy,同步存储主分片的数据内容。为了达到高可用,当分片所在的物理节点宕机,ES可以使用副本机制进行恢复,从而避免数据丢失.。一个分片只能存放 Integer.MAX_VALUE - 128 = 2,147,483,519个docs。

※:并不是副分片越多越好,因为每个分片都相当于一个索引文件,会占用一定的文件句柄、内存及cpu,并且分片间的数据同步也会占用一定的网络带宽。副本是乘法,越多消耗越大,但也越保险。分片是除法,分片越多,单分片数据就越少也越分散。

※:在主分片挂掉后,会从副本分片中选举一个升级为主分片,当副本升级为主分片后,由于少了一个副本分片,所以集群状态会从green改变为yellow,但是此时集群仍然可用。在一个集群中有一个分片的主分片和副本分片都挂掉后,集群状态会由yellow改变red,集群状态为red时集群不可正常使用。

※:由于elasticSearch 通过路由定位公式找到每一个数据对应的具体分片的。

shard = hash(routing)%number_of_primary_shards

routing的默认值就是这个document的_id(也可以手动指定),这也说明了主分片数一旦定下来就不能再改变的原因,因为分片数改变后,所有之前的路由值都会变得无效,之前的文档数据也就找不到了。

三、节点

Master节点:职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点,稳定的主节点对集群的健康是非常重要的。

节点对等:每个节点都能接收请求,每个节点接收到请求后都能把该请求路由到有相关数据的其他节点上,接收原始请求的节点负责采集数据并返回给客户端。

协调节点:一个写请求被发送到集群的一个节点后该节点称为协调节点。其职责是广播查询请求到所有相关分片并将它们的响应整合成全局排序后的结果集合后返回给客户端。

※:增加和删除节点,会自动平衡 shard 在剩余节点中的分配。

※:如果集群中只有一个节点,就没有地方分配副本,此时副本的状态就是unassigned(未分配的分片),也就是说主副分片不能存在于同一台机器上。

※:一旦集群中的节点发生变化,它们就会协商谁将成为主节点,ES中所有节点都有机会成为主节点,可以通过设置主节点的最小数量防止脑裂(split brain)问题,一般的规则是集群节点数除以2(向下取整)再加一。

四、查询和写入过程

查询:当协调节点收到查询 request 时,先在本地创建一个大小为 from + size 的空优先队列,然后将请求广播到索引的每个分片中,分片在本地执行查询并添加结果到本地有序优先队列中后返回给协调节点,协调节点将分片级的结果合并到自己的有序优先队列里并返回。

写入:通过 routing 以及协调节点确定写到具体的某个主分片上后,并发的向所有副本同步数据(乐观锁),所有副本同步完成后即为成功(类似 kafka 的ACK应答机制)

※:ElasticSearch 通过增加 translog日志保证数据存储可靠性。

当新增了一个文档数据后首先被写入内存中,如果此时宕机数据将会丢失,为此新增 translog 日志记录数据,translog 是追加写入,因此性能比较好。
通过不断的执行 refresh 操作(操作间隔大约1s),将数据以段 (segment) 的形式提交到文件缓存系统中,此时虽然还真正的落盘但是可以正常打开并读取文件。由于 refresh 操作会产生大量很小的段(segment),ES会对符合条件的segment进行合并操作,减少lucene中的segment个数,提高查询速度,降低负载。
随着 每30分钟或当translog达到一定大小,ES会触发一次flush操作,将所有内存中的 segment fsync到磁盘,数据就完成了持久化。

标题

Tip: 为什么不直接刷到磁盘,而是写入文件缓存系统?

每30分钟或当translog达到一定大小(由index.translog.flush_threshold_size控制,默认512mb),ES会触发一次flush操作

fsync 操作代价很大,如果每次索引一个文档都去执行一次的话会造成很大的性能问题,但是这里新segment会被先写入到文件系统缓存,这一步代价会比较低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/294658.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】使用fastjson返回给echarts的时候怎么不忽略null值?

问题复现: 在使用fastjson的将对象序列化成json字符串的时候,如果对象属性为null的话,会被忽略掉的。有时候,这些null值还是很有用的。比如我们在使用echarts的时候,返回给前端就不能因为null而忽略,如果忽…

前端开发基于Qunee绘制网络拓扑图总结-01

节点、连线添加label标签: 当需要在节点或者连线上添加图标、文字等醒目标识时,可添加label标签 自定义事件控制label标签的显示、隐藏: 外部点击事件控制某些自定义标识显、隐 showHideLableUI(edge, visible) {let uis edge.bindingUIs…

揭秘2024年最新骨传导耳机排行榜,全面解析骨传导耳机排行榜品牌

随着科技的飞速发展,人们对音质和舒适度的需求也在不断提高。骨传导耳机作为一种独特的耳机类型,近年来逐渐受到了消费者的关注。它通过将声音通过骨骼传导,而不是传统的耳道传递,既能保证音质,又能避免长时间佩戴耳机…

使用教程之【SkyWant.[2304]】路由器操作系统,破解移动【Netkeeper】校园网【小白篇】

许多高校目前饱受Netkeeper认证的痛苦,普通路由器无法使用, 教你利用SkyWant的Netkeeper认证软件来使你的SkyWant路由器顺利认证上网,全宿舍又可以合作共赢了! 步骤一:正确连接网线,插电开机 正确连接网…

vscode | python | remote-SSH | Debug 配置 + CLIP4Clip实验记录

安装Extension 本地安装Remote-SSH、python 远程服务器上安装Python 难点:主机和远程服务器上安装Python扩展失败,可能是网络、代理等原因导致解决方法: 主机在官方网站下载Python扩展:https://marketplace.visualstudio.com/it…

idea中使用wsl作为启动项目的环境,便于linux环境下的测试

在idea中使用wsl作为启动项目的系统环境,首先安装wsl,这里不做过多的介绍,可以直接去微软官网看教程,也可以自己搜教程。 在wsl中安装jdk,linux中直接用命令安装openjdk即可 sudo apt-get updatesudo apt install ope…

【愚公系列】2023年12月 HarmonyOS应用开发者高级认证(完美答案)

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主&#xf…

轻松搭建知识付费小程序:让知识传播更便捷

明理信息科技saas知识付费平台 在当今数字化时代,知识付费已经成为一种趋势,越来越多的人愿意为有价值的知识付费。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。同时,开发和维护…

LeetCode刷题--- 目标和

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言:这个专栏主要讲述递归递归、搜…

【华为鸿蒙系统学习】- 如何利用鸿蒙系统进行App项目开发|自学篇

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 创建鸿蒙第一个App项目 项目创建 工程目录区 预览区 运行Hello World 基本工程目录 ws:工…

XPM_CDC_PULSE

MACRO_GROUP: XPM MACRO_SUBGROUP: XPM_CDC 1、Introduction 此宏将源时钟域中的脉冲同步到目标时钟域。源时钟域中任何大小的脉冲,如果正确启动,将生成单个目标时钟周期大小的脉冲。 为了正确操作,输入数据必须由目标时钟采样两次或…

基于SSM的文化线上体验馆(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的文化线上体验馆(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvc MybatisVueLayu…