解决 Elasticsearch cluster_block_exception 错误的终极指南

Elasticsearch 是一个功能强大的分布式搜索引擎,广泛应用于全文检索、实时分析等场景。

尽管如此,像任何复杂系统一样,它也会遇到一些运行问题,其中较为常见且影响较大的就是 cluster_block_exception 错误。

本文将深入解析这种错误的常见原因、如何排查问题以及如何有效解决。

我们将为你提供一套简明的解决方案,帮助你轻松应对这个问题。

一、什么是 cluster_block_exception 错误?

cluster_block_exception 是 Elasticsearch 中的一种错误,通常表示集群由于某种状态阻止了某些操作的执行。

这是 Elasticsearch 的一种保护机制,避免数据丢失或系统崩溃。

常见的触发原因包括磁盘空间不足、集群健康状态不佳、节点故障或不正确的索引设置。

1. 磁盘空间不足

  • 问题描述:

Elasticsearch 内置了磁盘空间警戒水位线机制,当磁盘空间不足时,系统会阻止数据写入,以保护集群的完整性。这是最常见的 cluster_block_exception 触发原因。

30a748d7cfb66ec937c0a91560344b8b.png

  • 如何检查磁盘空间:

使用以下命令检查集群各节点的磁盘使用情况:

GET _cat/allocation?v

如果某个节点的磁盘使用率超过高水位线,Elasticsearch 会阻止进一步写入数据。

f95d2dcec6a7d4c5b0c75f8a2326dc17.png

0272a5230e82795baf9390b7bca99146.png

  • 解决方法:

增加磁盘空间。删除不必要的旧索引:

DELETE /index_name

2. 集群健康问题

  • 问题描述:

当集群的健康状态变为 yellow 或 red 时,某些操作可能会被阻止。

yellow 表示副本分片未完全分配,而 red 则表明主分片不可用或丢失。

6414a821c6b655f19bfe537408e5a92c.png

  • 如何检查集群健康状态:

GET _cluster/health

如果集群状态为 yellow 或 red,这表明有潜在的集群健康问题需要解决。

  • 解决方法:

确保所有节点正常运行,使用以下命令检查节点状态:

GET _cat/nodes?v

49ae52c314c931b1a9300380069bb496.png

如果节点存在问题,检查硬件或网络问题,并重新启动故障节点。

重新分配分片以恢复集群健康:

POST /_cluster/reroute

优化集群配置,如增加副本分片数。

https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html

3. 节点故障

  • 问题描述:

节点故障通常是由于硬件、网络或资源不足引起的。

当一个或多个节点出现故障时,可能会导致 cluster_block_exception,因为部分分片变得不可用。

  • 如何识别节点故障:

GET _cat/nodes?v

e2cd03b27a20fdb97c0dbd90928b0e27.png

通过检查节点的状态和资源使用情况,尤其是 CPU 和内存,确定哪些节点可能出现问题。

  • 解决方法:

重新启动出现故障的节点。

检查并解决硬件或网络问题,确保节点可以正常通信。

确保 Elasticsearch 进程有足够的系统资源(CPU、内存等)。

4. 集群或索引被设置为只读

  • 问题描述:

有时,Elasticsearch 集群或索引可能被错误地设置为只读模式,尤其是在磁盘空间不足时。

message [ElasticsearchException[Elasticsearch exception [type=cluster_block_exception, reason=blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]]]

此时,所有写操作都会被阻止,导致 cluster_block_exception

  • 如何检查集群是否为只读:

GET /_cluster/settings

65285961df42594f1555c7211573f10d.png

检查 cluster.blocks.read_onlycluster.blocks.read_only_allow_delete 是否为 true

  • 解决方法:

将集群或索引设置为可写:

PUT /_cluster/settings
{"persistent": {"cluster.blocks.read_only": false}
}

或者,移除索引的只读设置(常见移除基本都是设置 null,其他类似命令可以参见如下):

PUT /index_name/_settings
{"index.blocks.read_only_allow_delete": null
}

5. 索引设置问题

  • 问题描述:

有时,错误的索引设置(例如分片分配问题或副本数过少)可能导致操作失败,引发 cluster_block_exception

  • 如何检查索引设置:

GET /index_name/_settings

8fc1f5b7c50fdbc6dfe547905be3f942.png

  • 解决方法:

确保分片合理分配,避免过度分配。推荐阅读:

Elasticsearch 使用误区之三——分片设置不合理

检查和调整副本分片数量,确保有足够的副本来保障数据冗余和查询性能。

二、预防措施

要预防 cluster_block_exception,我们可以采取以下措施:

  • 措施1:定期监控磁盘空间

使用 Kibana 或其他监控工具设置磁盘空间的监控阈值,避免磁盘空间不足。

  • 措施2:自动化分片管理:

使用索引生命周期管理(ILM)策略,自动化控制索引的迁移、删除或冻结操作,以避免无限制的索引增长。

ILM 实战视频:https://www.bilibili.com/video/BV1MU4y1u7D4/

  • 措施3:定期健康检查。

定期检查集群的健康状态,并在集群状态变为 yellow 或 red 时立即采取措施。

  • 措施4:备份和更新

定期备份 Elasticsearch 数据,确保出现问题时数据可以快速恢复。

此外,确保 Elasticsearch 版本是最新的,以利用性能改进和错误修复。

三、总结

cluster_block_exception 错误虽然听起来棘手,但只要你了解了它的触发原因和解决方法,就能轻松应对。

通过本文的指南,结合日常的监控和优化策略,你可以确保 Elasticsearch 集群在高效且稳定的状态下运行,避免潜在的停机和数据损失。

参考

【1】https://kasata.medium.com

【2】https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html

更多推荐

  1. Elasticsearch 使用误区之一——将 Elasticsearch 视为关系数据库!

  2.   Elasticsearch 使用误区之二——频繁更新文档

  3. Elasticsearch 使用误区之三——分片设置不合理

  4. Elasticsearch 使用误区之四——不合理的使用 track_total_hits

  5. Elasticsearch 使用误区之五——单次请求获取大量数据

  6. Elasticsearch 使用误区之六——富文本内容写入前不清洗

  7.    《一本书讲透 Elasticsearch》读者群的创新之路

2976ad87b65e8d0ea1276c125bfae55f.jpeg

更短时间更快习得更多干货!

和全球2000+ Elastic 爱好者一起精进!

elastic6.cn——ElasticStack进阶助手

ed62d6da6fb9196185ac5b468c336baa.gif

抢先一步学习进阶干货!

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

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

相关文章

2024.10月16日- 关于Vue2(1)

一 VUE概述与环境搭建 1.1 Vue概述 1.1.1 简介 Vue (发音为 /vjuː/,类似 view) 是一款轻量级的用于构建用户界面的 渐进式的JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高…

入门!Linux 常见指令及权限管理全面指南

Linux 操作系统在现代计算机应用中扮演着重要的角色,广泛用于服务器、桌面系统、嵌入式设备及云计算平台等领域。理解和掌握 Linux 常见指令及权限管理机制,是每一位系统管理员和开发人员的基础技能。本文将详细介绍 Linux 系统的基本背景、常用指令、权…

桂林旅游一点通:SpringBoot平台应用

3系统分析 3.1可行性分析 通过对本桂林旅游景点导游平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本桂林旅游景点导游平台采用SSM框架,JAVA作…

iOS IPA上传到App Store Connect的三种方案详解

引言 在iOS应用开发中,完成开发后的重要一步就是将IPA文件上传到App Store Connect以便进行测试或发布到App Store。无论是使用Xcode进行原生开发,还是通过uni-app、Flutter等跨平台工具生成的IPA文件,上传到App Store的流程都是类似的。苹果…

package.json 里的 dependencies和devDependencies区别

dependencies&#xff08;依赖的意思&#xff09;&#xff1a; 通过 --save 安装&#xff0c;是需要发布到生产环境的。 比如项目中使用react&#xff0c;那么没有这个包的依赖就会报错&#xff0c;因此把依赖写入dependencies npm install <package-name>// 缩写 np…

Android Framwork从零上手(一)下载编译AOSP源码

Android Framwork从零上手&#xff08;一&#xff09;下载编译AOSP源码 什么是AOSP硬件要求虚拟机安装开发环境搭建下载编译源码下载 repo 工具初始化仓库并同步远程代码编译源码运行模拟器 Android 系统开发涉及的知识面很广&#xff0c;代码量大&#xff0c;复杂度高&#xf…

传感器信号的存储和传输

对于大量传感器信号的存储和传输&#xff0c;可以采用以下存储和检测方案&#xff0c;以满足实时性、数据量、可靠性和传输带宽的需求&#xff1a; 1. 边缘计算 边缘计算是一种将计算和数据存储靠近数据源&#xff08;如传感器&#xff09;进行处理的方案。这可以减少数据传…

springboot扩展点都有哪些?

在Spring Boot中&#xff0c;扩展点指的是能够自定义或增强Spring Boot功能的机制。这些扩展点允许开发者在Spring Boot的基础设施之上做定制化配置、行为修改或增强。Spring Boot主要有以下几类扩展点&#xff1a; 1. ApplicationRunner 和 CommandLineRunner 这两个接口允许…

6、ES6

文章目录 一.关于ES6二.关于变量声明let声明变量const 声明常量 三.变量的解构赋值四.字符串的扩展五.函数的扩展函数默认参数rest参数箭头函数(函数的新写法) 六.数组的扩展七.对象的扩展语法上的简化对象的解构赋值 八.Symbol&#xff1a;新的数据类型(类似于字符串)独一无二…

CTFHUB技能树之SQL——时间盲注

开启靶场&#xff0c;打开链接&#xff1a; 说明这关对所有信息都做了统一输出&#xff0c;换成延时注入试试 输入&#xff1a; 1 and sleep(15) &#xff08;这里不知道为什么加上--倒是会影响sleep()函数的触发&#xff0c;从而没有延时感&#xff09; 可以观察到有明显的延…

vue3+ts+vite--路由跳转,params传参好像丢失了?

前言 相信大家一定写过后台管理系统&#xff0c;有一个很普遍的功能&#xff0c;就是点击编辑&#xff0c;根据id&#xff0c;跳转到相对应的编辑页面&#xff0c;id是通过路由params传递过去了&#xff0c;但是还有一个需求是要将父组件的名称也传递过去 &#xff0c;过程特别…

宁波市网站建设让你的网站更吸引人

宁波市网站建设让你的网站更吸引人 在数字化时代&#xff0c;拥有一个吸引人的网站已成为企业成功的关键因素之一。尤其在宁波市&#xff0c;随着经济的发展和互联网的普及&#xff0c;越来越多的企业意识到网站建设的重要性。那么&#xff0c;如何才能让你的网站更加吸引人呢&…

webstorm 编辑器配置及配置迁移

1.下载地址 WebStorm&#xff1a;JetBrains 出品的 JavaScript 和 TypeScript IDE 其他版本下载地址 2.安装 点击下一步安装&#xff0c;可根据需要是否删除已有版本 注意&#xff1a; 完成安装后需要激活 3.设置快捷键 以下为个人常用可跳过或根据需要设置 如&#xff1a…

汽车免拆诊断案例 | 2023款零跑C01纯电车后备厢盖无法电动打开和关闭

故障现象  一辆2023款零跑C01纯电车&#xff0c;累计行驶里程约为2万km&#xff0c;车主进厂反映&#xff0c;后备厢盖无法电动打开和关闭。 故障诊断  接车后试车&#xff0c;操作后备厢盖外侧、驾驶人侧及遥控钥匙上的后备厢盖开启按钮&#xff0c;可以听到后备厢盖解锁的…

J1:ResNet-50算法实战与解析(鸟类识别)

J1周&#xff1a;ResNet-50算法实战与解析(鸟类识别&#xff09; **理论背景**☕1、CNN算法发展2、ResNet介绍3、ResNet-50介绍1、Input->STAGE 0:2、残差块&#xff08;STAGE1->STAGE4&#xff09; **PyTorch实现**1、导入库并设置GPU2、导入和检查数据3、划分数据集4、…

图示详解OpenEuler下Samba多用户身份验证配置、测试

前言 前文《图例详解OpenEuler下Samba安装、配置和测试》已对Samba服务的工作原理、安装、配置和测试&#xff0c;做了系统的介绍&#xff0c;并对匿名用户的访问samba服务器做了配置&#xff0c;相必读者已对samba服务的流程有了初步、系统的了解&#xff0c;本文在以上基础上…

C++进阶:哈希

✨✨所属专栏&#xff1a;C✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 哈希概念 哈希(hash)⼜称散列&#xff0c;是⼀种组织数据的⽅式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系&#xff0c;查找时通过这个哈希函数…

C语言:符号“->”在C语言中什么意思呢?

1.C语言中符号“->”的意义&#xff1a; ‌指针中的->表示用于访问指针所指向的结构体或联合体的成员。‌ 这是一个操作符&#xff0c;通常用于简化代码&#xff0c;可以替代使用(*ptr).member的方式。 ->操作符的具体用法是&#xff0c;当你有一个指向结构体的指针时…

MySQL数据库:基础介绍下载与安装

数据库基础知识先谈发音MySQL如何发音&#xff1f;在国内MySQL发音有很多种&#xff0c;Oracle官方文档说他们念作My sequal[si:kwəl]。 数据库基本概念 1。数据数据&#xff08;Data&#xff09;是指对客观事物进行描述并可以鉴别的符号&#xff0c;这些符号是可识别的、抽…

【Android】Jetpack入门知识总结(LifeCycle,ViewModel,LiveData,DataBinding等)

文章目录 LifeCycle使用Lifecycle解耦页面与组件自定义控件实现LifecycleObserver接口注册生命周期监听器 使用LifecycleService解耦Service与组件使用ProcessLifecycleOwner监听应用程序生命周期 ViewModel用法在 Fragment 中使用 ViewModel LiveDataDataBinding导入依赖基本用…