ES--为什么没有完全删除?

原文网址:ES--为什么没有完全删除?_IT利刃出鞘的博客-CSDN博客

简介

本文介绍ES的删除策略:逻辑删除。

问题描述

ES删除索引

会立即释放空间,不存在所谓的"标记"逻辑。

ES关闭索引

会立即释放空间,不存在所谓的"标记"逻辑。会保存索引的数据。

ES删除文档

不会立刻删除,只是将文档标记为已删除(在.del文件里记录已删除的文档ID)。ES会在你往索引里写入数据后在后台物理删除标记为已删除的文档。注意:ES通过后台的segment merge清除已删除的数据(对当前的segment file进行处理)。

一个shard可能会有上百个segment file,有很大几率新旧文档存在于不同的segment里而无法物理删除。想要手动释放空间,只能是定期做一下force merge,并且将max_num_segments设置为1。

物理删除旧数据

法1.重启索引

复制代码
# 关闭指定索引(Elasticsearch 7.x)
curl -X POST "http://localhost:9200/logs-2023-05-01/_close"

# 查看关闭状态
curl -X GET "http://localhost:9200/logs-2023-05-01/_stats?pretty"

# 打开索引
curl -X POST "http://localhost:9200/logs-2023-05-01/_open"

法2.强制合并

以保存近100天的数据为例:

  • 第一步:delete_by_query删除近100天数据;
  • 第二步:执行forcemerge操作,手动释放磁盘空间。

删除脚本如下:

复制代码
#!/bin/sh
curl -H'Content-Type:application/json' -d'{
    "query": {
        "range": {
            "pt": {
                "lt": "now-100d",
                "format": "epoch_millis"
            }
        }
    }
}
' -XPOST "http://192.168.1.101:9200/logstash_*/
_delete_by_query?conflicts=proceed"

merge脚本如下:

复制代码
#!/bin/sh
curl -XPOST 'http://192.168.1.101:9200/_forcemerge?
only_expunge_deletes=true&max_num_segments=1'

注意:此方法很耗性能,生产环境谨慎操作!

法3.用工具删除

ES官网工具:curator。作用:规划和管理ES的索引。支持常见操作:创建、删除、合并、reindex、快照等操作。

官网地址

http://t.cn/RuwN0oM

Git地址:https://github.com/elastic/curator

安装向导

地址:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/installation.html

注意:

  1. curator博客很多,但curator旧版本和新版本有较大差异,建议参考官网最新手册部署。
  2. 旧版本命令行方式新版本已不支持。

命令行操作

复制代码
$ curator --help
Usage: curator [OPTIONS] ACTION_FILE

  Curator for Elasticsearch indices.

  See http://elastic.co/guide/en/elasticsearch/client/curator/current

Options:
  --config PATH  Path to configuration file. Default: ~/.curator/curator.yml
  --dry-run      Do not perform any changes.
  --version      Show the version and exit.
  --help         Show this message and exit.

核心是配置文件config.yml:配置要连接的ES地址、日志配置、日志级别等;

  • 执行文件action.yml: 配置要执行的操作(可批量)、配置索引的格式(前缀匹配、正则匹配方式等)

curator适用场景

最重要的是:

  • 仅以删除操作为例:curator可以非常简单地删除x天后的索引的前提是:索引命名要遵循特定的命名模式------如:以天为命名的索引:logstash_2018.04.05。
  • 命名模式需要和action.yml中的delete_indices下的timestring对应。
相关推荐
数数科技的数据干货13 分钟前
官宣!数数科技正式更名为 ThinkingAI
大数据·人工智能·科技·agent
葫三生17 分钟前
《论三生原理》系列:文化自信、知识范式重构与科技自主创新的思想运动源头?
大数据·人工智能·科技·深度学习·算法·重构·transformer
mpp00725 分钟前
AI如何自动化3C产品UX测试?企业级智能体GEA实战指南
大数据·人工智能
财迅通Ai34 分钟前
中国建筑新签80亿元重大项目,海外数据中心与国内能源基建同步推进
大数据·人工智能·能源·中国建筑
有想法的py工程师1 小时前
PostgreSQL vs PolarDB:Checkpoint 调优策略深度对比(高频 vs 低频)
大数据·数据库·postgresql
kyle~1 小时前
机器人广域网通信---MQTT技术
大数据·c++·机器人·ros2
聊点儿技术1 小时前
IP欺诈风险查询+动态信用分模型:如何作为特征融入用户信用分
大数据·人工智能·ip·用户运营·ip风险·ip风险画像·欺诈风险查询
dyxal1 小时前
Windows 下 Git 离线安装与 VS Code 便携版集成完全指南
windows·git·elasticsearch
docsz1 小时前
据数据基座搭建
大数据·hadoop
听你说321 小时前
中节能晶和科技亮相道路照明论坛:以EMC模式破局行业热潮 做智慧照明高质量发展引领者
大数据·人工智能·科技