在大数据项目中我们每天需要存储大量的数据到ElasticSearch( 以下简称es )中,但是存储空间毕竟是有限的,所以常常遇到es存储不够的时候,怎么办呢?
有两种解决方案:
1、扩容
2、删除索引
第一种方案我就不说了,这个方案实现起来最简单,但是成本比较高,而且到了一定时间还是会出现存储不够的情况,所以我们还是采用第二种方案吧,删除过期索引,但是每天去删除太麻烦了,所以这里用一个定时任务脚本来实现,具体实现如下:
es定时删除脚本:
#/bin/bash
#指定日期(7天前)
DATA=`date -d "1 week ago" +%Y%m%d`
echo "开始清理 $DATA 索引"
#当前日期
time=`date`
#删除7天前的日志
curl --user account:pwd -XGET "http://your_ip:9200/_cat/indices/?v"|grep $DATA
if [ $? == 0 ];then
curl --user account:pwd -XDELETE "http://your_ip:9200/*_${DATA}"
echo "于 $time 清理 $DATA 索引!"
fi
这个脚本还是很简单的,我来介绍下:
1、第一句是脚本的开头,这个就不说了
2、首先确定你需要删除哪个时间以前的索引,我这里是删除的一周也就是7天前的,所以我这里DATA取的是当前时间一周以前的时间。
3、下面两句是为了打印,可以写也可以不写
4、查询匹配一周前的这个索引是否存在,这里需要注意添上你es的账号,密码,和部署es的机器ip,如果你没有设置es的账号和密码可以不加。
5、如果这个索引存在,那么就执行删除这个索引的操作,并进行打印,最后输出删除结果
最后你把这个脚本保存好,再设置一个定时脚本,定时脚本设置如下:
0 1 * * * sh /data/shscript/ES-index-clear.sh > /data/shscript/log/es-index-clear.log
我这里是每天早上1点执行这个删除脚本,然后将执行的输出结果输出到日志文件中,就行了。