esh的snapshot快照备份

1)Elasticsearch的snapshot快照备份

优点:通过snapshot拍摄快照,然后定义快照备份策略,能够实现快照自动化存储,可以定义各种策略来满足自己不同的备份
缺点:还原不够灵活,拍摄快照进行备份很快,但是还原的时候没办法随意进行还原,类似虚拟机快照
1、配置备份目录
在 elasticsearch.yml 的配置文件中注明可以用作备份路径 path.repo ,如下所示:
path.repo: ["/mount/backups", "/mount/longterm_backups"]
配置好后,就可以使用 snapshot api 来创建一个 repository 了,如下我们创建一个名为 my_backup 的 repository。
PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/mount/backups/my_backup" } }
2、开始通过API接口备份
有了 repostiroy 后,我们就可以做备份了,也叫快照,也就是记录当下数据的状态。如下所示我们创建一个名为 snapshot_1 的快照。
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
【温馨提示】wait_for_completion 为 true 是指该 api 在备份执行完毕后再返回结果,否则默认是异步执行的,我们这里为了立刻看到效果,所以设置了该参数,线上执行时不用设置该参数,让其在后台异步执行即可。
3、增量备份
PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true
当执行完毕后,你会发现 /mount/backups/my_backup 体积变大了。这说明新数据备份进来了。要说明的一点是,当你在同一个 repository 中做多次 snapshot 时,elasticsearch 会检查要备份的数据 segment 文件是否有变化,如果没有变化则不处理,否则只会把发生变化的 segment file 备份下来。这其实就实现了增量备份。
4、数据恢复
通过调用如下 api 即可快速实现恢复功能:
POST /_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true { "indices": "index_1", "rename_replacement": "restored_index_1" }
2)elasticdump备份迁移es数据
索引数据导出为文件(备份)
# 导出索引Mapping数据 elasticdump \ --input=http://es实例IP:9200/index_name/index_type \ --output=/data/my_index_mapping.json \ # 存放目录 --type=mapping # 导出索引数据 elasticdump \ --input=http://es实例IP:9200/index_name/index_type \ --output=/data/my_index.json \ --type=data
索引数据文件导入至索引(恢复)
# Mapping 数据导入至索引 elasticdump \ --output=http://es实例IP:9200/index_name \ --input=/home/indexdata/roll_vote_mapping.json \ # 导入数据目录 --type=mapping # ES文档数据导入至索引 elasticdump \ --output=http:///es实例IP:9200/index_name \ --input=/home/indexdata/roll_vote.json \ --type=data
可直接将备份数据导入另一个es集群
elasticdump --input=http://127.0.0.1:9200/test_event --output=http://127.0.0.2:9200/test_event --type=data
type类型
type是ES数据导出导入类型,Elasticdump工具支持以下数据类型:

type类型	说明
mapping	ES的索引映射结构数据
data	ES的数据
settings	ES的索引库默认配置
analyzer	ES的分词器
template	ES的模板结构数据
alias	ES的索引别名

3)esm备份迁移es数据
备份es数据
esm -s http://10.33.8.103:9201 -x "petition_data" -b 5 --count=5000 --sliced_scroll_size=10 --refresh -o=./es_backup.bin
-w 表示线程数
-b 表示一次bulk请求数据大小,单位MB默认 5M
-c 一次scroll请求数量
导入恢复es数据
esm -d http://172.16.20.20:9201 -y "petition_data6" -c 5000 -b 5 --refresh -i=./dump.bin


https://zhuanlan.zhihu.com/p/540189644
https://www.cnblogs.com/windysai/p/14400830.html

#!/bin/bash

#db_backups_conf.txt文件路径
db_backups_conf="/home/ljy/scripts/elasticsearch_backup_config.txt"

base_path='/backup/elkdata'
mv_elk_bath='/backup/elkmvdata'

#本机只保留最近3天快照
find ${mv_elk_bath}/ -type f -mtime +2 -exec rm -rf {} \; > /dev/null 2>&1

##先把原来的挪走
# 获取前一天的:年,月,日
y=`date +"%Y" -d "-1day"`
ym=`date +"%Y%m" -d "-1day"`
d=`date "+%d" -d "-1day"`

if [ ! -d ${mv_elk_bath}/${y}/${ym}/${d} ];
then
    mkdir -p ${mv_elk_bath}/${y}/${ym}/${d}
    scp -rp ${base_path}/* ${mv_elk_bath}/${y}/${ym}/${d}/
fi


#判断配置信息文件是否存在
if [ -f "${db_backups_conf}" ];then

        echo $(date +'%Y-%m-%d %H:%M:%S')" 发现备份文件配置信息文件存在"

        #获取等号前内容,作为map中的Key值
        dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} ))

        #获取等号后内容,作为map中的value值
        dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf}))

        #创建一个空map
        declare -A map=()

        #通过循环,将db_backups_conf配置文件中的信息存储在map中
        for((i=0;i<${#dbArrOne[@]};i++))
        do
                map[${dbArrOne[i]}]=${dbArrTwo[i]}
        done

        #获取要备份的索引名称的字符串
        indexNames=${map["indexNames"]}


        #获取默认的字符串分隔符
        old_ifs="$IFS"

        #设置字符串分隔符为逗号
        IFS=","

        #将要备份的索引名称value值的字符串进行分隔,获取一个数组
        indexNamesArr=($indexNames)


        #将字符串的分隔符重新设置为默认的分隔符
        IFS="$old_ifs"

        #获取当前年月日
        saveday=$(date +%Y%m%d)

        #获取超出备份天数的年月日
        delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d)


        #执行命令,备份es数据
        {
           #检测es访问地址是否有效
           esStatus=$(curl -s -m 5 -IL http://${map["ipAddress"]}:${map["portNumber"]}|grep 200)
           if [ "$esStatus" != "" ];then
             echo $(date +'%Y-%m-%d %H:%M:%S')" es地址访问正常:http://"${map["ipAddress"]}":"${map["portNumber"]}",开始备份数据"

             #遍历备份索引名称,逐个删除旧备份,重新全量备份
             for indexName in ${indexNamesArr[@]};
             do
                echo $indexName;
                ##逐个判断索引是否存在
                indexStatus=$(curl -s -m 5 -IL http://${map["ipAddress"]}:${map["portNumber"]}/${indexName}|grep 200)
                if [ "$indexStatus" != "" ];then
                #先备份,然后再删除旧备份
                   if [ ${map["backupBeforeDelete"]} == "yes" ];then
                       echo $(date +'%Y-%m-%d %H:%M:%S')" 开始同步备份索引:"${indexName}_backup_${saveday}
                       curl -XPUT '127.0.0.1:9500/_snapshot/elk_backup/'${indexName}'_backup_'${saveday}'?wait_for_completion=true' -d '{"indices":"'${indexName}'"}'
                       echo $(date +'%Y-%m-%d %H:%M:%S')" 完成同步备份索引:"${indexName}_backup_${saveday}

                       #删除旧备份
                       echo $(date +'%Y-%m-%d %H:%M:%S')" 开始删除备份索引:"${indexName}_backup_${delday}
                       curl -XDELETE '127.0.0.1:9500/_snapshot/elk_backup/'${indexName}'_backup_'${delday}''
                       echo $(date +'%Y-%m-%d %H:%M:%S')" 完成删除备份索引:"${indexName}_backup_${delday}
                   fi
                else
                   echo $(date +'%Y-%m-%d %H:%M:%S')" es中不能存在索引:"${indexName}

                fi
             done
             fi
        }
else
     echo "文件不存在"
fi

备份到nas上的脚本
分每天和每月(每月仅备份1个)

#/bin/bash
#Date: 2020-08-02
#Script Name: elk_logs_bak
#备份elk快照数据到nas

# 日志位置
base_path='/backup/elkdata'

nas_bak='/nasdir/elk_bak/day_bak'
# 获取当前年信息和月信息
ym=$(date +"%Y%m")
dy=`date "+%Y%m%d"`
d=`date "+%d"`

#按年月创建文件夹
if [ ! -d ${nas_bak}/${ym}/${d} ];
then
   sudo mkdir -p ${nas_bak}/${ym}/${d}
fi

scp -rp ${base_path}/* ${nas_bak}/${ym}/${d}/

#每月备份最后一天数据
nasmonth_bak='/nasdir/elk_bak/month_bak'
lastday=`date -d"$(date -d"1 month" +"%Y%m01") -1 day" +"%d"`
thisday=`date +"%d"`
#保留一个月的最后一天日志
if [ $thisday == lastday ];
then
   mkdir -p ${nasmonth_bak}/${ym}/
   scp -rp ${nas_bak}/${ym}/${d}/* ${nasmonth_bak}/${ym}/
fi


find ${nas_bak}/${ym}/ -type f -mtime +30 -exec rm -rf {} \; > /dev/null 2>&1

你可能感兴趣的:(es,运维,elasticsearch)