ELK:ElasticSearch数据备份与还原

前几天接到搭建ElasticSearch集群的任务,作为一个新手当然离不开百度的支持啦,开始着手查资料,改配置,不到一天就搭建起来集群(请忽略时间问题……),第一次么,不是那么熟练。

稳定的运行了几天,突然接到我们负责人的电话,节点挂了(瑟瑟发抖中),什么情况?

ELK:ElasticSearch数据备份与还原_第1张图片
然后检查了集群状态

curl -XGET 'http://127.0.0.1:9200/_cat/health?v'

查看节点状态

curl -XGET 'http://127.0.0.1:9200/_cat/nodes?v'

查看索引状态

curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

然后,没有然后了……

curl -XDELETE ......

ELK:ElasticSearch数据备份与还原_第2张图片
这个时候想起如果要有备份数据多好啊。。。

一、背景

1.日志过大:环境资源有限,所以要对以前的索引做定时清理,但需要保留数月的日志数据以便查询。

2.防止误操作删除:Delete操作释放空间还是很方便的(没有删库跑路啊~~)

3.容灾备份:我们需要的是对集群真正的备份,集群提供了数据的副本,这仅仅在集群运行过程中保持数据的正确获取,当出现一些不可抗力物理因素的情况则需要进行远程数据仓库容灾备份,Elastic提供基于URL的数据备份参数接口。

二、接口

官方文档数据备份说明

打开网站后我们可以看到很明显的英文单词……不友好啊,怎么不直接中文显示呢……
中文入口

Backing Up Your Cluster

ELK:ElasticSearch数据备份与还原_第3张图片
上翻译,请忽略我一个英语渣渣~~

ELK:ElasticSearch数据备份与还原_第4张图片文档翻译中……
Elastic 是有中文版的,可以切换下哈~~
原来官方提供了 snapshot API 备份接口,那开始着手处理吧
使用 snapshot 对集群做备份,一般有两种方案:
1.增量备份:是默认的备份方案,即做快照时不指定索引,第一个快照会是一个数据的完整拷贝,后续的快照会保留的是已存快照和新数据之间的差异。
2.备份指定索引:某些日志并不需要长期保存,所以只对我们感兴趣的索引做快照,一定程度上也能节省磁盘空间。

现在记录的是备份指定索引……

三、具体操作

1.ElasticSearch配置

打开配置文件

vim elasticsearch.yml

在配置文件中添加共享目录(所有节点都需要配置)

path.repo: ["/data/backups/"]

配置好后,重启集群

2.注册共享仓库

#创建仓库目录
mkdir /data/backups/2020-03-09
#创建仓库
curl -XPUT http://127.0.0.1:9200/_snapshot/2020-03-09 -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/backups/2020-03-09",
        "max_snapshot_bytes_per_sec": "20mb",
        "max_restore_bytes_per_sec": "20mb"
    }
}'
#2020-03-09 共享仓库名称
#"type":"fs"    指定仓库类型是一个共享文件系统
#"location": "/data/backups" 指定挂载目录
#"max_snapshot_bytes_per_sec" : "20mb"  控制快照存到仓库时的限流情况,默认每秒20mb
#"max_restore_bytes_per_sec" : "20mb"   控制从仓库恢复数据时的限流情况,默认每秒20mb

3.更新快照配置

我们可以通过接口更新快照配置
ELK:ElasticSearch数据备份与还原_第5张图片

curl -XPOST http://127.0.0.1:9200/_snapshot/2020-03-09 -d '
{
    "type": "fs",
    "settings": {
        "location": "/data/backups/2020-03-09",
        "max_snapshot_bytes_per_sec": "50mb",
        "max_restore_bytes_per_sec": "50mb"
    }
}'

这样就修改限流参数了

4.备份指定索引

curl -XPUT http://127.0.0.1:9200/_snapshot/2020-03-09/my_indices-2020.03.09?wait_for_completion=true -d '
{
    "indices": "my_indices-my_indices-2020.03.09"
}'
#my_indices-my_indices-2020.03.09快照名称
#wait_for_completion 默认快照时会进入后台执行,添加该标记可以阻止进入后台执行
#"indices"  指定要做快照的索引

5.删除指定索引备份

curl -XDELETE http://127.0.0.1:9200/my_indices-my_indices-2020.03.09

四、完成备份

备份已经完成了,下面记录下常用的操作

#列出仓库
curl -XGET http://127.0.0.1:9200/_snapshot/*
#删除仓库
curl -XDELETE http://127.0.0.1:9200/_snapshot/2020-03-09
#列出快照
curl -XGET http://127.0.0.1:9200/_snapshot/2020-03-09/*
#删除快照
curl -XDELETE http://127.0.0.1:9200/_snapshot/2020-03-09/my_indices-my_indices-2020.03.09

五、备份恢复

我们已经备份了索引数据,如果索引数据丢失了如何恢复呢
好在官方已经为我们提供了接口

1.恢复所有索引

curl -XPOST "http://127.0.0.1:9200/_snapshot/2020-03-09/_restore?wait_for_completion=true"

2.恢复指定索引

curl -XPOST "http://127.0.0.1:9200/_snapshot/2020-03-09/_restore?wait_for_completion=true" -d'
{
 "indices":"my_indices",
 "ignore_unavailable":"true"
}'

注意:快照恢复前需要关掉索引

curl -XPOST "http://127.0.0.1:9200/my_indices/_close"

到这我们已经完成了数据的备份与恢复了,以后在遇到类似的问题不用担心啦!

你可能感兴趣的:(大数据处理)