将Elasticsearch数据迁移至OpenStore智能混合存储

如果您需要将商业版或自建Elasticsearch集群中的数据迁移至日志增强版实例的OpenStore智能混合存储中,可以通过手动备份快照和恢复快照的方法来实现。本文介绍实现的具体操作。

前提条件

  • 已开通阿里云对象存储OSS,新建一个标准存储类型的Bucket,且Bucket的地域与Elasticsearch实例的地域保持一致。 具体操作,请参见开通OSS服务创建存储空间

  • 源端Elasticsearch集群状态正常。

操作步骤

说明

本文提供的代码均可以在阿里云Elasticsearch实例的Kibana控制台上执行。详细信息,请参见登录Kibana控制台

步骤一:准备环境

  1. 进入目标端Elasticsearch实例的Kibana控制台。

    具体操作,请参见登录Kibana控制台

  2. Dev ToolsConsole页签中输入创建索引的代码。

    PUT product_info
    {
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
      },
      "mappings": {
        "properties": {
            "productName":{"type":"text"},
            "annual_rate":{"type":"keyword"},
            "describe":{"type":"text"}
          }
      }
    }
  3. 写入数据。

    POST /product_info/_bulk?refresh=true
    {"index":{"_id": "1" }}
    {"productName":"理财产品A","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
    {"index":{"_id": "2" }}
    {"productName":"理财产品B","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
    {"index":{"_id": "3" }}
    {"productName":"理财产品C","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
    {"index":{"_id": "4" }}
    {"productName":"理财产品D","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}

步骤二:备份快照数据

  1. 修改索引Segment数。

    1. 将索引Force Merge为1个Segment。例如,对索引product_info进行操作。

      POST /product_info/_forcemerge?max_num_segments=1
    2. 检查索引的Segment数为1。

      GET _cat/segments/product_info?v
  2. 创建仓库。 在源端Elasticsearch实例中创建一个名称为my_backup的仓库。

    PUT _snapshot/my_backup
    {
      "type": "oss",
      "settings": {
            "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
            "access_key_id": "[your_access_key_id]",
            "secret_access_key": "[your_secret_access_key]",
            "bucket": "[your_bucket_name]",
            "compress": true,
            "chunk_size": "500mb",
            "base_path": "snapshot/"
      }
    }

    参数说明如下:

    参数

    说明

    endpoint

    OSS Bucket的内网访问域名。获取方式,请参见访问域名和数据中心

    access_key_id

    用于标识用户。获取方式,请参见获取AccessKey

    secret_access_key

    用于验证用户的密钥。获取方式,请参见获取AccessKey

    bucket

    OSS Bucket的名称。获取方式,请参见控制台创建存储空间

    compress

    打开快照文件的压缩功能:

    • true:打开压缩功能,仅应用于元数据文件(索引映射和设置)。

    • false(默认值):不打开压缩功能,数据文件未压缩。

    chunk_size

    当您上传的数据非常大时,配置此参数可以限制快照过程中分块的大小。超过这个大小,数据将会被分块上传到OSS中。

    base_path

    仓库的起始位置,默认为根目录。可以指定具体快照的存放目录,例如snapshot/myindex/。

  3. 创建快照。

    将Force Merge后的product_info索引创建快照。例如:快照名为snapshot_1

    PUT _snapshot/my_backup/snapshot_1
    {    "indices": "product_info"}

    查看快照进度,确认快照创建成功。例如,查看快照名为snapshot_1的快照状态。

    GET _snapshot/my_backup/snapshot_1

步骤三:恢复快照数据到Openstore

  1. 进入目标端Elasticsearch实例的Kibana控制台。

    具体操作,请参见登录Kibana控制台

  2. 创建仓库。

    在目标端Elasticsearch实例中创建一个名称为my_backup的仓库。

    PUT _snapshot/my_restore
    {
      "type": "oss",
      "settings": {
            "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
            "access_key_id": "[your_access_key_id]",
            "secret_access_key": "[your_secret_access_key]",
            "bucket": "[your_bucket_name]",
            "compress": true,
            "chunk_size": "500mb",
            "base_path": "snapshot/"
      }
    }
  3. 恢复快照。

    product_info索引的快照恢复到目标端Elasticsearch实例中。

    说明
    • 如果源端实例是冷热分离,恢复的索引需要去除box type,否则索引无法分配。

    • 如果集群中存在与待恢复索引同名的索引,需要提前删除或者关闭该同名索引,否则恢复会失败。

    • 如果跨地域恢复集群快照,需要先将原地域OSS中的快照数据迁移到目标地域OSS中,再恢复到目标地域的Elasticsearch集群中。OSS间迁移的具体操作,请参见阿里云OSS之间迁移教程

    POST _snapshot/my_restore/snapshot_1/_restore
    {
      "indices": "product_info",
      "index_settings": {
        "index.routing.allocation.require.box_type": null,
        "index": {
          "number_of_replicas": 1,
          "replication": {
            "type": "segment"
          },
          "codec": "OpenIndex",
          "allocation": {
            "existing_shards_allocator": "open_store_allocator"
          },
          "refresh_interval": "1s",
          "store": {
            "type": "openstore",
            "openstore": {
              "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
              "ram_name": "snapshot-role-133******",
              "type": "hybrid",
              "bucket_name": "openstore-133******-es-cn-5yd******"
            }
          }
        }
      }
    }

    endpoint、ram_name和bucket_name是OpenStore集群中的默认参数,可以通过以下命令获取这些参数的信息:

    GET _component_template/component-hybrid-openstore-index-template

补充方案

如果源端和目标端实例满足跨集群OSS仓库的前提条件,您也可以通过设置跨集群OSS仓库将源端Elasticsearch集群中的数据迁移到OpenStore智能混合存储中。

操作需要注意: