Elasticsearch实例磁盘占用率高排查及解决

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 开源 ES 实例健康状态首先,先介绍下开源 Elasticsearch 的三种健康状态:绿色、黄色和红色。在分片层面,绿色:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。黄色:所有主分片都已经分配,但至少有一个副本分片未被分配。

开源 ES 实例健康状态

首先,先介绍下开源 Elasticsearch 的三种健康状态:绿色、黄色和红色。


在分片层面,

绿色:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。

黄色:所有主分片都已经分配,但至少有一个副本分片未被分配。此时,搜索结果是正确、完整的,不会有数据丢失。但高可用性已经被弱化,有丢失数据的风险。应尽快介入处理。

红色:集群中至少有一个主分片(以及它的所有副本)未被分配,意味着搜索时将缺少数据,至返回部分数据;同时,要写入该分片的请求会返回异常。


这时候您可能会问:“如果集群中有的索引是绿色,有的是黄色,这时候该怎么决定集群的健康度呢?”

集群的健康状态由最差的索引决定,索引的健康状态由最差的分片决定。


阿里云 ES 实例的健康状态

本文主要从磁盘占用达到高水位问题来谈谈 ES 集群健康状态。

大家都知道,阿里云 ES 在一定前提下,重启时是可以持续提供服务的。

前提是:

1. 阿里云ES实例健康度必须确保是绿色状态

2. 至少包含1个副本

注意:不排除节点在重启期间,对应CPU和内存使用率会存在临时突增,服务可能会出现抖动,正常情况下过一段时间后会恢复正常。


但是!阿里云 ES 实例在磁盘率使用超过 85% 以上后,阿里云 ES 实例的状态可能会出现黄色或红色,将不支持重启操作,需要做强制重启操作。

如果 ES 实例处于非健康状态(Yello/Red),此时不建议对阿里云 ES 实例进行节点扩容、磁盘扩容、重启、修改密码、变更配置等操作,请务必保证集群状态变为Green后再进行对应操作。存在的主要风险有:重启期间服务不可用、重启时间较长等。


那么问题来了?如果某时某刻,您发现集群状态不健康了,变为了黄色或红色。那么该怎么处理呢?

下面先介绍下,最大的磁盘占用元凶——监控日志!


监控日志

阿里云 Elasticsearch 提供开源 Elasticsearch 5.5.3和6.3.2版本,及商业版 x-pack 插件服务,在开源 Elasticsearch 基础上提供企业级权限管控、安全监控告警、自动报表生成等功能。

默认情况下 x-pack 监控客户端,会每隔10s采集集群的监控信息,目前主要有 .monitoring-es-*、.monitoring-kibana-* 这两种索引,以天为单位滚动创建,默认保留最近7天日志。采集完的信息会保存在以 .monitoring- 为前缀,加当前日期为后缀的索引中。(例如:.monitoring-es-6-2019.01.20

其中.monitoring-es-*索引相对占用磁盘空间较大,主要存放了集群状态、集群统计、节点统计、索引统计等信息。


排查及解决办法:

注:本文主要介绍使用 curl 工具调用 ES 相关 API 来操作集群,以达到清理磁盘空间的目的。

出于安全考虑,阿里云 ES 强制执行 elasticsearch-http-basic 鉴权。所以 curl 脚本语句基本格式如下:

curl -X [HTTP 方法:GET, PUT, POST, DELETE等] -u username:password 实例地址:9200/[ES 相关 API]

1. GET _cluster/health: 查询集群健康度

e2a8371e07c2878a4cea61280f9d93ea9d132345


2. GET _cat/indices: 查询所有索引信息

a3e869a1569f4fc81c34b5d3947f8f4cdec3ebad

观察到,.monitoring-es-* 占用大量磁盘空间,谨慎选择可以删除的监控日志索引,执行第三步。


3. DELETE /索引名称: 删除指定名称的索引

6f3b39d9eb59553e1c356d330b43975ffa0811e6


注意:为了保障数据的安全,阿里云 ES 实例,DELETE API 不允许使用通配符“*”或“_all”进行批量或全量删除。


日志保留设置

阿里云 ES 服务,默认保留最近7天的监控索引,此类 .monitoring-es-* 索引会占用 ES 实例存储空间。索引的大小跟集群中索引个数(包含系统索引)节点个数有关系。为了避免 ES 实例大部分空间被监控索引所占用,可通过以下两种方案优化。

1. 可通过以下 API 设置监控索引保留天数。

PUT _cluster/settings
{"persistent": {"xpack.monitoring.history.duration":"1d"}}
# 需要保留的天数按照您的需求而定,最少保留一天。
2. 设置需要采集监控的索引。

可以通过 API 设置,哪些索引需要监控及哪些索引不需要监控。以减少.monitoring-es-6-*索引占用磁盘空间,本文以禁掉采集系统索引为例。

PUT _cluster/settings
{"persistent": {"xpack.monitoring.collection.indices": "*,-.*"}}
# 禁掉的索引监控信息将不会在Kibana页面中Montioring模块中看到,比如在索引列表及索引监控信息页面,都看不到禁掉的索引信息。就会出现_cat/indices获取的索引列表,跟在Kibana页面中Montioring模块中看到的索引列表不同的情况。

备注:实际使用中,您可以参考以上2种方案结合使用,以节省您购买的磁盘空间。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
前端开发 Java Docker
利用 docker 部署 elasticsearch 集群(单节点多实例)
利用 docker 部署 elasticsearch 集群(单节点多实例)
600 0
|
7月前
elasticsearch使用 scroll 滚动分页实战实例
elasticsearch使用 scroll 滚动分页实战实例
270 0
|
5月前
|
索引
Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
【7月更文挑战第2天】Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
|
7月前
|
存储 监控 安全
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
86 3
|
7月前
|
监控 API 数据库
Elasticsearch 磁盘使用率超过警戒水位线,怎么办?
Elasticsearch 磁盘使用率超过警戒水位线,怎么办?
144 0
|
存储 自然语言处理 Java
Elasticsearch常见错误及如何排查错误
Elasticsearch常见错误及如何排查错误
443 0
|
搜索推荐 索引
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
188 3
|
存储 缓存 监控
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
Elasticsearch elastic io 100%,但磁盘的iops和吞吐量没爆没啥原因吗?
299 2
记录一次elasticsearch-5.6.4宕机排查经历
记录一次elasticsearch-5.6.4宕机排查经历
145 0
|
存储 监控 负载均衡
大数据数据存储的搜索引擎Elasticsearch的调优的磁盘读写优化
Elasticsearch是一个可扩展的搜索引擎,可以在同一个集群中部署多个Elasticsearch节点,以提高性能和可用性。
93 0