elasticsearch系列六:索引重建
概述
我们再起初创建索引的时候由于数据量、业务增长量都并不大,常常不需要搞那么多分片或者说某些字段的类型随着业务的变化,已经不太满足未来需求了,再或者由于集群上面索引分布不均匀导致节点直接容量差异较大等等这些情况,此时我们就需要重建索引。
案例
信步云生产环境es集群由于2022年2月刚上线,诸多服务与下半年才逐渐接入导致不同月份的索引之间数据差异较大,导致节点之间容量差了10%以上。
此时有人就有疑问了,为什么会这样呢?索引都是按照同一个模板创建的,大家的分片都是一样的,并且es集群各个节点之间的shard也是比较均衡的。
问题就在这里,es是按照shard进行重平衡的,即便都是40个shard,但是由于每个shard之间的数据量不一致这样就导致了节点之间磁盘利用率的差距。
我们就在es扩容申请时间窗口内顺便把这个问题修复了,怎么搞呢,这时候就需要重建索引了,因为索引的shard是不能动态调整的,你可以调整副本replica 数量,就好比数据库分库分表以后如果按照hash这种方式作为分片算法的话 是不能动态扩容的。
es官方给我们提供了reindex api,它可以将一个索引复制到一个新的索引上,其底层采用的scroll api 其用法如下:
POST /_reindex{"source": {"index": ["log-2022-*"]},"dest": {"index": "log-2022-new"}}
可以通过通配符的方式将多个索引复制到一个新的索引上,那么对于数据量较小的索引这样是没问题的。但是一旦索引数据量很大并且本身es又是低配版本的,此时就需要对reindex调优了,否则你就开始了漫长的等待过程。
我们可以从这几个维度来调整 :
第一 reindex既然是底层依赖scroll api 那么一定是有默认的批量值,通过官方介绍我们知道该值是1000,可以根据实际集群配置 将此值调大。
第二 借助scroll的 sliced来提升性能,你可以理解它是多线程执行或多进程执行。sliced 可以手工配置也可以配置成auto,该值最好等于你索引的分片数,这样几个分片并行执行效率得到成倍提升。
POST /_reindex?slices=5&refresh{"source": {"index": ["log-2022-*"],"size":6000},"dest": {"index": "log-2022-new"}}
第三 将新的索引副本设置为0 等待重建完毕以后再调整副本数量,调大refresh_interval刷新时间,es写入数据是现写jvm内存的默认1秒flush一次
重建完以后我们服务还是读取的旧索引啊,不能再调整程序去吧,此时索引名字变了怎么办呢?我们可以通过别名的方式,将新的索引增加多个别名,该别名可设置成之前的旧索引名字(当然此时旧索引已经删除)默认别名只有读取权限,我们需要通过is_write_index参数设置写入权限。
POST /_aliases{"actions": [{"add": {"index": "test_index","alias": "my_alias","is_write_index":true}}]
此时服务就可以平滑迁到了新的索引上了,集群之间的节点使用率也接近一致了。

相关文章:
elasticsearch系列六:索引重建
概述 我们再起初创建索引的时候由于数据量、业务增长量都并不大,常常不需要搞那么多分片或者说某些字段的类型随着业务的变化,已经不太满足未来需求了,再或者由于集群上面索引分布不均匀导致节点直接容量差异较大等等这些情况,此时…...
GitOps实践指南:GitOps能为我们带来什么?
Git,作为开发过程中的核心工具,提供了强大的版本控制功能。即便在写代码的时候稍微手抖一下,我们也能通过 Git 的差异对比(diff)轻松追踪到庞大工程中的问题,确保代码的准确与可靠。这种无与伦比的自省能力…...
D3485国产芯片+5V工作电压, 内置失效保护电路采用SOP8封装
D3485是一款5V供电、半双工的RS-485收发器,芯片内部包含一路驱动器和路接收器。D3485使用限摆率驱动器,能显著减小EMI和由于不恰当的终端匹配电缆所引起的反射,并实现高达10Mbps的无差错数据传输。D3485内置失效保护电路,保证接收…...
devops使用
官方文档 使用 Git 进行代码 - Azure DevOps | Microsoft Learn...
AI训练师常用的ChatGPT通用提示词模板
AI模型选择:如何选择合适的AI模型? 数据集准备:如何准备用于训练的数据集? 数据预处理:如何对待训练数据进行预处理? 特征工程:如何进行特征选择和特征工程? 超参数调整…...
Java加密算法工具类(AES、DES、MD5、RSA)
整理了有关加密算法工具类,结合了几个博客以及自己改良后可直接使用,主要介绍以下四种加密方式:AES、DES、MD5、RSA,详细介绍都在注释里面有讲。 一、AES import com.alibaba.fastjson.JSONObject; import java.nio.charset.Sta…...
探索Go语言的魅力:一门简洁高效的编程语言
介绍Go语言: Go,也被称为Golang,是由Google开发的一门开源编程语言。它结合了现代编程语言的优点,拥有高效的并发支持和简洁的语法,使其成为构建可伸缩、高性能应用的理想选择。 Go语言的特性: 并发编程…...
【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果
最终效果 文章目录 最终效果素材第一人称人物移动开门效果显示原理渲染相机跟着我们视角移动门的摄像机跟着我们旋转近裁剪面设置传送配置代码实现传送效果结束完结素材 https://assetstore.unity.com/packages/3d/props/interior/door-free-pack-aferar-148411...
DRF(Django Rest Framework)框架基于restAPI协议规范的知识点总结
Django Rest Framework学习 一、初识DRF组件 1.1 FBV和CBV FBV:function based view from django.shortcuts import render, HttpResponse # 这种是基于FBV模式 函数模式实现Views函数 def login(request):if request.method GET:return HttpResponse("Get…...
Linux磁盘与文件系统管理
目录 在linux系统中使用硬盘 磁盘的数据结构 磁盘接口类型 字母含义 MBR磁盘分区 分区类型 分区的缺点 文件系统的 文件系统有什么作用 文件系统的修复 检测并确认新磁盘 参看磁盘信息 查看磁盘信息 添加磁盘 查看添加磁盘情况:sda系统磁盘ÿ…...
数字魔法AI绘画的艺术奇迹-用Stable Diffusion挑战无限可能【文末送书-12】
文章目录 前言一. 技术原理1.1 发展历程 二.对艺术领域的影响三. 挑战与机遇四.AI魔法绘画:用Stable Diffusion挑战无限可能【文末送书-12】4.1 粉丝福利:文末推荐与福利免费包邮送书! 前言 随着人工智能技术的迅猛发展,AI在各个…...
【docker实战】02 用docker安装mysql
本示例采用bitnami的镜像进行安装MySQL 一、镜像搜索 先搜索一下mysql有哪些镜像 [rootlocalhost ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql …...
循环渲染ForEach
目录 1、接口说明 2、键值生成规则 3、组件创建规则 3.1、首次渲染 3.2、非首次渲染 4、使用场景 4.1、数据源不变 4.2、数据源组项发生变化 4.3、数据源数组项子属性变化 5、反例 5.1、渲染结果非预期 5.2、渲染性能降低 Android开发中我们有ListView组件、GridVi…...
纷享销客华为云:如何让企业多一个选择?
纷享销客携手华为云推出多项联合解决方案,为企业的数字化提供了一个新选择。12月12日,纷享销客&华为云联合解决方案发布会在北京举办。本次发布会以“「CRM云」让企业多一个选择”为主题,来自行业头部企业的CEO、CIO、业务负责人等&#…...
前端实现断点续传文件
公司要求实现的功能,大概思路是将上传的文件通过jsZip压缩后,进行切片,留一下总切片,当前片,并把这些数据给后端,至于前端的校验,是由Md5完成的,验证文件唯一性,这样下次…...
复试 || 就业day01(2023.12.27)算法篇
文章目录 前言两数之和存在重复元素 II好数对的数目总持续时间可被 60 整除的歌曲 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台 Ὂ…...
JavaWeb——JQuery
文章目录 JQuery 是什么?jQuery 的原理示意图JQuery 基本开发步骤jQuery 对象和 DOM 对象将dom对象转为JQuery对象jQuery 对象转成 DOM 对象jQuery 选择器基本选择器基础过滤选择器JQuery 是什么? 基本介绍 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理…...
Python教程:查询Py模块的版本号,有哪些方法?
1.查看模块内部的版本信息:如果你已经导入了该模块,可以查看模块内部的__version__属性来获取版本信息。例如,对于pandas模块,可以运行import pandas和print(pandas.version)来获取版本信息。 import pandas print(pandas.__vers…...
第一节 初始化项目
系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”,复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…...
idea提示unable to import maven project
问题描述: idea导入maven依赖时提示unable to import maven project 打开log日志如下: 问题原因以及解决方案: maven版本与idea版本不兼容,切换maven版本即可...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
