Elasticsearch-5.2.0数据备份

概述

本文介绍的是Elasticsearch-5.2.0基于hdfs在不用的集群上快速恢复数据。

环境

hadoop集群环境,传送门(https://blog.csdn.net/bankq/article/details/89379825

一、ES整合HDFS集群

1、安装repository-hdfs

Elasticsearch-5.2.0安装repository-hdfs,快速在不同集群之间恢复数据

2、下载ES对应的插件版本

https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-5.2.0.zip

3、解压

unzip repository-hdfs-5.2.0.zip

 

4、移动并修改解压后文件名

mv elasticsearch elasticsearch-5.2.0/plugins/repository-hdfs

5、修改配置文件

vim /es5.2.0/bigdata/elasticsearch-5.2.0/plugins/repository-hdfs/plugin-security.policy
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "shutdownHooks";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission javax.security.auth.AuthPermission "doAs";
permission javax.security.auth.AuthPermission "getSubject";
permission javax.security.auth.AuthPermission "modifyPrivateCredentials";
permission java.util.PropertyPermission "*", "read,write";

permission java.security.AllPermission;
permission javax.security.auth.PrivateCredentialPermission "org.apache.hadoop.security.Credentials * \"*\"", "read";
vim /es5.2.0/bigdata/elasticsearch-5.2.0/config/jvm.options
-Djava.security.policy=file:es5.2.0/bigdata/elasticsearch-5.2.0/plugins/repository-hdfs/plugin-security.policy

6、重新启动es集群

#停止es
kill -SIGTERM  `ps -ef | grep Elasticsearch | grep -v grep | awk '{print $2}'`
#启动es
/es5.2.0/bigdata/elasticsearch-5.2.0/bin/elasticsearch -d

 

7、基于hdfs创建仓库

在kibane插件上面执行

PUT /_snapshot/my_hdfs_repository
{
	"type": "hdfs",
	"settings": {
		"uri": "hdfs://192.168.8.21:8020/",
		"path": "elasticsearch/respositories/my_hdfs_repository",
		"max_snapshot_bytes_per_sec" : "50mb", 
		"max_restore_bytes_per_sec" : "50mb"
	}
}

#uri 为hadoop集群hdfs的地址。
#conf.dfs.client.read.shortcircuit hdfs短路读取,客户端读hdfs时,datanode会根据blockID从本地磁盘读数据并通过TCP流发送给client端,但是,如果Client与Block位于同一节点,那么client端直接读取本地Block文件即可获取数据,无需通过Datanode的TCP连接发送,这就是短路读取(short-circuit)。
#max_snapshot_bytes_per_sec,这个参数用于指定数据从es灌入仓库的时候,进行限流,默认是20mb/s。
#max_restore_bytes_per_sec,这个参数用于指定数据从仓库中恢复到es的时候,进行限流,默认也是20mb/s。

8、验证

在kibane插件上面执行

#验证
POST /_snapshot/my_hdfs_repository/_verify

验证结果

{
  "nodes": {
    "avi9bA0AQeG7vHNtJCqPAA": {
      "name": "node-5"
    },
    "JD16f2hASOCp3lXb5BlFRA": {
      "name": "node-4"
    },
    "BtaGkSuWQGG57ApoASPm7w": {
      "name": "node-3"
    }
  }
}

9、备份

对所有open的索引进行snapshotting备份

PUT /_snapshot/my_hdfs_repository/snapshot_1?wait_for_completion=true

wait_for_completion:该参数表示上面执行备份的命令需要等待执行完毕之后返回结果。对运维中的自动化shell脚本,很重要,你的shell脚本里,要比如等待它备份完成了以后,才会去执行下一条命令。

查看备份进程

#查看snapshot备份列表
GET /_snapshot/my_hdfs_repository/snapshot_1

 

第一次会备份全量的数据,但是接下来的snapshot就是备份两次snapshot之间的增量数据了。数据是增量进入es集群或者从es中删除的,那么每次做snapshot备份的时候,也会自动在snapshot备份中增量增加数据或者删除部分数据。因此这就意味着每次增量备份的速度都是非常快的。

对指定的索引进行snapshotting备份

#对指定的索引进行snapshotting备份
PUT _snapshot/my_hdfs_repository/snapshot_20190418
{
    "indices": "poc13,poc8",
    "ignore_unavailable": true,
    "include_global_state": false,
    "partial": true
}

indices:需要备份的索引库,多个库使用“,”分割。

ignore_unavailable:ignore_unavailable如果设置为true的话,那么那些不存在的index就会被忽略掉,不会进行备份过程中。

include_global_state:设置include_global_state为false,可以阻止cluster的全局state也作为snapshot的一部分被备份。

partial:默认情况下,如果某个索引的部分primary shard不可用,那么会导致备份过程失败,那么此时可以将partial设置为true。

snapshot备份列表

#查看所有的备份列表
GET /_snapshot/my_hdfs_repository/_all

删除snapshot备份

#删除snapshot备份
DELETE /_snapshot/my_hdfs_repository/snapshot_1?pretty

10、基于snapshot的数据恢复

全量恢复

POST /_snapshot/my_hdfs_repository/snapshot_1/_restore

恢复指定的索引

POST /_snapshot/my_hdfs_repository/snapshot_3/_restore
{
    "indices": "poc8", 
	"ignore_unavailable": true,
	"include_global_state": true
}

#恢复指定的索引,对索引重新命名

POST /_snapshot/my_hdfs_repository/snapshot_14/_restore
{
    "indices": "poc14", 
    "ignore_unavailable": true,
    "include_global_state": true,
    "rename_pattern": "poc14", 
    "rename_replacement": "poc15" 
}

 #监控restore的进度

GET poc8/_recovery

二、定时备份

1、shell脚本编写

备份是通过crond每天凌晨定时执行备份命令,备份最近7天的数据。

脚本逻辑:

1、创建一个保存脚本执行结果的文件,

2、备份前一天的数据

3、备份成功以后删除7天之前的备份

esdatabak.sh

#!/bin/bash
esip=192.168.8.23
esindex=poc14,poc8
esbakfile=/bigdata/bak/es/baklogs
if [ ! -d $esbakfile ]; then
 mkdir -p $esbakfile
fi
echo -e "\r\n"  >> $esbakfile/bak_es_log.logs
echo -e "\r\n"  >> $esbakfile/bak_es_log.logs
echo "=================start====$(date '+%Y-%m-%d %H:%M:%S')=================" >> $esbakfile/bak_es_log.logs


echo " create new snapshot_$(date -d -1day +%Y%m%d) " >> $esbakfile/bak_es_log.logs
#备份新的数据,指定新的索引库 
curl -XPUT "http://$esip:9200/_snapshot/my_hdfs_repository/snapshot_$(date -d -1day +%Y%m%d)?wait_for_completion=true&pretty" -d '{
    "indices": "'${esindex}'",
    "ignore_unavailable": true,
    "include_global_state": false,
    "partial": true
}'  >>  $esbakfile/bak_es_log.logs


echo -e "\r\n"   >> $esbakfile/bak_es_log.logs
echo -e "\r\n"   >> $esbakfile/bak_es_log.logs


echo "delete snapshot_$(date -d -7day +%Y%m%d)  " >> $esbakfile/bak_es_log.logs
#删除7天以前的数据
curl -XDELETE "http://$esip:9200/_snapshot/my_hdfs_repository/snapshot_$(date -d -7day +%Y%m%d)?pretty"   >>  $esbakfile/bak_es_log.logs

echo -e "\r\n"   >> $esbakfile/bak_es_log.logs


echo "======================end====$(date '+%Y-%m-%d %H:%M:%S')=======================" >> $esbakfile/bak_es_log.logs

2、crontab的使用

crontab -e
#时间格式:分 时 天 月 星期
10 * */0 * * sh /bigdata/lgt/test/esdatabak.sh >> /bigdata/lgt/test/see.log 2>&1

启动crond,使用root用户

service crond start

查看日志

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值