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_sec
和max_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 #取消恢复只需要删除索引,即可取消恢复
都到这儿了,更多文章,详见个人微信公众号ALL In Linux,来扫一扫吧!