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会被先写入到文件系统缓存,这一步代价会比较低

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity | HybridCLR 热更新(Windows端)

目录 一、准备工作 1.环境相关 2.Unity中配置 二、热更新 1.创建 HotUpdate 热更新模块 2.安装和配置HybridCLR 3.配置PlayerSettings 4.创建热更新相关脚本 5.打包dll 6.测试热更新 一、准备工作 1.环境相关 安装git环境。Win下需要安装visual studio 2019或更高版…

为实体服务器配置Ubuntu

简介 我们在使用虚拟机时,直接在网上找到镜像然后下载到本地,在VMware创建实例时将该iso文件作为镜像源然后进行基础配置就可以轻松安装配置好Linux虚拟机。 在为实体服务器安装Linux系统,同样的,我们也需要镜像源(即…

持续集成交付CICD:GitLabCI 封装Python类 并结合 ArgoCD 完成前端项目应用发布

目录 一、实验 1. 环境 2. Python代码实现获取文件 3.Python代码实现创建文件 4.Python代码实现更新文件 5.GitLab更新库文件与运行流水线 6.ArgoCD 完成前端项目应用发布 二、问题 1.Python获取GitLab指定仓库文件报错 2. K8S master节点运行Python代码报错 一、实验…

深度剖析Ajax实现方式(原生框架、JQuery、Axios,Fetch)

Ajax学习 简介: ​ Ajax 代表异步 JavaScript 和 XML(Asynchronous JavaScript and XML)的缩写。它指的是一种在网页开发中使用的技术,通过在后台与服务器进行数据交换,实现页面内容的更新,而无需刷新整个…

Halcon 检测焊点短路

Halcon 检测焊点短路 read_image (Image1, D:/image/bilibili/photo/检测焊接短路 (4).bmp) dev_close_window () dev_open_window (0, 0, 512, 512, black, WindowHandle) dev_display (Image1) set_display_font (WindowHandle, 16, mono, true, false) threshold (Image1, …

kindeditor The method toJSONString() is undefined for the type JSONObject

kindeditor 插件上传文件出错的 json_simple-1.1.jar 也不知道是多老的项目,多老的包了,稀有东西

基于SSM的剧本杀预约系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的剧本杀预约系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Sp…

日志服务 SLS 深度解析:拥抱云原生和 AI,基于 SLS 的可观测分析创新

云布道师 10 月 31 日,杭州云栖大会上,日志服务 SLS 研发负责人简志和产品经理孟威等人发表了《日志服务 SLS 深度解析:拥抱云原生和 AI,基于 SLS 的可观测分析创新》的主题演讲,对阿里云日志服务 SLS 产品服务创新以…

使用 Elasticsearch 检测抄袭 (一)

作者:Priscilla Parodi 抄袭可以是直接的,涉及复制部分或全部内容,也可以是释义的,即通过更改一些单词或短语来重新表述作者的作品。 灵感和释义之间是有区别的。 即使你得出类似的结论,也可以阅读内容,获得…

罗技鼠标驱动下载地址

罗技鼠标驱动下载地址 Logitech G HUB Advanced Gaming Software, RGB & Game Profiles

Flutter 三: Dart

1 数据类型 数字(number) int double 字符串转换成 num int.parse(“1”) double.parse(“1”);double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为stringdouble 直接舍弃小数点后几位的数据 可使用字符串截取的方式 字符串(string) 单引号 双引号 三引号三引号 可以输…

windos/ubuntu20.4下UE4.27.2像素流送

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行,用户可以通过浏览器操作虚幻引擎应用程序,客户端无需下载虚幻引擎,本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

解决xcode 运行不老iPhone 15 iOS 17.1 设备的问题

问题 最近要查看一下ios 17.1的设备的性能,但是当前版本的Xcode运行不了 解决方法 1、更新Xcode版本到15.1以上 2、更新完成后,大概率出现这个情况 原因:在app Store中更新到Xcode15后,运行不了模拟器和真机.需要下载iOS 17对应的模拟器.&…

层次分析法

层次分析法主要用于解决评价类问题(例如选择哪种方案最好,哪位运动员或者员工表现的更优秀) 先用一道引出层次分析法的例题:小明同学高考填完志愿后,小明想出去旅游。在查阅了网上的攻略后,他初步选择了苏杭、北戴河和桂林三地之一…

使用Aspose.Slides 控件,在线将 ODP 转换为 PPT

OpenOffice 等开源生产力工具有其用途。但如果您希望在线将 ODP 转换为 PPT,您很可能已经确定 Microsoft PowerPoint 的专有 PPT 格式和平台比 OpenOffice ODP 更适合您的需求。 本文的第一部分重点介绍在线将 ODP 转换为 PPT 的快速方法。第二部分探讨涉及C#应用程…

Redis设计与实现之AOF

一、AOF Redis 分别提供了 RDB 和 AOF 两种持久化机制: RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中。 AOF 则以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件,以此达到记录数据库状态的目的。 本章首先介绍…

从零开发短视频电商 在AWS上SageMaker部署模型自定义日志输入和输出示例

从零开发短视频电商 在AWS上SageMaker部署模型自定义日志输入和输出示例 怎么部署自定义模型请看:从零开发短视频电商 在AWS上用SageMaker部署自定义模型 都是huaggingface上的模型或者fine-tune后的。 为了适配jumpstart上部署的模型的http输入输出,我…

springMVC-与spring整合

一、基本介绍 在项目开发中,spring管理的 Service和 Respository,SrpingMVC管理 Controller和ControllerAdvice,分工明确 当我们同时配置application.xml, springDispatcherServlet-servlet.xml , 那么注解的对象会被创建两次, 故…

2023 下半年系统架构设计师学习进度

文章目录 复习计划:每周350分钟第一周(339分钟)第二周(265分钟)第三周(171分钟)第四周(214分钟)第五周(274分钟)第六周(191分钟&#…

初识Stable Diffusion

界面选项解读 这是在趋动云上部署的Stable Diffusion txt2img prompt (1)分割符号:使用逗号 , 用于分割词缀,且有一定权重排序功能,逗号前权重高,逗号后权重低 (2)建议的通用范式…