0
点赞
收藏
分享

微信扫一扫

ElasticSearch 快照一键生成恢复脚本



文章目录

  • 创建快照仓库
  • 根据指定快照进行快照恢复
  • 查看快照恢复状态
  • 查看快照仓库
  • 创建快照
  • 查看快照状态



之前有介绍过快照如何使用

这里将ES快照弄成脚本,一键备份,方便使用

创建快照仓库

snapshot_warehouse_create.sh

参数格式如下:
 参数1 :  ip:port 
 参数2 :  快照仓库名称 
 参数3 :  快照本地存储目录  
 例:sh create_snapshot_warehouse.sh 10.8.10.23:9200  jast_snapshot_warehouse /home/es/data

脚本内容

#!/bin/bash
errorL="\033[31m"
errorR="\033[0m"

successL="\033[32m"
successR="\033[0m"


# 参数1 :  ip:port
# 参数2 :  快照仓库名称
# 参数3 :  快照本地存储目录,注意:这里快照本地存储目录必须在elasticsearch.yml中配置 path.repo: ["/home/es/snapshot"]

# ip
ip=$1
# 快照仓库名称
snapshot_warehouse_name=$2
# 快照本地存储目录
snapshot_local_dir=$3

echo 
if [ -z $ip ] || [ -z $snapshot_warehouse_name ] || [ -z $snapshot_local_dir ]; then
    echo -e $errorL'执行失败已退出,参数格式如下:\n 参数1 :  ip:port \n 参数2 :  快照仓库名称 \n 参数3 :  快照本地存储目录  \n 例:sh create_snapshot_warehouse.sh 10.8.10.23:9200  jast_snapshot_warehouse /home/es/data'$errorR
    exit 1
fi

echo -e "执行命令:\ncurl -X POST http://$ip/_snapshot/$snapshot_warehouse_name -H 'Content-Type: application/json' -d '
{ 
  \"type\":\"fs\", 
  \"settings\": { 
    \"compress\": true, 
    \"location\": \"$snapshot_local_dir\"
  } 
} 
'
"

curl -X POST http://$ip/_snapshot/$snapshot_warehouse_name -H 'Content-Type: application/json' -d '
{ 
  "type":"fs", 
  "settings": { 
    "compress": true, 
    "location": "'$snapshot_local_dir'"
  } 
} 
'

根据指定快照进行快照恢复

snapshot_restore.sh

参数格式如下:
 参数1 :  ip:port 
 参数2 :  快照仓库名称 
 参数3 :  快照名称 
 参数4 :  是否等待阻塞完成后退出,默认否
 例:sh snapshot_restor.sh 192.168.1.1:9200 jast_snapshot snapshot_20210101

脚本内容

#!/bin/bash
errorL="\033[31m"
errorR="\033[0m"

successL="\033[32m"
successR="\033[0m"

# 参数1 :  ip:port
# 参数2 :  快照仓库名称
# 参数3 :  快照名称
# 参数4 :  是否等待阻塞完成后退出,默认否

# ip
ip=$1
# 快照仓库名称
snapshot_warehouse_name=$2
# 快照名称
snapshot_name=$3

if [ -z $ip ] || [ -z $snapshot_warehouse_name ] || [ -z $snapshot_name ]; then
    echo -e $errorL'执行失败已退出,参数格式如下:\n 参数1 :  ip:port \n 参数2 :  快照仓库名称 \n 参数3 :  快照名称 \n 参数4 :  是否等待阻塞完成后退出,默认否\n 例:sh snapshot_restor.sh 192.168.1.1:9200 jast_snapshot snapshot_20210101'$errorR
    exit 1
fi


echo "执行命令:http://$ip/$snapshot_warehouse_name/$snapshot_name/_restore"

curl -X POST http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name/_restore

查看快照恢复状态

snapshot_restore_status.sh

参数格式如下:
 参数1 :  ip:port 
 [参数2(不填写查询全部) :  索引名称] 
 例:sh snapshot_restore_status.sh 10.8.10.23:9200 operator_website_index

脚本内容

#!/bin/bash
errorL="\033[31m"
errorR="\033[0m"

successL="\033[32m"
successR="\033[0m"

# 参数1 :  ip:port
# [参数2 :  索引名称]

# ip
ip=$1
# 索引名称
index_name=$2

echo 
if [ -z $ip ]  ; then
    echo -e $errorL'执行失败已退出,参数格式如下:\n 参数1 :  ip:port \n [参数2(不填写查询全部) :  索引名称] \n 例:sh snapshot_restore_status.sh 10.8.10.23:9200 operator_website_index'$errorR
    exit 1
fi


echo "执行命令:http://$ip/$snapshot_warehouse_name/$snapshot_name/_restore"

if [ -z $index_name ]; then
    curl -X GET http://$ip/_recovery?pretty
else
    curl -X GET http://$ip/$index_name/_recovery?pretty
fi

说明

type 字段告诉你恢复的本质;这个分片是在从一个快照恢复。

source 哈希描述了作为恢复来源的特定快照和仓库。

percent 字段让你对恢复的状态有个概念。这个特定分片目前已经恢复了 94% 的文件;它就快完成了。

{
  "restored_index_3" : {
    "shards" : [ {
      "id" : 0,
      "type" : "snapshot", 
      "stage" : "index",
      "primary" : true,
      "start_time" : "2014-02-24T12:15:59.716",
      "stop_time" : 0,
      "total_time_in_millis" : 175576,
      "source" : { 
        "repository" : "my_backup",
        "snapshot" : "snapshot_3",
        "index" : "restored_index_3"
      },
      "target" : {
        "id" : "ryqJ5lO5S4-lSFbGntkEkg",
        "hostname" : "my.fqdn",
        "ip" : "10.0.1.7",
        "name" : "my_es_node"
      },
      "index" : {
        "files" : {
          "total" : 73,
          "reused" : 0,
          "recovered" : 69,
          "percent" : "94.5%" 
        },
        "bytes" : {
          "total" : 79063092,
          "reused" : 0,
          "recovered" : 68891939,
          "percent" : "87.1%"
        },
        "total_time_in_millis" : 0
      },
      "translog" : {
        "recovered" : 0,
        "total_time_in_millis" : 0
      },
      "start" : {
        "check_index_time" : 0,
        "total_time_in_millis" : 0
      }
    } ]
  }
}

查看快照仓库

snapshot_warehouse_query.sh

参数格式如下:
 参数1 :  ip:port 
 [参数2 :  索引仓库名称] 
 例:sh snapshot_warehouse_query.sh 10.8.10.23:9200 jastsnapshot

脚本内容

#!/bin/bash
errorL="\033[31m"
errorR="\033[0m"

successL="\033[32m"
successR="\033[0m"

# 参数1 :  ip:port
# [参数2 :  快照仓库名称]

# ip
ip=$1
# 快照仓库名称
snapshot_warehouse_name=$2

echo 
if [ -z $ip ]  ; then
    echo -e $errorL'执行失败已退出,参数格式如下:\n 参数1 :  ip:port \n [参数2 :  快照仓库名称] \n 例:sh snapshot_warehouse_query.sh 10.8.10.23:9200 jastsnapshot'$errorR
    exit 1
fi



if [ -z $snapshot_warehouse_name ]; then
    echo "执行命令:http://$ip/_snapshot?pretty"
    curl -X GET http://$ip/_snapshot?pretty
else
    echo "执行命令:http://$ip/_snapshot/$snapshot_warehouse_name?pretty"
    curl -X GET http://$ip/_snapshot/$snapshot_warehouse_name?pretty
fi

创建快照

snapshot_create.sh

参数格式如下:
 参数1 :  ip:port 
 [参数2 :  快照仓库名称]
 [参数3(不填写默认以格式:年月日时分秒,创建快照名称) :  快照名称]
 例:sh snapshot_create.sh 10.8.10.23:9200 rbtsnapshot

脚本内容

#!/bin/bash
# 创建快照
errorL="\033[31m"
errorR="\033[0m"

successL="\033[32m"
successR="\033[0m"


# 参数1 :  ip:port
# 参数2 :  快照仓库名称
# [参数3(不填写默认以格式:年月日时分秒,创建快照名称) :  快照名称]
# [参数4 : 指定索引快照,多个索引逗号分隔]

# ip
ip=$1
# 快照仓库名称
snapshot_warehouse_name=$2
# 快照名称
snapshot_name=$3
# 指定索引快照
snapshot_indices=$4

echo 
if [ -z $ip ] || [ -z $snapshot_warehouse_name ] ; then
    echo -e $errorL'执行失败已退出,参数格式如下:\n 参数1 :  ip:port \n [参数2 :  快照仓库名称]\n [参数3(不填写默认以格式:年月日时分秒,创建快照名称) :  快照名称]\n [参数4 : 指定索引快照,多个索引逗号分隔]\n 例:sh snapshot_create.sh 10.8.10.23:9200 rbtsnapshot'$errorR
    exit 1
fi



if [ -z $snapshot_name ] ; then
    current_time=$(date "+%Y%m%d%H%M%S")
    echo -e "执行命令:curl -X PUT http://$ip/_snapshot/$snapshot_warehouse_name/$current_time  -H 'Content-Type: application/json' -d '
    { 
      \"ignore_unavailable\": true,
      \"include_global_state\": true
    } 
    '"
    echo -e $successL"快照名称:$current_time"$successR
    curl -X PUT http://$ip/_snapshot/$snapshot_warehouse_name/$current_time  -H 'Content-Type: application/json' -d '
    { 
      "ignore_unavailable": true,
      "include_global_state": true
    } 
    '
else
  if [ -z $snapshot_indices ]; then
    echo -e "执行命令:curl -X PUT http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name  -H 'Content-Type: application/json' -d '
    { 
      \"ignore_unavailable\": true,
      \"include_global_state\": true
    } 
    '"
    echo -e $successL"快照名称:$snapshot_name"$successR
    curl -X PUT http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name  -H 'Content-Type: application/json' -d '
    { 
      "ignore_unavailable": true,
      "include_global_state": true
    } 
    '
  else
    echo -e "执行命令:curl -X PUT http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name  -H 'Content-Type: application/json' -d '
    { 
      \"indices\": \"$snapshot_indices\",
      \"ignore_unavailable\": true,
      \"include_global_state\": true
    } 
    '"
    echo -e $successL"快照名称:$snapshot_name"$successR
    curl -X PUT http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name  -H 'Content-Type: application/json' -d '
    { 
      "indices": "'$snapshot_indices'",
      "ignore_unavailable": true,
      "include_global_state": true
    } 
    '
  fi
fi

查看快照状态

snapshot_query.sh

参数格式如下:
 参数1 :  ip:port 
 参数2 :  快照仓库名称
 [参数3(不填默认查全部) :  快照名称]
 例:sh snapshot_query.sh  10.8.10.23:9200 rbtsnapshot snapshotname

脚本内容

#!/bin/bash
# 查看快照状态
errorL="\033[31m"
errorR="\033[0m"

successL="\033[32m"
successR="\033[0m"


# 参数1 :  ip:port
# 参数2 :  快照仓库名称
# [参数3(不填默认查全部) :  快照名称]

# ip
ip=$1
# 快照仓库名称
snapshot_warehouse_name=$2
# 快照名称
snapshot_name=$3

if [ -z $ip ] || [ -z $snapshot_warehouse_name ]; then
    echo -e $errorL'执行失败已退出,参数格式如下:\n 参数1 :  ip:port \n 参数2 :  快照仓库名称\n [参数3(不填默认查全部) :  快照名称]\n 例:sh snapshot_query.sh  10.8.10.23:9200 rbtsnapshot snapshotname'$errorR
    exit 1
fi

if [ -z $snapshot_name ]; then  
  echo "执行命令:http://$ip/_snapshot/$snapshot_warehouse_name/_all?pretty"
  curl -X GET http://$ip/_snapshot/$snapshot_warehouse_name/_all?pretty
else
  echo "执行命令:http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name?pretty"
  curl -X GET http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name?pretty
fi

echo "执行命令:http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name?pretty"
curl -X GET http://$ip/_snapshot/$snapshot_warehouse_name/$snapshot_name?pretty


举报

相关推荐

0 条评论