Elasticsearch Split和shrink API

背景:

尝试解决如下问题:单分片存在过多文档,超过lucene限制

 

分析

1.一般为日志数据或者OLAP数据,直接删除索引重建

2.尝试保留索引,生成新索引

  - 数据写入新索引,查询时候包含 old_index,new_index

3.尝试split

split index API

如果需要将当前index的primary shard数量增加时,可以使用split index api。

会生成一个新index,但会保留原来的index。

步骤:

确保source index只读

PUT source_index/_settings
{"settings": {"index.blocks.write": true }
}

spilt API修改primary shard数量

POST source_index/_split/new_index
{"settings": {"index.number_of_shards": 10}
}

监控执行进度

GET _cat/recovery/new_index

测试

版本 7.17.5

# 新建测试索引
PUT test_split
{}# 关闭source索引的写入
PUT /test_split/_settings
{"settings": {"index.blocks.write": true }
}# 执行split API
POST /test_split/_split/test_split_new
{"settings": {"index.number_of_shards": 12}
}

遇到报错并解决,在split API执行阶段:

1. source 索引必须是 read-only 的{"error": {"root_cause": [{"type": "illegal_state_exception","reason": "index test_split must be read-only to resize index. use \"index.blocks.write=true\""}],"type": "illegal_state_exception","reason": "index test_split must be read-only to resize index. use \"index.blocks.write=true\""},"status": 500
}2. source分片数(3)必须是target分片数的因子(所以target不能为11,可以为12){"error": {"root_cause": [{"type": "illegal_argument_exception","reason": "the number of source shards [3] must be a factor of [11]"}],"type": "illegal_argument_exception","reason": "the number of source shards [3] must be a factor of [11]"},"status": 400
}

应用

集群版本 6.8.5

设置source索引 "index.blocks.write": true 之后,执行split API异常:

{"error": {"root_cause": [{"type": "remote_transport_exception","reason": "[es-log-all-2][10.xx.x.xx:9300][indices:admin/resize]"}],"type": "illegal_state_exception","reason": "the number of routing shards [5] must be a multiple of the target shards [20]"},"status": 500
}

即:目标索引的主分片个数必须是index.number_of_routing_shards的因数;

注意:number_of_routing_shards 不可以动态修改

结论:ES6.8无法通过split API解决索引分片过少的问题

官方doc:Split index API | Elasticsearch Guide [8.9] | Elastic

Shrink index API

如果需要将当前index的primary shard数量减少时,可以使用shrink index api。

会生成一个新index,但会保留原来的index。

(Shrinks an existing index into a new index with fewer primary shards.)

POST /my-index-000001/_shrink/shrunk-my-index-000001

步骤

# 新建index
PUT test_shrink
{}# 查看索引的shard在哪些node
GET _cat/shards/test_shrink?v# 将所有主分片分配到node1,副本设置为0,设置readOnly
PUT test_shrink/_settings
{"settings": {"index.number_of_replicas": 0,"index.routing.allocation.require._name": "node-es-0","index.blocks.write": true}
}# 执行shrink API
POST /test_shrink/_shrink/new_test_shrink
{"settings": {"index.number_of_replicas": 1,"index.number_of_shards": 1, "index.codec": "best_compression" },"aliases": {"my_search_indices": {}}
}

如果上述命令修改成:

POST /test_shrink/_shrink/new_test_shrink
{"settings": {"index.number_of_replicas": 1,"index.number_of_shards": 2, "index.codec": "best_compression" },"aliases": {"my_search_indices": {}}
}

新的number_of_shards不是source index的number_of_shards的因子,那么出现如下错误:

{"error": {"root_cause": [{"type": "illegal_argument_exception","reason": "the number of source shards [3] must be a multiple of [2]"}],"type": "illegal_argument_exception","reason": "the number of source shards [3] must be a multiple of [2]"},"status": 400
}

官方doc:Shrink index API | Elasticsearch Guide [8.9] | Elastic

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

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

相关文章

【【萌新的STM32学习-19-蜂鸣器实验】】

萌新的STM32学习-19-蜂鸣器实验 STM32在正点原子的视频中并未讲述关于蜂鸣器的实验,我们自己探究一下作为简单的HAL库入门 蜂鸣器每隔 300ms 响或者停一次。LED0 每隔 300ms 亮或者灭一次。LED0 亮的时候蜂鸣器不叫,而 LED0 熄灭的时候,蜂鸣…

ospf不规则区域划分和数据库表

华子目录 ospf不规则区域1.远离骨干的非骨干区域2.不连续骨干 不规则区域解决方案1.tunnel-点到点GRE2.ospf虚链路3.多进程双向重发布(推荐) ospf的数据库表 ospf不规则区域 1.远离骨干的非骨干区域 图示 2.不连续骨干 图示 不规则区域解决方案 …

二叉搜索树(C++)

二叉搜索树 概念二叉搜索树的应用二叉搜索树的实现K模型基本结构和函数声明接口实现①find——查找关键码②Insert——插入关键码③Erase——删除关键码(重点)时间复杂度 源码(整体)非递归递归 KV模型 在使用C语言写数据结构阶段时…

Leetcode:【448. 找到所有数组中消失的数字】题解

题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 难度:简单 题目链接:448. 找到所有数组中消失的数字 示例1 输入&…

Mybatis1.1 环境准备

1.1 环境准备 数据库表(tb_brand)及数据准备实体类 Brand编写测试用例安装 MyBatisX 插件 数据库表(tb_brand)及数据准备 -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand (-- id 主…

C语言每日一练------Day(6)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:整数转换 异或 💓博主csdn个人主页:小小unicorn…

第62步 深度学习图像识别:多分类建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 上期我们基于TensorFlow环境做了图像识别的多分类任务建模。 本期以健康组、肺结核组、COVID-19组、细菌性(病毒性)肺炎组为数据集,基于Pytorch环境,构建SqueezeNet多分类模型&#xff0…

【安装包】JDK 17安装教程

软件下载 软件:JDK版本:17语言:简体中文大小:151.24M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.com/…

【爬虫】5.5 Selenium 爬取Ajax网页数据

目录 AJAX 简介 任务目标 创建Ajax网站 创建服务器程序 编写爬虫程序 AJAX 简介 AJAX(Asynchronous JavaScript And XML,异步 JavaScript 及 XML) Asynchronous 一种创建交互式、快速动态网页应用的网页开发技术通过在后台与服务器进行…

软考:中级软件设计师:邮件加密系统,网络安全保障,网络威胁与攻击,防火墙技术

软考:中级软件设计师:邮件加密系统 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &…

【Linux-Day8- 进程替换和信号】

进程替换和信号 问题引入 我们发现 终端输入的任意命令的父进程都是bash,这是因为Linux系统是用fork()复制出子进程,然后在子进程中调用替换函数进行进程替换,实现相关命令。 (1) exec 系列替换过程:pcb 使用以前的只…

阿里云申请免费SSL证书的两种验证方式及配置服务器Tomcat升级HTTPS协议

通用教程,其他服务商的免费 SSL 证书也差不多是这个流程。(至少腾讯云的操作步骤和本文是一致,嘻嘻!) 申请 SSL 证书 首先在阿里云上创建并申请 SSL 证书,之后选择 DNS 验证的方式,一种是手动配…

【算法】经典的八大排序算法

点击链接 可视化排序 动态演示各个排序算法来加深理解,大致如下 一,冒泡排序(Bubble Sort) 原理 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次比较和交换相邻元素的方式,将…

springcloud-nacos简述

Spring Cloud alibaba: nacos服务注册中心&#xff0c;配置中心 服务注册中心 1.项目父工程添加springcloudalibaba依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><ve…

Ubuntu20以上高版本如何安装低版本GCC

安装了Ubuntu 20.04之后&#xff0c;通过命令行 sudo apt-get install build-essential安装gcc&#xff0c;再通过命令行 gcc -v可查看gcc版本为gcc13 如果想用低版本的gcc&#xff0c;比如gcc4.8&#xff0c;尝试输入命令 sudo apt-get install gcc-4.8会提示找不到gcc4.8的…

context.WithCancel()的使用

“ WithCancel可以将一个Context包装为cancelCtx,并提供一个取消函数,调用这个取消函数,可以Cancel对应的Context Go语言context包-cancelCtx[1] 疑问 context.WithCancel()取消机制的理解[2] 父母5s钟后出门&#xff0c;倒计时&#xff0c;父母在时要学习&#xff0c;父母一走…

hadoop学习:mapreduce入门案例二:统计学生成绩

这里相较于 wordcount&#xff0c;新的知识点在于学生实体类的编写以及使用 数据信息&#xff1a; 1. Student 实体类 import org.apache.hadoop.io.WritableComparable;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;public class Stude…

mac电脑屏幕录制Berrycast Mac屏幕录制软件

Berrycast是一款为Mac设计的优秀屏幕录制软件&#xff0c;它让屏幕录制变得简单而高效。以下是Berrycast的一些主要特点&#xff1a; 简单的用户界面&#xff1a;Berrycast拥有直观和简洁的用户界面&#xff0c;使得用户可以轻松上手。高质量的视频输出&#xff1a;Berrycast能…

浅析SAS协议:链路层

文章目录 概述原语通用原语连接管理原语连接通信原语 地址帧IDENTIFY地址帧OPEN地址帧 链路复位Link ResetHard ResetSATA的Link Reset 连接管理建立连接连接仲裁 流量控制SSP流控Credit Advance SMP流控 相关参考 概述 SAS链路层用于定义原语、地址帧以及连接相关的内容&…

ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563)

安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563) 二、CVE-2017-7563 一、ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563) Title RO内存始终在AArch64 Secure EL1下可执行 CVE ID CVE-2017-7563 Date 06 Apr 2017 …