文档

将Elasticsearch数据迁移至OpenStore冷热分离存储

更新时间:

通过快照备份与恢复命令,您可以实现手动备份阿里云Elasticsearch商业版实例或自建Elasticsearch数据至OSS仓库,并将数据恢复到阿里云Elasticsearch日志增强版实例的OpenStore冷热分离存储中。本文介绍如何手动将Elasticsearch数据迁移通过OSS快照迁移至阿里云Elasticsearch日志增强版实例的OpenStore冷热分离存储中。

背景信息

Elasticsearch数据备份与恢复依赖于elasticsearch-repository-oss插件,阿里云Elasticsearch实例默认已安装该插件且不可卸载。关于该插件的详细信息,请参见elasticsearch-repository-oss

前提条件

  • 已开通对象存储服务OSS(Object Storage Service),并新建一个Bucket。具体操作,请参见开通OSS服务创建存储空间

    重要

    请创建标准存储类型的Bucket(不支持归档存储类型),且Bucket的地域与Elasticsearch实例的地域保持一致。

  • 确保集群状态正常。

  • 已创建阿里云Elasticsearch日志增强版实例。

注意事项

  • 快照仅保存索引数据,不保存Elasticsearch实例自身的监控数据(例如以.monitoring.security_audit为前缀的索引)、元数据、Translog、实例配置数据、Elasticsearch软件包、自带和自定义的插件、Elasticsearch日志等。

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

备份快照数据

创建仓库

在非日志增强版的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的名称,需要一个已经存在的Bucket。获取方式,请参见控制台创建存储空间

compress

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

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

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

chunk_size

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

base_path

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

修改索引segment数

OpenStore场景中要求索引segment数必须为1,否则会降低存储在OpenStore中的索引的查询效率,因此将第三方Elasticsearch数据恢复到OpenStore前,需要先手动将segment设置为1。

  • 查看索引的segment数

    GET _cat/segments/test_index?v
  • 修改索引的segment数

    POST test_index/_forcemerge?max_num_segments=1

创建快照

在原Elasticsearch集群中为索引创建快照mig,如下示例:

PUT _snapshot/my_backup/mig
{
  "indices": "test_index"
}

查看快照信息

查看mig的快照信息:

GET _snapshot/my_backup/mig

预期结果如下:

{
  "snapshots" : [
    {
      "snapshot" : "mig",
      "uuid" : "OJktul9VSteF5XsyAV****",
      "version_id" : 7100099,
      "version" : "7.10.0",
      "indices" : [
        "test_index"
      ],
      "data_streams" : [ ],
      "include_global_state" : true,
      "state" : "SUCCESS",
      "start_time" : "2022-11-18T03:54:55.618Z",
      "start_time_in_millis" : 1668743695618,
      "end_time" : "2022-11-18T03:54:56.418Z",
      "end_time_in_millis" : 1668743696418,
      "duration_in_millis" : 800,
      "failures" : [ ],
      "shards" : {
        "total" : 1,
        "failed" : 0,
        "successful" : 1
      }
    }
  ]
}

如果您需要查看更详细的快照信息,可以通过_status接口查询。

GET _snapshot/my_backup/mig/_status

配置索引生命周期恢复数据到OpenStore

在日志增强版实例中创建仓库

创建一个名称为my_restore的仓库。

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/"
  }
}

从快照恢复

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

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

POST _snapshot/my_restore/mig/_restore
{
  "indices": "test_index",
  "ignore_index_settings": [
    "index.apack.cube.following_index"
  ]
}

查看快照恢复信息

您可以通过_recovery API来监控快照恢复的状态、进度等信息。

GET test_index/_recovery

预期结果如下:

{
  "test_index" : {
    "shards" : [
      {
        "id" : 0,
        "type" : "SNAPSHOT",
        "stage" : "DONE",
        "primary" : true,
        "start_time_in_millis" : 1671518459171,
        "stop_time_in_millis" : 1671518460293,
        "total_time_in_millis" : 1122,
        "source" : {
          "repository" : "my_restore",
          "snapshot" : "mig",
          "version" : "7.10.0",
          "index" : "test_index",
          "restoreUUID" : "r8uTcVsDRkiL4823eB****"
        },
        "target" : {
          "id" : "zENpIY56SUSRSpfhDNiuGw",
          "host" : "172.31.**.**",
          "transport_address" : "172.31.**.**:9300",
          "ip" : "172.31.**.**",
          "name" : "es-cn-*****"
        },
        "index" : {
          "size" : {
            "total_in_bytes" : 2980666,
            "reused_in_bytes" : 0,
            "recovered_in_bytes" : 2980666,
            "percent" : "100.0%"
          },
          "files" : {
            "total" : 47,
            "reused" : 0,
            "recovered" : 47,
            "percent" : "100.0%"
          },
          "total_time_in_millis" : 1092,
          "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" : 18
        },
        "verify_index" : {
          "check_index_time_in_millis" : 0,
          "total_time_in_millis" : 0
        }
      }
    ]
  }
}

部分参数说明如下。

参数

说明

type

恢复的类型。SNAPSHOT表示这个分片是在从一个快照恢复。

source

待恢复的快照和仓库。

percent

恢复的进度。94.5%表示对应分片已经恢复了94.5%的数据。

查看恢复索引数据

查看恢复索引的数据,确认数据一致。

GET test_index/_search
{
  "query": {
    "match": {
      "_id": "1000"
    }
  }
}

配置索引的生命周期

配置索引的生命周期,并配置别名。

PUT test_index/_settings
{
  "index.lifecycle.name" : "openstore_default_ilm_policy"
}

openstore_default_ilm_policy配置如下。

{
  "openstore_default_ilm_policy" : {
    "version" : 2,
    "modified_date" : "2022-12-15T08:26:08.384Z",
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0s",
          "actions" : { }
        },
        "cold" : {
          "min_age" : "1h",
          "actions" : {
            "openstore" : {
              "openstore_repository" : "aliyun_auto_snapshot",
              "force_merge_index" : true,
              "user_id" : "199******",
              "region_id" : "cn-hangzhou",
              "instance_id" : "es-cn-*****",
              "force_merge_segment_number" : 1
            },
            "set_priority" : {
              "priority" : 50
            }
          }
        }
      }
    }
  }
}

等待生命周期生效后,查看数据是否写入到OpenStore中。查看OpenStore索引

常见问题

Q:搜索存储在OpenStore的索引数据,为什么耗时很长?

A:阿里云Elasticsearch日志增强版在数据写入过程中会自动将索引segment merge为1,调高搜索效率。如果是第三方数据直接存储进OpenStore,在数据存储进OpenStore前,需要业务侧手工将索引segment forcemerge为1,否则查询耗时会增加。

    • 本页导读 (1)
    文档反馈