网站建设栏目流程,Wordpress写文章贴代码,做雕塑网站,空间 建网站原文网址#xff1a;Elasticsearch--解决磁盘使用率超过警戒水位线_IT利刃出鞘的博客-CSDN博客
简介
本文介绍如何解决ES磁盘使用率超过警戒水位线的问题。
问题描述
当客户端向 Elasticsearch 写入文档时候报错#xff1a;
cluster_block_exception [FORBIDDEN/12/inde…原文网址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属性的数据块。
这里依然会引申出删除索引文档和删除索引本身的区别等知识点
删除索引文档会出现删除后磁盘使用率反而增加的现象因为删除的本质是 version 的 update只有删除索引才相当于物理删除会立即释放磁盘空间。当 index.blocks.read_only_allow_delete 被设置为true时删除文档是不允许的仅允许删除索引。当磁盘使用率达到洪泛警戒水位线 95% 时Elasitcsearch 会强制所有包含分片数据的索引的数据库设置为index.blocks.read_only_allow_delete 属性。当磁盘使用率低于高警戒水位线 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_wildcardsall
{index.blocks.read_only_allow_delete: null
}
长期方案
作为长期解决方案建议将节点添加到不受影响的数据层或升级现有节点实现节点磁盘扩容以增加磁盘空间。
比如data_hot 热节点爆满建议:
添加新的热节点为已有热节点磁盘扩容。
要释放额外的磁盘空间你可以使用删除索引 API 删除不需要的索引。
DELETE my-index4.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
}
}