elasticsearch 使用快照方式迁移数据
2017-11-22 16:48
288 查看
注册快照仓库
ES是通过快照的方式来实现数据备份,并且是以增量的方式,所以一般第一次做的话会花费较长的时间。为了做快照,那么就需要注册一个快照仓库,告诉ES我们的快照应该如何保存以及将快照保存到哪里.
ES的快照仓库支持如下几种形式:
- 共享的文件系统,如NAS
- Amazon S3
- HDFS (Hadoop Distributed File System)
- Azure Cloud
通常选择注册第一种形式。
任意选择一个节点,执行如下命令
$ curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup -d ' { "type": "fs", "settings": { "location": "/data/backups/elasticsearch" } } '
这样就注册了一个名为
my_backup的仓库,这里的
location需要注意,最好是设置一个每个节点都能访问并且有写权限的共享目录,如smb目录等(如果整个集群就一个节点那么设置为本地目录也无所谓)。 我自己在做的时候由于设置了本地目录
/data/backups/elasticsearch, 最后做出来发现快照被分别保存在集群每个节点的
/data/backups/elasticsearch目录下,并且一个节点保存了一些信息。最后做数据迁移的时候,不得不从每个节点将快照文件拷贝出来,然后合并到一起。
除了
location外,还有一些其他选项可以设置:
- compress 是否压缩
- max_snapshot_bytes_per_sec 制作快照的速度,默认20mb/s
- max_restore_bytes_per_sec 快照恢复的速度,默认20mb/s
更新仓库设置如下:
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/ { "type": "fs", "settings": { "location": "/data/backups/elasticsearch", "max_snapshot_bytes_per_sec" : "50mb", "max_restore_bytes_per_sec" : "50mb", "compress" : true } }
这里需要注意一点是,注册仓库用的是
PUT, 而更新仓库设置用的是
POST.
检查注册的仓库信息
$ curl -XGET http://192.168.0.1:9200/_snapshot/my_backup
开始备份
指定快照名称为
snapshot_20150812
$ curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812
执行上面的上面的命令会马上返回,并在后台执行备份操作, 如果想等到备份完成,可以加上参数
wait_for_completion=true
$ curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812?wait_for_completion=true
默认是备份所有的索引indices, 如果要指定index,可以
curl -XPUT http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812 { "indices": "index_1,index_2" }
这个备份过程需要的时间视数据量而定.
查看备份状态
整个备份过程中,可以通过如下命令查看备份进度
curl -XGET http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_status
主要由如下几种状态:
- INITIALIZING 集群状态检查,检查当前集群是否可以做快照,通常这个过程会非常快
- STARTED 正在转移数据到仓库
- FINALIZING 数据转移完成,正在转移元信息
- DONE 完成
- FAILED 备份失败
取消备份
curl -XDELETE http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812
恢复备份
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_restore
同备份一样,也可以设置wait_for_completion=true等待恢复结果
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_restore?wait_for_completion=true
默认情况下,是恢复所有的索引,我们也可以设置一些参数来指定恢复的索引,以及重命令恢复的索引,这样可以避免覆盖原有的数据.
curl -XPOST http://192.168.0.1:9200/_snapshot/my_backup/snapshot_20150812/_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.0.1:9200/_recovery/ # 查看索引restored_index_1的恢复进度
curl -XGET http://192.168.0.1:9200/_recovery/restored_index_1
取消恢复,只需要删除索引,即可取消恢复
curl -XDELETE http://192.168.0.1:9200/restored_index_1
备份快照迁移
如果需要将快照迁移到另一个集群.只需要将备份文件全部拷贝到要迁移的机器上, 然后再在新的集群上注册一个快照仓库,设置
location的位置为备份文件所在的地方,然后执行恢复备份的命令即可。
查看所有索引:
curl 'http://30.0.0.232:9200/_cat/indices?v' curl 'http://30.0.0.232:9200/_cat/indices?v' -s |less
查看单个索引:
curl 10.0.67.23:9200/_cat/indices/ad-2017.*
查看快照信息:
curl -XGET "10.0.67.21:9200/_snapshot/es_backup/snapshot-20171123-16"
恢复快照:
curl -XPOST "10.0.67.21:9200/_snapshot/es_backup/snapshot-20171123-16/_restore" -d'{ "indices": "ad-2017.11.19" }'
相关文章推荐
- 使用Logstash将MySql数据迁移到Elasticsearch中
- elasticsearch 重建索引 使用python迁移索引数据 reindex
- 【Oracle】使用dblink+minus方式迁移数据
- 【elasticsearch】使用工具迁移索引数据
- 使用热备份进行分时恢复----怎样通过归档逐步恢复以缩短数据迁移时间
- Hibernate获取数据方式与缓存使用
- 使用异步回调方式查询数据
- Oracle 快照及 dblink使用 (两台服务器数据同步)
- Oracle 快照及 dblink使用 (两台服务器数据同步)
- Asp使用XMLHTTP方式上实现数据抓取!
- Asp中使用Xml作为数据存储方式的新闻发布
- 在asp.net 2.0中使用SqlBulkCopy类迁移数据
- 在MDT2008的LTI模式中使用USMT迁移用户数据
- 在asp.net 2.0中使用SqlBulkCopy类迁移数据
- 如何使用CA/400批处理的方式传输数据
- 使用文件映射的方式进行共享数据中CreateFileMapping、MapViewOfFile函数参数说明
- Hibernate获取数据方式与缓存使用
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- Hibernate获取数据方式与缓存使用
- 使用 IBM DB2 Migration Toolkit 迁移数据