Elasticsearch--解决磁盘使用率超过警戒水位线

原文网址:Elasticsearch--解决磁盘使用率超过警戒水位线_IT利刃出鞘的博客-CSDN博客

简介

本文介绍如何解决ES磁盘使用率超过警戒水位线的问题。

问题描述

当客户端向 Elasticsearch 写入文档时候报错:

cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)];

在 elasticsearch 的日志文件中报错如下:

flood stage disk watermark [95%] exceeded ... all indices on this node will marked read-only

出现如上问题多半是:磁盘使用量超过警戒水位线,索引存在 read-only-allow-delete 索引块数据。

报错释义

基础认知:磁盘三个警戒水位线:

属性名属性值含义
cluster.routing.allocation.disk.watermark.low85%低警戒水位线
cluster.routing.allocation.disk.watermark.high90%高警戒水位线
cluster.routing.allocation.disk.watermark.flood_stage95%洪泛警戒水位线

本文“问题描述”的报错表明数据节点的磁盘空间严重不足,并且已达到磁盘洪泛警戒水位线(磁盘使用率95%+,洪水泛滥的意思)。

为防止磁盘变满,当节点达到洪泛警戒水位线时,Elasticsearch 会阻止向该节点的任何索引分片写入数据,后面还会具体介绍如何阻止。

如果该数据块影响到相关的系统索引,可能会导致 Kibana 或者其他 Elastic Stack 功能不可用。

修复方案

临时方案:上调磁盘警戒水位线

要立即恢复写入操作,你可以暂时上调磁盘警戒水位并移除写入块。

如下命令行是集群层面更新设置的操作。

PUT _cluster/settings
{"persistent":   {"cluster.routing.allocation.disk.watermark.low":   "90%","cluster.routing.allocation.disk.watermark.high":   "95%","cluster.routing.allocation.disk.watermark.flood_stage":   "97%"}
}

索引块的五种不同状态如下:

​状态一:index.blocks.read_only

设置为 "true"可以使索引和索引元数据只读,"false "可以允许写入和元数据改变。

状态二:index.blocks.read_only_allow_delete

类似于index.blocks.read_only,但也允许删除索引释放磁盘资源。

基于磁盘的分片分配器(The disk-based shard allocator)可以自动添加和删除index.blocks.read_only属性的数据块。

这里依然会引申出删除索引文档和删除索引本身的区别等知识点:

  1. 删除索引文档会出现删除后磁盘使用率反而增加的现象,因为删除的本质是 version 的 update;只有删除索引才相当于物理删除,会立即释放磁盘空间。
  2. 当 index.blocks.read_only_allow_delete 被设置为true时,删除文档是不允许的,仅允许删除索引。
  3. 当磁盘使用率达到洪泛警戒水位线 95% 时,Elasitcsearch 会强制所有包含分片数据的索引的数据库设置为:index.blocks.read_only_allow_delete 属性。
  4. 当磁盘使用率低于高警戒水位线 90% 时,index.blocks.read_only_allow_delete 属性会自动释放。

状态三:index.blocks.read

设置为 "true",代表禁止对索引进行读操作。

状态四:index.blocks.write

设置为 "true "代表禁止对索引的数据写入操作。

与read_only不同,这个设置并不影响元数据。例如,你可以用一个 write 块关闭一个索引,但是你不能用一个 read_only 块关闭一个索引。

状态五:index.blocks.metadata

设置为 "true "代表禁用索引元数据的读写。

所以,如下的设置本质上是破除磁盘洪泛警戒水位线 95% 的 index.blocks.read_only_allow_delete 的限制,让索引继续可以写入数据。

个人评价:应急可以用。

PUT */_settings?expand_wildcards=all
{"index.blocks.read_only_allow_delete": null
}

长期方案

作为长期解决方案,建议将节点添加到不受影响的数据层或升级现有节点实现节点磁盘扩容以增加磁盘空间。

比如:data_hot 热节点爆满,建议:

  • 添加新的热节点
  • 为已有热节点磁盘扩容。

要释放额外的磁盘空间,你可以使用删除索引 API 删除不需要的索引。

DELETE my-index

4.5 重置磁盘警戒水位线操作

当长期解决方案到位时,可使用如下命令行重置磁盘警戒水位线。

PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.disk.watermark.low": null,
"cluster.routing.allocation.disk.watermark.high": null,
"cluster.routing.allocation.disk.watermark.flood_stage": null
}
}

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

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

相关文章

超越节点引擎临界:华为云NES颠覆游戏规则

在技术领域,创新是引人注目的产物。华为云Web3节点引擎服务NES(以下简称:华为云NES)以卓越的技术实力赢得业内良好口碑。在近期SUSTAINABLE WEB3 SG 2023,华为云NES发表一系列性能优化成果及开发者支持计划&#xff0c…

Qt进程和线程

一、进程 在设计一个应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好的实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会使用到进程。Qt应用程序…

亿胜盈科 HT4182,HT4186,HT4188 电量均衡 同步升压型 双节理电池充电器

HT4182,HT4186,HT4188是一款5V输入,升压模式的充电管理IC,适用于双节串联鲤电池。其能自适应任意5V电源进行充电,并且由输入过压、欠压保护。 HT4182,HT4186,HT4188采用同步升压结构&#xff0…

基于单片机出租车计价器控制系统

**单片机设计介绍,基于单片机出租车计价器控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的出租车计价器控制系统是一个用于控制和管理出租车费用计算的电子设备。下面是一个简单的系统设计介绍&…

Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版

1.确定自己的硬件信息,确定电脑有英伟达 (NVIDIA)显卡 在任务栏上右键打开任务管理器 2.下载安装 Anaconda (建议安装迅雷下载,同时浏览器添加扩展 “迅雷Chrome支持”) https://www.anaconda.com/ https://repo.anaconda.com/arc…

文本编辑软件:Ulysses mac介绍说明

Ulysses mac是面向 Mac、iPhone 和 iPad 的一站式写作环境。Ulysses 提供令人愉悦、专注的写作体验,加上高效文稿管理、无缝同步以及灵活导出。markdown 可以直接对于文本进行不同类型的分类、编辑,比如标题、注解、评论之类的内容。 Ulysses让注意力专…

手机号,邮箱,密码,验证码正则表达式[Java]

Util类: public abstract class RegexPatterns {/*** 手机号正则*/public static final String PHONE_REGEX "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";/*** 邮箱正则*/public static final String EMAIL_REGEX "^[a-zA-Z…

嵌入式学习---ARM中断控制系统

目录 外部事件与CPU的交互方式查询方式中断方式 什么是中断源S3C2440支持60个中断源FIQ和IRQ 中断处理流程将外设中断通知给CPUSUBSRCPND寄存器INTSUBMSK寄存器SRCPND寄存器INTMSK寄存器INTMOD寄存器INTPND寄存器 硬件中断处理是实时系统设计的最重要、最关键的问题。 外部事件…

Linux shell编程学习笔记33:type 命令

目录 0 引言1 type 命令的功能和格式 1.1 type命令的功能1.2 type 命令的格式2 type命令用法实例 2.1用type命令查看shell内置命令(以echo命令为例)2.2 用type命令查看别名(以ls命令为例)2.3 用type命令同时查看shell内置命令和别…

抽象类和接口(超重点!!)

[本节目标] 1.抽象类 2.接口 3.Object类 1.抽象类 1.1 抽象类概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象&a…

LabVIEW发开发电状态监测系统

LabVIEW发开发电状态监测系统 对发电设备的持续监测对于确保可靠的电力供应至消费者极为重要。它不仅能够及时提醒操作员注意发电设备的潜在损坏,还能减少由于设备故障造成的停机时间。为了达到这一目标,开发了一款基于LabVIEW的软件,专门用…

C语言进阶之路之内存镜像与字符操作函数篇

目录 一、学习目标: 二、内存镜像 什么是进程 C进程内存布局 栈内存 静态数据 数据段(存储静态数据)与代码段 堆内存 三、字符操作函数 函数strstr 函数strlen strlen与sizeof的区别 函数strtok 函数strcat与strncat 函数strc…

远程调用后 List为什么会转换成LinkedHashMap

远程调用后 List&#xff1c;?&#xff1e;为什么会转换成LinkedHashMap 在 Java 中&#xff0c;当你通过远程调用&#xff08;如 REST API、RPC 等&#xff09;传递泛型集合&#xff08;如 List<?>&#xff09;时&#xff0c;由于 Java 的类型擦除和序列化的特性&…

echarts 提示框 自动轮播(解决getZr is not a function)

echarts-auto.js (function (global) {global.tools global.tools || {};/*** echarts tooltip 自动轮播* author liuyishi* param chart* param chartOption* param options* {* interval 轮播时间间隔&#xff0c;单位毫秒&#xff0c;默认为2000* loopSeries …

【单体架构事务失效解决方式之___代理对象加锁】

单体架构__用户限买 一个id一单的多线程事务失效问题解决 背景介绍&#xff1a;有一种情况&#xff0c;我们在使用Synchronized的时候出现失效情况。 经过排查&#xff0c;是因为使用了this.当前对象&#xff0c;他现在使用的是目标对象加锁失效&#xff0c;使用代理对象加锁就…

string类:`reserve()`,`resize()`详解

string类的重要接口说明(1)&#xff1a;reserve()&#xff0c;resize() 一、reserve() 和 resize() 注意不要把 reserve(储备) 和 reverse(逆向) 搞混了&#xff01; 1.1 reserve()&#xff1a;用于为字符串预留空间&#xff08;扩容&#xff09;&#xff0c;以便后续操作可以…

【MySQL数据类型】

目录&#xff1a; 前言数据类型分类整数类型tinyintbit 小数类型floatdecimal 字符串类型charvarchar日期和时间enum & set在集合中查找find_in_set 前言 剑指offer&#xff1a;一年又4天 数据类型分类 整数类型 tinyint 整数类型都分为有符号和无符号两种&#xff0c;默…

Linux重要基本命令

重要基本命令 1.ls命令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常见的选项包括&#xff1a; -l&#xff1a;以长格式显示文件信息&#xf…

git 使用记录

远程仓库为空初始化 初始化本地仓库 git init 在本地仓库书写代码&#xff08;这里可以编辑一个文本文件做测试&#xff0c;如hello.txt&#xff09; 5&#xff09;执行&#xff1a;git add 要让git管理的文件&#xff08;git add hello.txt&#xff09;>执行完此操作将我…

git提交报错 fatal: LF would be replaced by CRLF in package-lock.json

报错 fatal: LF would be replaced by CRLF in package-lock.json 原因 git 在windows下&#xff0c;默认是CRLF作为换行符&#xff0c; git add 提交时&#xff0c;会检查文本中是否有LF 换行符&#xff08;linux系统&#xff09;&#xff0c;如果有则会告警&#xff0c; 所…