Elasticsearch索引备份与清理

1、背景

1.咱们ES节点个数有限,而环境中日志量又很是庞大,长此以往ES的性能便会降低,因此要对之前的索引作定时清理。
2.ES副本提供了高可靠性,它们让你能够容忍零星的节点丢失而不会中断服务。可是,副本并不提供对灾难性故障的保护。对这种状况,咱们须要的是对集群真正的备份。html

2、API

使用 snapshot API对集群作备份,通常有两种方案:
1.增量备份:是默认的备份方案,即作快照时不指定索引,第一个快照会是一个数据的完整拷贝,后续的快照会保留的是已存快照和新数据之间的差别。
2.备份指定索引:某些日志并不须要长期保存,因此只对咱们感兴趣的索引作快照,必定程度上也能节省磁盘空间。json

3、使用方法

本案例是针对指定索引进行备份bash

1.建立仓库

(1) 挂载NFS共享存储

$ df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
172.16.244.245:/logs/bjbpe01-es nfs 2.0T 1.3G 2.0T 1% /data/backupapp

注意:共享文件系统路径必须确保集群全部节点均可以访问到。因此咱们三个节点都挂载同一个目录。curl

(2) ES配置

集群每一个节点elasticsearch.yml配置文件中添加以下配置,而后重启服务。
path.repo: /data/backupelasticsearch

(3) 部署共享文件系统仓库

#建立仓库目录
$ mkdir /data/backup/2019-02-28
#建立仓库
$ curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/2019-03-08 -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/backup/2019-03-08",
        "max_snapshot_bytes_per_sec": "50mb",
        "max_restore_bytes_per_sec": "50mb"
    }
}'
#2019-03-08 共享仓库名称
#“type”:”fs”    指定仓库类型是一个共享文件系统
#“location”: “/data/backup” 指定挂载目录
#“max_snapshot_bytes_per_sec" : "50mb"  控制快照存到仓库时的限流状况,默认每秒20mb
#"max_restore_bytes_per_sec" : "50mb"   控制从仓库恢复数据时的限流状况,默认每秒20mb

注意:若是须要更新已有仓库设置,请使用POST方式提交,例如咱们要将限流都改成每秒60mbide

$ curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:9200/_snapshot/2019-03-08 -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/backup/2019-03-08",
        "max_snapshot_bytes_per_sec": "60mb",
        "max_restore_bytes_per_sec": "60mb"
    }
}'

2.备份指定索引

$ curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/2019-03-08/logstash-audit_log-2019-03-08?wait_for_completion=true -d '
{
    "indices": "logstash-audit_log-2019-03-08"
}'
#logstash-audit_log-2019-03-08快照名称
#wait_for_completion    默认快照时会进入后台执行,添加该标记能够阻止进入后台执行,常在脚本中使用。
#"indices"  指定要作快照的索引

3.删除指定索引

curl -XDELETE http://127.0.0.1:9200/ logstash-audit_log-2019-02-08

4、附录

其余的经常使用命令性能

#列出仓库
curl -XGET http://127.0.0.1:9200/_snapshot/*
#删除仓库
curl -XDELETE http://127.0.0.1:9200/_snapshot/2019-03-08
#列出快照
curl -XGET http://127.0.0.1:9200/_snapshot/2019-03-08/*
#删除快照
curl -XDELETE http://127.0.0.1:9200/_snapshot/2019-03-08/logstash-audit_log-2019-03-08

这里提供一个简单的脚本,用于备份昨天的数据并清理一个月前的数据ui

#!/bin/bash
#共享存储目录
NFS_DIR=/data/backup
#获取昨天日期(备份使用)
DATE_YESTERDAY=`date -d "-1 day" +%Y-%m-%d`
#获取一个月前日期(索引删除使用)
DATE_MONTH_AGO=`date -d "1 month ago" +%Y-%m-%d`
#要作快照的索引名称
INDEX=(index1 index2 index3)

echo "开始时间:`date +%Y-%m-%d_%H:%m:%S`"
#--------------建立仓库--------------
if [[ ! -d ${NFS_DIR}/${DATE_YESTERDAY} ]];then
  mkdir -p ${NFS_DIR}/${DATE_YESTERDAY}
fi
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/${DATE_YESTERDAY} -d '
{
    "type": "fs",
    "settings": {
        "location": "'${NFS_DIR}'/'${DATE_YESTERDAY}'",
        "max_snapshot_bytes_per_sec": "50mb",
        "max_restore_bytes_per_sec": "50mb"
    }
}'
if [[ $? == 0 ]];then
  echo "${DATE_YESTERDAY}仓库建立成功!"
fi
#--------------数据处理--------------
for i in ${INDEX[@]}
do
#建立快照,备份昨天的数据
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/${DATE_YESTERDAY}/${i}-${DATE_YESTERDAY}?wait_for_completion=true -d '
{
    "indices": "'${i}'-'${DATE_YESTERDAY}'"
}'
if [[ $? == 0 ]];then
  echo "${i}-${DATE_YESTERDAY}快照建立成功!"
fi
#删除一个月前数据
curl -XGET "http://127.0.0.1:9200/_cat/indices/?v"|grep ${i}-${DATE_MONTH_AGO}
if [ $? == 0 ];then
  curl -XDELETE "http://127.0.0.1:9200/${i}-${DATE_MONTH_AGO}"
  echo "${i}-${DATE_MONTH_AGO}索引删除成功!"
else
  echo "${i}-${DATE_MONTH_AGO}索引不存在!"
fi
done
#--------------快照数据作压缩处理--------------
cd ${NFS_DIR}
tar czvf ${DATE_YESTERDAY}.tgz ${DATE_YESTERDAY}
rm -rf ${DATE_YESTERDAY}
cd -
echo "结束时间:`date +%Y-%m-%d_%H:%m:%S`"

参考:官方文档url

相关文章
相关标签/搜索