不为失败找理由,要为成功找方法。

ES数据备份和清理-快照

Elasticsearch | 作者 ziyou | 发布于2018年04月04日 | | 阅读数:15470

        这两天在看ES数据备份方面的事情,因为我们ES集群的存储空间有限,需要定时对ES的数据进行备份和清理,把备份的数据存储到其他地方去,然后在ES集群中释放掉。
        看大家好多是主要考虑数据的安全性才做的数据的备份,我们就比较low了,我们就是因硬盘不够,要删数据。上个项目是因为日志数据重要程度一般般,就保留了一个月的量,然后也没有做数据的备份转储。这次上线的项目要求就高点了,需要删除的数据存储到其他地方,但是硬盘的容量更低了。所以就需要做ES数据备份和转储,转储完了就清掉。
        这里是用ES官方推荐的数据快照方案,这个方案可以完全通过ES API进行操作,比价方便、快捷,在数据恢复方面也是方便的。
先上ES官方的链接,大家看看:https://www.elastic.co/guide/e ... .html
        然后就是步骤了:
执行过程分为两部分:
一、准备过程
1、添加ES备份存储目录
在集群的每台机器上进行目录创建
mkdir /home/esdata
2、挂载共享文件存储目录
在集群的每台机器上目录挂载
mount -t nfs 10.70.61.80:/home/apmtest /home/esdata
3、修改ES集群配置
在ES集群的每台机器上都添加path.repo属性
path.repo: ["/home/esdata"]
4、重启ES集群
ES集群重启必须是关闭所有机器后,再启动。
5、建立备份仓库
PUT /_snapshot/my_backup   

    "type": "fs",   
    "settings": { 
        "location": "/home/esdata"   
    } 
}

二、备份数据快照
1、通过API执行备份
PUT /_snapshot/my_backup/snapshot_2018.03.01?wait_for_completion=true 

    "indices": "filebeat-2018.03.01" 
}
 
        快照仓库需要注意的地方就是需要在整个集群的每一台机器上挂载相同的共享文件存储目录,保证在集群里做的操作是输出到相同的地方的。
 
下面来一份shell脚本,可以定时执行,是做ES数据的定时转储和清理的,大家可以借鉴一下
#!/bin/bash
ESIP=127.0.0.1
DATE=`date -d '-2 days' +'%Y.%m.%d'`
INDEX='{ "indices": "'$DATE'" }'
echo "begin to backup ES LOG..."

curl -XPUT "http://$ESIP:9200/_snapshot/my_backup/snapshot_$DATE?wait_for_completion=true" -d $INDEX

echo "----------------------------------------------------------------------------"

echo "begin to clean ES LOG..."

URL1="http://$ESIP:9200/filebeat-$DATE"

curl -XDELETE $URL1


echo "TRANSFER AND CLEAN ES LOG END!"

[尊重社区原创,转载请保留或注明出处]
本文地址:http://elasticsearch.cn/article/560


3 个评论

这个脚本好像不行啊,-d '{ "indices": "filebeat-$DATE" }'中的$DATE解析不出来
不好意思,我修改了,之前的那个是老的,有BUG,写完以后忘了修改了
现在我建议你使用curator,你可以去官网看看,很方便,虽然我这边还没上生产,但是可用性很好。

要回复文章请先登录注册