elasticsearch数据备份迁移之snapshot

1、快照简介

ES提供快照和恢复功能,我们可以在远程文件系统仓库(比如共享文件系统、S3、HDFS等)中单独给部分索引或者整个集群创建快照。这些快照对备份非常有用,它们能相对较快地被恢复。其优点如下:

迁移速度快,适用数据量大的场景;
需占用源集群磁盘空间,或者借助于对象存储,实现友商ES到腾讯云ES,或自建ES到腾讯云ES的数据迁移;
存储类型有共享文件系统、AWS 的 S3存储、HDFS、微软 Azure的存储、Google Cloud 的存储。

特殊说明

1> 为方便验证glusterfs和NFS文件系统,本文同时使用了此两种文件系统的方式;分别在老es集群上通过glusterfs文件系统存放es集群的快照和在新es集群上通过NFS文件系统存放es集群的快照。
2> 使用fs文件系统的目的是为了保证备份和恢复快照时数据的一致性

2、原es集群环境

系统版本 jdk版本 ES集群版本 节点数
CentOS 7.1.1503 (Core) 1.8.0_112 6.5.1 3

在这里插入图片描述

3、创建共享文件系统glusterfs(原es集群的仓库快照存储使用)

3.1、Glusterfu部署(18.11和18.22)

参考链接如下:
https://blog.csdn.net/weixin_44729138/article/details/105663849

3.2、服务端创建存放es快照的volume卷

mkdir -p /u01/isi/esback
gluster volume create volume-es replica 2 192.168.18.11:/u01/isi/esback  192.168.18.22:/u01/isi/esback   #回车后按y

在这里插入图片描述

gluster volume info volume-es
gluster volume start  volume-es

在这里插入图片描述

3.3、客户端挂在卷(原es集群的每个节点)

yum install -y glusterfs glusterfs-fuse  #安装glusterfs客户端
mkdir /u01/isi/snapshot #创建挂在目录,es的快照存放路径
mount -t glusterfs 192.168.18.22:/volume-es /u01/isi/snapshot/ #挂在glusterfs卷

在这里插入图片描述
在这里插入图片描述

4、elasticsearch集群配置(原es集群)

cat config/elasticsearch.yml |grep repo   #每个节点
path.repo: ["/u01/isi/snapshot"] #镜像仓库目录

在这里插入图片描述
重启集群

5、 注册repository(原es集群)

chown -R isi:isi /u01/isi/snapshot  #调整仓库目录权限

注册到仓库

curl  -XPUT 'http://192.168.18.15:9200/_snapshot/my_backup' -d '{
  "type": "fs",
  "settings": {
  "location": "/u01/isi/snapshot",
  "compress": true
  }
  }'  #快照可以在集群中的任意节点上注册

或者在Kibana console中输入如下的命令进行注册也可以

PUT _snapshot/my_backup
    {
    
    
      "type": "fs",
      "settings": {
    
    
      "location": "/u01/isi/snapshot",
      "compress": true
      }
    }

在这里插入图片描述
查看创建的仓库

curl -XGET 'http://192.168.18.15:9200/_snapshot/my_backup?pretty'  

在这里插入图片描述
除了location 参数外,还可以通过max_snapshot_bytes_per_secmax_restore_bytes_per_sec 来限制备份和恢复时的速度

PUT _snapshot/my_backup
    {
    
    
      "type": "fs",
      "settings": {
    
    
        "location": "/u01/isi/snapshot",
        "compress": true,

        "max_snapshot_bytes_per_sec" : "50mb", 
        "max_restore_bytes_per_sec" : "50mb"
      }
}

6、备份索引(原es集群)

仓库创建好之后就可以开始备份了,一个仓库可以包含多个快照(snapshots),快照可以存所有的索引,部分索引或者一个单独的索引。可以给索引指定一个唯一的名字:

curl -XPUT 'http://192.168.18.15:9200/_snapshot/my_backup/snapshot_1'

上面的代码会将所有正在运行的索引,备份到仓库下一个叫snapshot_1的快照中。上面的api会立刻返回,然后备份工作在后台运行。如果你想api同步执行,可以加wait_for_completion 标志:

curl -XPUT  'http://192.168.18.15:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true'  #备份快照可以在集群中的任意节点上操作

在这里插入图片描述
查看索引快照(原es集群上操作)

curl -XGET 'http://192.168.18.19:9200/_snapshot/my_backup/snapshot_1'  #快照可以在集群中的任意节点上查看

在这里插入图片描述

cd /u01/isi/snapshot
tar -czvf snapshot.tar.gz ./*  #将备份的索引打包

7、新es集群集群环境

系统版本 jdk版本 ES集群版本 节点数
CentOS 7.1.1503 (Core) 1.8.0_112 6.5.1 3

在这里插入图片描述

8、创建共享文件系统NFS(新es集群的仓库快照存储使用)

8.1、NFS部署

参考链接如下:
https://blog.csdn.net/weixin_44729138/article/details/106048003
在这里插入图片描述
说明:
18.9为服务端,共享目录为/u01/isi/snapshot
18.29和18.17为客户端

8.2、客户端挂载共享卷

mkdir /u01/isi/snapshot   #客户端创建挂在目录
mount -t nfs 192.168.18.9:/u01/isi/snapshot  /u01/isi/snapshot  #客户端挂在共享目录

在这里插入图片描述

9、elasticsearch集群配置(新es集群)

cat config/elasticsearch.yml |grep repo   #每个节点
path.repo: ["/u01/isi/snapshot"] #镜像仓库目录

在这里插入图片描述
重启集群

10、迁移数据(恢复快照)

通过scp、rsync或者fz等工具将老es集群快照的数据拷贝到nfs的服务端的共享目录下,然后解压

tar -xf /u01/isi/snapshot/snapshot.tar.gz -C /u01/isi/snapshot/ #在nfs的服务端所在的机器上解压

在这里插入图片描述

curl -XPOST 'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true'  #恢复快照,es集群的任意节点

在这里插入图片描述
注意:默认.kibana需关闭或者删除,否则冲突,当跨集群恢复时由相同索引会执行失败。

curl -XDELETE http://192.168.18.17:9200/.kibana_1  #删除索引
curl -XPOST http://192.168.18.17:9200/.monitoring-kibana-6-2020.12.02/_close?pretty  #关闭索引
curl -XPOST http://192.168.18.17:9200/.monitoring-es-6-2020.12.02/_close?pretty  #关闭索引
curl -XPOST 'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true'  #重新执行恢复的操作命令

在这里插入图片描述
查看索引恢复的进度:
在这里插入图片描述
在这里插入图片描述

11、相关命令汇总

注册到仓库

curl  -XPUT 'http://192.168.18.15:9200/_snapshot/my_backup' -d '{
  "type": "fs",
  "settings": {
  "location": "/u01/isi/snapshot",
  "compress": true
  }
  }' 

查看创建的仓库

curl -XGET 'http://192.168.18.9:9200/_snapshot/my_backup?pretty' 

备份所有索引

curl -XPUT 'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1' 
curl -XPUT  'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true'   #如果想等到备份完成,可以加上参数wait_for_completion=true

备份部分索引

curl -XPUT http://192.168.18.9:9200/_snapshot/my_backup/snapshot_part
{
    
    
    "indices": "index_1,index_2"
}
默认是备份所有的索引indices, 如果要指定index,可以用此命令,这个备份过程需要的时间视数据量而定.

删除备份

curl -XDELETE 'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1'

查看创建的备份的状态

curl -XGET 'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1/_status'

恢复索引

curl -XPOST 'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1/_restore' #恢复所有索引
curl -XPOST 'http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true'    #如果想要等待恢复结果,可以加上参数wait_for_completion=true

恢复部分索引

curl -XPOST http://192.168.18.9:9200/_snapshot/my_backup/snapshot_1/_restore
{
    
    
    "indices": "index_1",
    "rename_pattern": "index_(.+)",
    "rename_replacement": "restored_index_$1"
}
上面的indices, 表示只恢复索引’index_1’
rename_pattern: 表示重命名索引以’index_’开头的索引.
rename_replacement: 表示将所有的索引重命名为’restored_index_xxx’.如index_1会被重命名为restored_index_1.

查看恢复进度

curl -XGET http://192.168.18.9:9200/_recovery/  #查看所有索引的恢复进度
curl -XGET http://192.168.18.9:9200/_recovery/restored_index_1  #查看索引restored_index_1的恢复进度

删除恢复的索引

curl -XDELETE http://192.168.18.9:9200/restored_index_1  #取消恢复只需要删除索引,即可取消恢复

猜你喜欢

转载自blog.csdn.net/weixin_44729138/article/details/110484922
今日推荐