esh的snapshot快照备份

2023-09-21 10:40:18
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
更多推荐

高精度PWM脉宽调制信号转模拟信号隔离变送器1Hz~10KHz转0-5V/0-10V/1-5V/0-10mA/0-20mA/4-20mA

主要特性:>>精度等级:0.1级。产品出厂前已检验校正,用户可以直接使用>>辅助电源:8-32V宽范围供电>>PWM脉宽调制信号输入:1Hz~10KHz>>输出标准信号:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等,具有高负载能力>>全量程范围内极高的线性度(非线性度<0.2%)>>标准D

数据结构——图的应用

文章目录前言一、图的应用1.最小生成树普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法2.最短路径Dijkstra算法求单源最短路径3.拓扑结构4.关键路径总结前言图的应用1.1最小生成树1.2最短路径1.3拓扑结构1.4关键路径一、图的应用1.最小生成树定义:从图中选取若干条边,将所有顶点连接起来,并且所选取的

LLM 09-新的模型架构

LLM09-新的模型架构回想一下第6章模型架构,神经语言模型的核心接口是一个将token序列映射到上下文嵌入的编码器:[the,mouse,ate,the,cheese]⇒ϕ[(10.1),(01),(11),(1−0.1),(0−1)].[\text{the},\text{mouse},\text{ate},\tex

51单片机光照强度检测自动路灯开关仿真( proteus仿真+程序+报告+讲解视频)

51单片机光照强度检测自动路灯开关仿真(proteus仿真+程序+报告+讲解视频)仿真图proteus7.8及以上程序编译器:keil4/keil5编程语言:C语言设计编号:S0052讲解视频基于51单片机的光照检测自动路灯控制仿真设计(proteus仿真+程序+报告+讲解视频)1.主要功能:基于51单片机的万年历时钟

web安全漏洞-SQL注入攻击实验

实验目的学习sql显注的漏洞判断原理掌握sqlmap工具的使用分析SQL注入漏洞的成因实验工具sqlmap是用python写的开源的测试框架,支持MySQL,Oracle,PostgreSQL,MicrosoftSQLServer,MicrosoftAccess,IBMDB2,SQLite,Firebird,Sybas

web系统安全设计原则

一、前言近日,针对西工大网络被攻击,国家计算机病毒应急处理中心和360公司对一款名为“二次约会”的间谍软件进行了技术分析。分析报告显示,该软件是美国国家安全局(NSA)开发的网络间谍武器。当下,我们发现对于我们发布到互联网的软件和系统的安全审查越来越严格。因为web系统天生的伴随着很多漏洞的产生,这是就给很多不法分子留

kubernetes核心概念 Service

kubernetes核心概念Service一、service作用使用kubernetes集群运行工作负载时,由于Pod经常处于用后即焚状态,Pod经常被重新生成,因此Pod对应的IP地址也会经常变化,导致无法直接访问Pod提供的服务,Kubernetes中使用了Service来解决这一问题,即在Pod前面使用Servi

B+树的定义以及查找

1.B+树的定义一棵m阶的B+树需满足下列条件:每个分支结点最多有m棵子树(孩子结点)。非叶根结点至少有两棵子树,其他每个分支结点至少有「m/2]棵子树。结点的子树个数与关键字个数相等。所有叶结点包含全部关键字及指向相应记录的指针,叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互链接起来(支持顺序查找)。所

【Linux成长史】Linux基本指令大全

🎬博客主页:博主链接🎥本文由Mmalloc原创,首发于CSDN🙉🎄学习专栏推荐:LeetCode刷题集数据库专栏初阶数据结构🏅欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📆未来很长,值得我们全力奔赴更美好的生活✨文章目录😇本章详情😇Linux指令⏳more指令⏳less指令(重要)⏳head指令⏳时间相

NumPy数值计算

1、Numpy概念1.1Numpy是什么?Numpy是(NumericalPython的缩写):一个开源的Python科学计算库使用NumPy可以方便的使数组、矩阵进行计算包含线性代数、傅里叶变换、随机数生成等大量函数1.2为什么使用Numpy对于同样的数值计算任务,使用NumPy比直接编写Python代码实现,优点:

React小项目-在线计算器(下)

CONTENTS1.Django项目初始化2.登录/注册后端功能实现3.登录/注册前端界面设计4.登录前后界面的转换5.将React与Django结合并部署至云端本文为React项目(在线计算器)的下篇内容,主要为后端部分的开发,上篇可见:React小项目-在线计算器(上)。1.Django项目初始化我们先在项目根目录

热文推荐