该文档适用于备份使用NAS的仓库类型。所有Elasticsearch集群中的服务通过挂载NAS目录来存放备份快照数据。
1、创建备份仓库
创建一个仓库名称:backup
curl -H "Content-Type: application/json" -XPUT http://10.10.18.10:9200/_snapshot/backup -d ' { "type":"fs", "settings":{"location":"/data/bak_es/snapshot"}, "max_snapshot_bytes_per_sec" : "50mb", "max_restore_bytes_per_sec" : "50mb" }'
提交成功了返回:{"acknowledged":true} ,在集群所有节点上创建:/data/bak_es/snapshot 目录
max_snapshot_bytes_per_sec
当快照数据进入仓库时,这个参数控制这个过程的限流情况。默认是每秒 20mb 。
max_restore_bytes_per_sec
当从仓库恢复数据时,这个参数控制什么时候恢复过程会被限流以保障你的网络不会被占满。默认是每秒 20mb。
2、查询备份仓库
curl -XGET 'http://10.10.18.10:9200/_snapshot?pretty'
结果
{ "backup" : { ######仓库名称 "type" : "fs", #仓库类型 "settings" : { "location" : "/data/bak_es/snapshot" #备份数据存放路径 } } }
3、编写全索引备份脚本
安装curl
yum -y install curl
脚本名称:es_backup.sh
#!/bin/bash #功能:用于备份elasticsearch的全索引快照,保留7天的备份快照。
#7天前的日期 B_DATA=$(date -d "7 day ago" %F)
#脚本运行日志 LOG_FILE="/tmp/es_backup.log"
#运行脚本的当前时间 CUR_TIME=$(date %F_%H-%M-%S)
#仓库名称 STORE_NAME="backup"
#快照名称SNAPSHOT_PRE="snapshot_all"SNAPSHOT_NAME="
#快照API Snap_API="http://10.10.18.10:9200"
#curl的绝对路径 CURL_CMD="/usr/bin/curl"
#生成快照 echo "=====${SNAPSHOT_NAME}=====开始快照es" >> ${LOG_FILE} #执行命令后阻塞等快照完成 #${CURL_CMD} -XPUT "${Snap_API}/_snapshot/${STORE_NAME}/${SNAPSHOT_NAME}?wait_for_completion=true" >> ${LOG_FILE} #执行命令后立即返回,备份快照会在后台运行 ${CURL_CMD} -XPUT "${Snap_API}/_snapshot/${STORE_NAME}/${SNAPSHOT_NAME}" >> ${LOG_FILE} echo "=====${SNAPSHOT_NAME}=====结束快照es" >> ${LOG_FILE}
#删除7前老的快照 for snap_name in $(${CURL_CMD} -sXGET "${Snap_API}/_snapshot/${STORE_NAME}/_all" | Python -m json.tool | grep '"snapshot":' | awk -F'[:",]' '{print $5}'|grep ${SNAPSHOT_PRE} | grep "${B_DATA}") do ${CURL_CMD} -XDELETE "${Snap_API}/_snapshot/${STORE_NAME}/${snap_name}" if [ $? -eq 0 ];then echo "删除快照:${snap_name} success" >> ${LOG_FILE} else echo "删除快照:${snap_name} fail" >> ${LOG_FILE} fi done
4、查看所有备份全索引的信息
curl -XGET "http:// 10.10.18.10:9200/_snapshot/backup/_all" | python -m json.tool
查看单个备份全索引的信息
curl -XGET "http://10.10.18.10:9200/_snapshot/backup/snapshot_all?pretty"