ES踩坑记录之UNASSIGNED分片无法恢复
问题背景
换节点
我们线上有一套ES集群,三台机器,共运行了6个节点。一直在线上跑了几个月也一直没出什么问题。然而好巧不巧,就在昨天,集群中的3号节点磁盘出现故障,导致机器直接瘫痪。本来大家觉得问题不大,ES不是有容灾吗,换个新节点上去不就能自动分配分片了。
unassigned
当我们信心满满换了个新节点上去之后,集群状态一直为red,我们发现一直存在180多个unassigned shards。
curl -XGET http://localhost:9200/_cluster/health{"cluster_name": "escluster","status": "red","timed_out": false,"number_of_nodes": 6,"number_of_data_nodes": 6,"active_primary_shards": 498,"active_shards": 767,"relocating_shards": 0,"initializing_shards": 0,"unassigned_shards": 185,"delayed_unassigned_shards": 0,"number_of_pending_tasks": 0,"number_of_in_flight_fetch": 0,"task_max_waiting_in_queue_millis": 0,"active_shards_percent_as_number": 80.5672268907563
}
curl -XGET http://localhost:9200/_cat/shards | grep UNASSIGNED

问题排查
分片恢复并发数❌
既然出现Unassigned shards,也就是说有一些分片未被分片。期初我们想当然的认为应该是节点新加入集群,分片还没有完成恢复。为了加速分片分配,我们调大了分片恢复并发数。
curl -XPUT http://localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d'
{"persistent": {"cluster.routing.allocation.node_concurrent_recoveries": 10 }
}
'
然而并没有什么卵用,等了半天还是没什么变化。
allocation explain
随后我们使用allocation explain指令来查看分片的分配状态
curl -XGET http://localhost:9200/_cluster/allocation/explain?pretty

通过unassigned_info我们可以看到,NODE_LEFT,就是说节点无了。last_allocation_status说的更明确:no_valid_shard_copy,没有有效的分片副本。allocate_explanation也说了:cannot allocate because a previous copy of the primary shard existed but can no longer be found on the nodes in the cluster,大意就是集群节点上找不到能用的副本。
我们也很疑惑啊,为了让ES容灾,ES索引默认都有1个副本的呀,按照ES分片的策略,副本分片不会和主分片分发在同一台机器上,昨天宕机宕了1个节点,不应该主分配与副本分片都丢失吧。莫非…莫非这索引没副本???
抱着试一试的心态,我们查看了其中一个丢失的索引的信息
curl -XGET http://localhost:9200/XXX-2022.03.15/_settings
{"XXX-2022.03.15": {"settings": {"index": {"routing": {"allocation": {"require": {"box_type": "hot"}}},"number_of_shards": "1","provided_name": "XXX-2022.03.15","creation_date": "1647273614797","number_of_replicas": "0","uuid": "Dy7G3ZaESYqLB_aFk8M3Cg","version": {"created": "7080099"}}}}
}
不查不知道,一查吓一跳,这索引分片数为1,且没有副本…我副本呢???赶紧与研发确认了一下,由于机器磁盘比较小,为了节约存储,开发在写入索引时把就没留副本!!!
好家伙,我直接好家伙,合着我们还指望ES容灾呢,这还容个锤子灾。破案了,问题找到了,但数据也是找不回来了。
解决方案
数据是找不回来了,但集群也不能一直red啊,还有180多个unassigned的分片得处理呢。
reroute❌
通过在网上搜索相关的解决方案,得知可以通过重建所以路由是可以解决问题的。
curl -H 'Content-Type: application/json' \-XPOST http://localhost:9200/_cluster/reroute?pretty -d '{"commands" : [ {"allocate_stale_primary" :{"index" : "XXX", "shard" : 0,"node" : "target-data-node-id","accept_data_loss" : true}}]
}'
但我们由于数据节点已经丢失了,所以会收到如下报错:

这意味着什么呢,就是说除非丢失的节点重新加入集群,否则数据将消失。
allocate_empty_primary
数据是没法恢复了,所以我们只能将分片进行清空处理了。
curl -H 'Content-Type: application/json' \-XPOST http://localhost:9200/_cluster/reroute?pretty -d '{"commands" : [ {"allocate_empty_primary" :{"index" : "XXX", "shard" : 0,"node" : "target-data-node-id","accept_data_loss" : true}}]
}'
删除索引
还有一种更彻底的解决方案,就是把坏了的索引都删了就完事了,反正数据也没有了,没有数据的索引跟咸鱼有什么两样?眼不见为净完事了。
参考资料
- ElasticSearch Node Failure - Stackover Flow
- ES分片被删除后如何恢复 - CSDN
- ES集群中出现UNASSIGNED分片时的解决思路 - CSDN
- Elasticsearch 最佳实践系列之分片恢复并发故障 - 腾讯云开发者社区
相关文章:
ES踩坑记录之UNASSIGNED分片无法恢复
问题背景 换节点 我们线上有一套ES集群,三台机器,共运行了6个节点。一直在线上跑了几个月也一直没出什么问题。然而好巧不巧,就在昨天,集群中的3号节点磁盘出现故障,导致机器直接瘫痪。本来大家觉得问题不大…...
ubuntu更换国内apt源
ubuntu必备操作 1 更换apt镜像源 备份镜像 cp /etc/apt/sources.list /etc/apt/sources.list.bak查看自己ubuntu版本 # 查看自己的codename #查看自己的ubuntu版本[注意关注:DISTRIB_CODENAME,发行代号] cat /etc/*release# DISTRIB_CODENAMEcosmic …...
OpenCV-Python中的图像处理-视频分析
OpenCV-Python中的图像处理-视频分析 视频分析Meanshift算法Camshift算法光流Lucas-Kanade Optical FlowDense Optical Flow 视频分析 学习使用 Meanshift 和 Camshift 算法在视频中找到并跟踪目标对象: Meanshift算法 Meanshift 算法的基本原理是和很简单的。假设我们有一堆…...
STM32 CubeMX (第四步Freertos内存管理和CPU使用率)
STM32 CubeMX STM32 CubeMX (第四步Freertos内存管理和CPU使用率) STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)使用STM32 CubeMX 库,配置Fr…...
题解 | #1012.Equalize the Array# 2023杭电暑期多校10
1012.Equalize the Array 签到 题目大意 定义一个数组的 m o d e mode mode 是其中出现次数最多的数字(可不唯一) 给定一个数组 a a a ,每次操作可以选定其一个 m o d e mode mode 并使数组中所有与之相等的元素 1 1 1 问任意次操作后…...
UE4/5C++多线程插件制作(二十一、使用)
目录 DemoPawn.h DemoPawn.cpp 会出现的bug 插件 相关的插件制作在上一节已经完成了。 具体的使用方式在第0章已经写了,get之后去绑定即可。 而后笔者做了一个接口,具体的绑定方式也就在这个接口里面。 接下来最重要的是进行使用,对此我做了一个与蓝图相关的接口,里…...
【C#】关于?的用法
1、可空类型修饰符(?) 如: int? x null;//可空类型默认值都是null,而值类型如int默认值为0、bool默认值为false等 bool? result true;2、三目运算符(?:) 如: bool…...
linux——mysql的高可用MHA
目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager 一、概述 一、概念 MHA(MasterHigh Availability&a…...
【学习日记】【FreeRTOS】空闲任务与阻塞延时
写在前面 本文是基于野火 RTOS 教程对空闲任务和阻塞延时的详解。 一、什么是任务中的阻塞延时 说到阻塞延时,笔者的第一反应就是在单片机的 while 循环中,使用一个 for 循环不断递减一个大数,通过 CPU 不断执行一条指令的耗时进行延时。这…...
衣服材质等整理(时常更新)
参考文章&图片来源 https://zhuanlan.zhihu.com/p/390341736 00. 天然纤维 01. 化学纤维 02. 聚酯纤维(即,涤纶) 一种由有机二元酸和二元醇通过化学缩聚制成的合成纤维。具有出色的抗皱性和保形性,所制衣物在穿着过程中不容…...
电子商务环境下旅游价值链
迈克尔 ・ 波特(Michael E. Porter)在其《竞争优势》一书中提出了“价值链” 的概念,并认为一家企业最核心的竞争优势在于对价值链的设计。虽然迈克尔 ・ 波 特提出的价值链主要是针对企业内部的价值链,但他视价值链为一系列连续完成的 活动ÿ…...
spring源码分析bean的生命周期(下)
doGetBean()执行过程 createBean()执行过程 一、DependsOn注解 spring创建对象之前会判断类上是否加了DependsOn注解,加了会遍历然后会添加到一个map中,spring会先创建DependsOn注解指定的类 二、spring类加载器 在合并BeanDefinition,确定…...
完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)
问题阐述 最近在Github上提交PR后,遇到了这么一个问题:golangci-lint运行失败,具体原因是File is not gofumpt-ed (gofumpt)。 名词解释 golangci-lint: golangci-lint 是Go语言社区中常用的代码质量检查工具,它可以…...
pytorch3d成功安装
一、pytorch3d是什么? PyTorch3D的目标是帮助加速深度学习和3D交叉点的研究。3D数据比2D图像更复杂,在从事Mesh R-CNN和C3DPO等项目时,我们遇到了一些挑战,包括3D数据表示、批处理和速度。我们开发了许多有用的算子和抽象…...
【vue3】同个页面引入多个图表组件实现自适应的方法
首先说明,此方案仅针对vue3项目在同一个页面引入了多个图表组件,因为我发现不能框架不同的引入,resize的写法还不同 window.addEventListener("resize", function() {...// 在此处重新调用即可 }以下是具体写法: 循环…...
一文了解汽车芯片的分类及用途介绍
汽车芯片按其功能可分为控制类(MCU和AI芯片)、功率类、传感器和其他(如存储器)四种类型。市场基本被国际巨头所垄断。人们常说的汽车芯片是指汽车里的计算芯片,按集成规模可分为MCU芯片和AI芯片(SoC芯片&am…...
Linux0.11内核源码解析-truncate.c
truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块,包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0,并释放占用的设备空间。 索引节点的逻辑块连接方式 释放一次间接块 static void free_ind(int dev,int block) {…...
LED驱动型IC芯片的原理介绍
一、LED驱动器是什么 LED驱动器(LED Driver),是指驱动LED发光或LED模块组件正常工作的电源调整电子器件。由于LED PN结的导通特性决定,它能适应的电源电压和电流变动范围十分狭窄,稍许偏离就可能无法点亮LED或者发光效…...
VLAN实验
实验题目如下: 实验拓扑如下: 实验要求如下: 【1】PC1/3的接口均为access模式,且属于van2,在同一网段 【2】PC2/4/5/6的IP地址在同一网段,与PC1/3不在同一网段 【3】PC2可以访问4/5/6,PC4不能…...
Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit
一、前言 QPlainTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…...
Zenko CloudServer高可用部署:集群配置与负载均衡方案
Zenko CloudServer高可用部署:集群配置与负载均衡方案 【免费下载链接】cloudserver Zenko CloudServer, an open-source Node.js implementation of the Amazon S3 protocol on the front-end and backend storage capabilities to multiple clouds, including Azu…...
DeepStream-Yolo GPU加速原理深度解析:从ONNX到TensorRT的完整流程
DeepStream-Yolo GPU加速原理深度解析:从ONNX到TensorRT的完整流程 【免费下载链接】DeepStream-Yolo NVIDIA DeepStream SDK 8.0 / 7.1 / 7.0 / 6.4 / 6.3 / 6.2 / 6.1.1 / 6.1 / 6.0.1 / 6.0 / 5.1 implementation for YOLO models 项目地址: https://gitcode.c…...
Denoiser项目快速入门:5分钟完成语音降噪环境搭建
Denoiser项目快速入门:5分钟完成语音降噪环境搭建 【免费下载链接】denoiser Real Time Speech Enhancement in the Waveform Domain (Interspeech 2020)We provide a PyTorch implementation of the paper Real Time Speech Enhancement in the Waveform Domain. I…...
雷达系统原理与脉冲测量技术详解
1. 雷达系统基础原理与核心方程雷达(RADAR)是Radio Detection And Ranging的缩写,其基本原理是通过发射电磁波并接收目标反射信号来实现探测和测距。雷达方程是理解雷达系统性能的基础数学表达式:Pr (Pt * G * λ * σ) / ((4π)…...
NotebookLM心理学研究辅助:为什么92%的心理学博士生漏用了“语义锚定”功能?
更多请点击: https://intelliparadigm.com 第一章:NotebookLM心理学研究辅助 NotebookLM 是 Google 推出的基于用户上传文档进行深度语义理解的 AI 助手,其“以你的资料为中心”的设计范式特别契合心理学研究中对原始文献、访谈转录稿、实验…...
你还在手写提示词?:2024最稀缺的提示词自动化工作流(含可运行Python脚本+权重映射API)
更多请点击: https://intelliparadigm.com 第一章:Midjourney提示词编写的核心范式演进 早期提示词依赖直觉式描述(如“a cat”),而现代范式已转向结构化、分层可控的语义工程。当前主流实践将提示词解耦为三类要素&a…...
ARM Cortex-A72/A720架构解析与调试优化实践
1. ARM Cortex-A72/A720架构深度解析作为ARMv8-A架构的典型代表,Cortex-A72和A720处理器广泛应用于移动设备和嵌入式系统。我曾参与多个基于这两款核心的SoC开发项目,今天将结合官方文档和实战经验,深入剖析其关键特性和调试技巧。1.1 指令集…...
Nix-on-Droid测试与部署最佳实践:确保您的移动环境稳定可靠
Nix-on-Droid测试与部署最佳实践:确保您的移动环境稳定可靠 【免费下载链接】nix-on-droid Nix-enabled environment for your Android device. [maintainerst184256,Gerschtli] 项目地址: https://gitcode.com/gh_mirrors/ni/nix-on-droid 想要在Android设…...
【Midjourney光照提示词黄金法则】:20年AI视觉工程师亲授7类光效参数组合,92%新手3天提升质感层级
更多请点击: https://intelliparadigm.com 第一章:光照提示词在Midjourney中的底层作用机制 光照提示词(Lighting Prompts)并非简单的修饰性描述,而是直接参与 Midjourney V6 模型的 latent 空间引导与风格解耦的关键…...
终极指南:5分钟让GitHub访问速度翻倍的智能DNS加速方案
终极指南:5分钟让GitHub访问速度翻倍的智能DNS加速方案 【免费下载链接】FastGithub github定制版的dns服务,解析访问github最快的ip 项目地址: https://gitcode.com/gh_mirrors/fa/FastGithub 还在为GitHub克隆代码时的漫长等待而烦恼吗…...
