前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Elasticsearch系列之五】通过snapshot迁移ES数据

【Elasticsearch系列之五】通过snapshot迁移ES数据

原创
作者头像
Vicwan
修改2020-04-15 16:40:20
6.3K0
修改2020-04-15 16:40:20
举报

1、Snapshot

1.1、适合场景

1) 迁移速度快,适用数据量大的场景;

2) 需占用源集群磁盘空间,或者借助于对象存储,实现友商ES到腾讯云ES,或自建ES到腾讯云ES的数据迁移。

1.2、快照注意事项

  • 1)快照是从正在运行的Elasticsearch集群中获取的备份。
  • 2)您可以创建单个索引或整个群集的快照,支持本地文件存储,以及远程第三方存储库存储(包括:S3,HDFS,Azure,Google Cloud Storage等)。
  • 3)快照是增量 创建的。这意味着,当创建索引快照时,Elasticsearch避免复制任何已存储在存储库中的数据作为同一索引的早期快照的一部分。因此,可以 非常频繁地为集群创建快照。
  • 4)如果您的集群启用了Elasticsearch安全功能,则在备份数据时,必须授权快照API调用。
  • 5)在升级之前备份数据时,请记住,如果快照中包含与升级版本不兼容的版本中创建的索引,则可能导致升级后将无法还原快照。
  • 6)兼容列表如下:在1.x中创建的索引快照可以恢复到2.x。在2.x中创建的索引快照可以恢复到5.x。 在5.x中创建的索引快照可以恢复到6.x。在6.x中创建的索引快照可以恢复到7.x。反例:无法将在1.x中创建的索引快照还原到5.x或6.x,无法将在2.x中创建的索引快照还原到6.x或7.x,以及无法将在5.X创建的索引快照还原到7.x。
  • 7)要保证还原的集群有足够的存储容量。

1.3、腾讯云ES备份到COS使用方式

snapshot api 是 Elasticsearch用于对数据进行备份和恢复的一组 api 接口,可以通过 snapshot api 进行跨集群的数据迁移,原理就是从源 ES 集群创建数据快照,然后在目标 ES 集群中进行恢复。Snapshot备份方式不需要在目标ES集群提前创建索引mapping和setting等信息。

1.4、具体步骤

1) 源 ES 集群中创建 repository

创建快照前必须先创建 repository 仓库,一个 repository 仓库可以包含多份快照文件,repository 主要有以下几种类型:

Ø fs:共享文件系统,将快照文件存放于文件系统中。

Ø url:指定文件系统的 URL 路径,支持协议:http、https、ftp、file、jar。

s3:AWS S3 对象存储,快照存放于 S3 中,以插件形式支持,安装插件 repository-s3(https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-s3.html)。

hdfs:快照存放于 hdfs 中,以插件形式支持,安装插件 repository-hdfs(https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html)。

cos:快照存放于腾讯云 COS 对象存储中,以插件形式支持,安装插件 elasticsearch-repository-cos(https://github.com/tencentyun/elasticsearch-repository-cos)。

从自建 ES 集群迁移至腾讯云 ES 集群,可直接使用 fs 类型仓库,但需要在 ES 配置文件 elasticsearch.yml 中设置仓库路径。

path.repo: ["/usr/local/services/test"]

然后调用 snapshot api 创建 repository,具体如下:

curl -XPUT http://172.16.0.39:9200/_snapshot/my_backup -H 'Content-Type: application/json' -d '
{
   "type": "fs",
   "settings": {
        "location": "/usr/local/services/test" 
        "compress": true
   }
}'

从其它云厂商的 ES 集群迁移至腾讯云 ES 集群,或腾讯云内部的 ES 集群迁移,可使用对应云厂商提供的仓库类型,例如 AWS 的 S3、阿里云的 OSS 和腾讯云的 COS 等。

curl -XPUT http://172.16.0.39:9200/_snapshot/my_s3_repository
{
  "type": "s3",
 "settings": {
   "bucket": "my_bucket_name",
   "region": "us-west"
 }
}

2) 源 ES 集群中创建 snapshot

调用 snapshot api 在创建好的仓库中创建快照。创建快照可以指定索引,也可以指定快照中包含的内容,具体的 api 接口参数可以查阅官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/modules-snapshots.html

Ø 备份所有索引

将 ES 集群内所有索引备份到my_backup仓库下,并命名为snapshot_1,这个命令会立刻返回,并在后台异步执行直到结束。如果希望创建快照命令阻塞执行,可以添加wait_for_completion参数。命令执行的时间与索引大小相关。

curl -XPUT http://172.16.0.39:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true

Ø 备份指定索引

可以在创建快照的时候指定要备份的索引。参数 indices 的值为多个索引的时候,需要用,隔开且不能有空格。

注意:在实际生产环境中,建议手动指定索引进行备份,因为源ES集群可能存在默认同名的索引,在执行索引恢复的时候会报错。

curl -XPUT http://172.16.0.39:9200/_snapshot/my_cos_backup/snapshot_2
{
"indices": "index_1,index_2"
}

3) 目标 ES 集群中创建 repository

目标 ES 集群中创建仓库和在源 ES 集群中创建仓库类似,用户可在腾讯云上创建 COS 对象 bucket,把仓库建在 COS 的某个 bucket 下。

4) 移动源 ES 集群 snapshot 至目标 ES 集群的仓库

把源 ES 集群创建好的 snapshot 上传至目标 ES 集群创建好的仓库中。

5) 从快照恢复

curl -XPUT http://172.16.0.20:9200/_snapshot/my_backup/snapshot_1/_restore

执行快照恢复命令会把把这个快照里的备份的所有索引都恢复到ES集群中。如果 snapshot_1 包括五个索引,这五个都会被恢复到我们集群里。

可以用附加的选项用来重命名索引。这个选项允许您通过模式匹配索引名称,然后通过恢复进程提供一个新名称。如果您想在不替换现有数据的前提下,恢复老数据来验证内容,或者做其他处理,这个选项很有用。让我们从快照里恢复单个索引并提供一个替换的名称:

curl -XPOST http://172.16.0.20:9200/_snapshot/my_cos_backup/snapshot_1/_restore
{
    "indices": "index_1",
    "rename_pattern": "index_(.+)",
    "rename_replacement": "restored_index_1"
}

Ø 只恢复 index_1 索引,忽略快照中存在的其余索引;

Ø 查找所提供的模式能匹配上的正在恢复的索引;

Ø 然后把它们重命名成替代的模式。

6) 查看快照恢复状态

通过执行_recovery命令,可以查看快照恢复的状态,监控快照恢复的进度。

这个 API 可以为您在恢复的指定索引单独调用:

curl -XGET http://172.16.0.20:9200/index_1/_recovery

这个命令会返回指定索引各分片的恢复状况:

{
    "sonested": {
        "shards": [
            {
                "id": 1,
                "type": "SNAPSHOT",
                "stage": "INDEX",
                "primary": true,
                "start_time_in_millis": 1525766148333,
                "total_time_in_millis": 8718,
                "source": {
                    "repository": "my_backup2",
                    "snapshot": "snapshot",
                    "version": "5.6.4",
                    "index": "sonested"
                },
                "target": {
                    "id": "TlzmxJHwSqyv4rhyQfRkow",
                    "host": "10.0.0.6",
                    "transport_address": "10.0.0.6:9300",
                    "ip": "10.0.0.6",
                    "name": "node-1"
                },
                "index": {
                    "size": {
                        "total_in_bytes": 1374967573,
                        "reused_in_bytes": 0,
                        "recovered_in_bytes": 160467084,
                        "percent": "11.7%"
                    },
                    "files": {
                        "total": 132,
                        "reused": 0,
                        "recovered": 20,
                        "percent": "15.2%"
                    },
                    "total_time_in_millis": 8716,
                    "source_throttle_time_in_millis": 0,
                    "target_throttle_time_in_millis": 0
                },
                "translog": {
                    "recovered": 0,
                    "total": 0,
                    "percent": "100.0%",
                    "total_on_start": 0,
                    "total_time_in_millis": 0
                },
                "verify_index": {
                    "check_index_time_in_millis": 0,
                    "total_time_in_millis": 0
                }
            },
            {
                "id": 0,
                "type": "SNAPSHOT",
                "stage": "INDEX",
                "primary": true,
                "start_time_in_millis": 1525766148296,
                "total_time_in_millis": 8748,
                "source": {
                    "repository": "my_backup2",
                    "snapshot": "snapshot",
                    "version": "5.6.4",
                    "index": "sonested"
                },
                "target": {
                    "id": "rOupcFi7Rn-kc2PzEoRMMQ",
                    "host": "10.0.0.15",
                    "transport_address": "10.0.0.15:9300",
                    "ip": "10.0.0.15",
                    "name": "node-3"
                },
                "index": {
                    "size": {
                        "total_in_bytes": 1362775831,
                        "reused_in_bytes": 0,
                        "recovered_in_bytes": 155162131,
                        "percent": "11.4%"
                    },
                    "files": {
                        "total": 125,
                        "reused": 0,
                        "recovered": 27,
                        "percent": "21.6%"
                    },
                    "total_time_in_millis": 8736,
                    "source_throttle_time_in_millis": 0,
                    "target_throttle_time_in_millis": 0
                },
                "translog": {
                    "recovered": 0,
                    "total": 0,
                    "percent": "100.0%",
                    "total_on_start": 0,
                    "total_time_in_millis": 0
                },
                "verify_index": {
                    "check_index_time_in_millis": 0,
                    "total_time_in_millis": 0
                }
            }
        ]
    }
}

Ø type 字段告诉您这个分片是在从一个快照恢复;

Ø source 描述了作为恢复来源的特定快照和仓库;

Ø percent 字段显示恢复的状态。

输出会列出所有目前正在经历恢复的索引,然后列出这些索引里的所有分片。每个分片里会有启动/停止时间、持续时间、恢复百分比、传输字节数等统计值。

7) 取消快照恢复

如果要停止对索引restored_index_3的快照恢复,可以执行以下命令(这个删除命令会停止恢复,同时删除所有已经恢复到集群里的数据):

DELETE /restored_index_3

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Snapshot
    • 1.1、适合场景
      • 1.2、快照注意事项
        • 1.3、腾讯云ES备份到COS使用方式
          • 1.4、具体步骤
          相关产品与服务
          Elasticsearch Service
          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档