【最佳实践】如何从AWS中的Elasticsearch索引平滑迁移至阿里云

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 阿里云的易用、便捷、稳定、以及低门槛深受广大开发者欢迎,本次实践是针对希望将Elasticsearch索引迁移至阿里云的客户所准备。本次Elasticsearch索引迁移方案参考架构图如下:

本页目录

  • ES索引迁移方案介绍
  • 前提条件
  • 注册手动快照存储库
  • 首次快照和恢复
  • 末次快照和恢复
  • 总结

点击 订阅《阿里云Elasticsearch技术交流期刊》,获取最新Elasticsearch技术资讯! **

在国内的云服务市场,阿里云具有易用、便捷、稳定、以及低门槛的特性,并深受广大开发者欢迎,本次实践是针对希望将Elasticsearch索引从AWS迁移至阿里云的客户所准备,Elasticsearch索引迁移方案参考架构图如下:

_

ES索引迁移方案介绍

概念相关

  • Elasticsearch:一个分布式的RESTful风格的搜索与分析引擎,能够解决不断涌现出的各种用例。作为Elastic Stack的核心,Elasticsearch可以集中存储您的数据,帮助您发现意料之中与意料之外的情况。
  • Kibana:您可以使用Kibana对您的Elasticsearch数据进行可视化并导航弹性堆栈。
  • 亚马逊Elasticsearch服务(Amazon Elasticsearch Service): 一项完全托管的服务,可以提供各种易于使用的Elasticsearch API 和实时分析功能,还可以实现生产工作负载需要的可用性、可扩展性和安全性。您可以使用AmazonElasticsearch Service轻松部署、保护、操作和扩展Elasticsearch,以便进行日志分析、全文搜索和应用程序监控等工作。
  • 阿里云Elasticsearch服务(Alibaba Elasticsearch Service): 该服务在国际站还未上线,本文涉及的操作主要在阿里云Elasticsearch服务中国站上进行。
  • 快照和恢复(Snapshotand Restore):您可以使用快照和恢复功能将各个索引或整个集群的快照创建到远程存储库(如共享文件系统,S3或HDFS)中。这些快照可以相对快速恢复,因此非常适合备份。但这些快照只能恢复到可以读取索引的Elasticsearch版本:
  1. 在5.x中创建的索引快照可以恢复到6.x。
  2. 在2.x中创建的索引快照可以恢复到5.x。
  3. 在1.x中创建的索引快照可以恢复到2.x。

说明:

在1.x中创建的索引快照不能恢复到5.x或6.x。在2.x中创建的索引快照也不能恢复到6.x。快照是增量的,可以包含在多个ES版本中创建的索引。如果一个快照中的索引是在不兼容的ES版本中创建的,则该快照不能恢复。*

解决方案概述

你可以通过以下步骤来迁移Elasticsearch索引

1.创建基线索引
1.1、创建一个快照存储库
1.2、为要迁移的索引创建第一个完整的快照。该快照会自动存储在步骤一中创建的AWSS3存储空间中。
1.3、在阿里云侧创建一个OSS存储空间,并将其注册到阿里云ES实例的快照存储库中。
1.4、使用OSSImport工具AWS S3存储空间中的数据提取到阿里云OSS存储空间中。
1.5、将此完整快照恢复到阿里云ES实例。

2.定期处理增量快照
2.1、重复以上步骤处理增量快照并进行恢复。

3.确定最终快照,进行服务切换
3.1、停止可能会修改索引数据的服务。
3.2、创建AWS ES实例的最终增量快照。
3.3、将最终增量快照迁移并恢复到阿里云ES实例。
3.4、进行服务切换,查看阿里云ES实例。

前提条件

Elasticsearch服务

  • AWS ES的版本号必须为5.5.2,区域为新加坡。
  • 阿里云ES的版本号必须为5.5.3,区域为杭州。
  • 示例的索引名称为movies。

在AWS中创建手动快照的前提条件

  • Amazon ES每天会自动创建一个域中主要索引分片的快照,并将这些快照存储在预配置的AmazonS3存储空间中。这些快照会保留14天,您无需额外付费。此外,您可以使用这些快照来恢复域。
  • 但是您不能使用自动快照迁移到新域。自动快照只能从指定的域中读取。如果要迁移,您必须使用存储在自己的存储库(S3存储空间)中的手动快照。手动快照将收取标准S3费用。
  • 您需要使用IAM和Amazon S3才能手动创建和恢复索引快照。创建快照之前,请确保您已满足以下条件。
前提条件 描述
创建S3存储空间 为您的 Amazon ES域存储手动快照。
创建IAM角色 为Amazon Elasticsearch服务授权。在给该角色添加信任关系时,须在Principal语句中指定Amazon Elasticsearch 服务。使用Amazon ES注册您的快照存储库时也需要该IAM角色。只有具有该角色访问权限的IAM用户才可以注册快照存储库。
创建IAM策略 指定Amazon S3可以对S3存储空间执行的操作。该策略须添加给为Amazon Elasticsearch 服务授权的IAM角色。您需要在该策略的Resource语句中指定S3存储空间。
  • 创建S3存储空间
    您需要一个S3存储空间来存储手动快照,并记下其Amazon资源名称(ARN)。该ARN在以下场景中会用到:

1.为IAM角色添加的IAM策略中的Resource语句。
2.用于注册快照存储库的Python客户端。

S3存储空间的ARN示例:
arn:aws:s3:::eric-es-index-backups

  • 创建IAM角色
    确保您已创建一个IAM角色,且在其信任关系中的Service语句中指定该角色的服务类型为Amazon Elasticsearch服务(es.amazonaws.com),如下所示:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "es.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

您可以在AWS IAM控制台查看信任关系的详细信息。

image
image
在IAM控制台创建AWS服务角色时,Amazon ES不包含在Select role type下拉列表中。 但是,您可以先选择Amazon EC2,按照提示完成角色创建,然后将ec2.amazonaws.com修改为 es.amazonaws.com。

  • 创建IAM策略
    您需要将IAM策略添加给IAM角色。该策略指定用于存储Amazon ES域的手动快照的S3存储空间。以下示例指定了存储空间eric-es-index-backups的ARN:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::eric-es-index-backups"
            ]
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::eric-es-index-backups/*"
            ]
        }
    ]
}

将策略内容复制到编辑策略区域:
image
您可以通过查看Policies > Summary来检查策略是否正确。
image
为IAM角色添加IAM策略
image

注册手动快照存储库

您必须通过亚马逊Elasticsearch服务(Amazon Elasticsearch Service)注册快照存储库,然后才能拍摄手动索引快照。此一次性操作需要为IAM角色的信任关系中指定的用户或角色中的一位使用凭证签发您的AWS请求,如上文在AWS中创建手动快照的前提条件中所述

不能使用curl执行此操作,因为它不支持AWS请求签名。请改用示例Python客户端注册您的快照存储库。

1.修改示例Python客户端
下载示例Python客户端文件,然后修改文件中标黄的值,填入实际匹配的值。完成修改后,复制示例Python客户端文件中的内容至Python文件中,并命名为snapshot.py。

示例Python客户端:

变量名 描述
地域 您创建快照存储库所在的AWS地域。
主机 您Amazon ES域名的访问地址。
aws_access_key_id IAM凭证
aws_secret_access_key IAM凭证
路径 快照存储库的名字
data:bucket;region;role_arn 必须包含您在上述在AWS中创建手动快照的前提条件中为IAM角色创建的S3存储空间的名字和ARN。要为快照存储库启用使用S3托管密钥的服务器端加密,请将"server_side_encryption":true添加到settingsJSON - imporant如果S3存储空间在地域us-east-1,您需要使用"endpoint":"s3.amazonaws.com"替代"region":"us-east-1"

2.安装Amazon Web Services Library boto-2.48.0
此示例Python客户端要求您在注册快照存储库的计算机上安装boto软件包的2.x版本。

# wget https://pypi.python.org/packages/66/e7/fe1db6a5ed53831b53b8a6695a8f134a58833cadb5f2740802bc3730ac15/boto-2.48.0.tar.gz#md5=ce4589dd9c1d7f5d347363223ae1b970 
# tar zxvf boto-2.48.0.tar.gz
# cd boto-2.48.0
# python setup.py install

3.执行Python客户端以注册快照存储库

# pyth
on snapshot.py

注册快照存储库通过Kibana > Dev Tools查看请求结果:
GET _snapshot

image

首次快照恢复

1.在AWS ES上手动拍摄快照。
以下命令均可通过Kibana > Dev Tools执行,也可以从Linux或者Mac OSX命令行中使用curl来执行。

  • 仅为在eric-snapshot-repository存储库中的movies索引拍摄名为snapshot_movies_1的快照。
PUT _snapshot/eric-snapshot-repository/snapshot_movies_1
{
"indexes": "movies"
}
  • 查看快照状态
GET _snapshot/ eric-snapshot-repository/snapshot_movies_1

image

  • 查看AWS S3控制台中的快照文件。
    image

2.从AWS S3提取快照数据至阿里云OSS
此步操作,您需要从AWS S3存储空间提取快照数据至阿里云的对象存储OSS(Object Storage Service)中。具体详情,请参见从AWS S3上的应用无缝切换至OSS
数据提取后,在OSS控制台中查看存储的快照数据。
image

3.还原快照至阿里云ES实例
创建快照存储库
Kibana > Dev Tools中执行以下请求来创建一个同名的快照存储库。按照参数说明填下实际数值。


PUT _snapshot/eric-snapshot-repository
{
"type": "oss",
"settings": {
            "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",  
            "access_key_id": "Put your AccessKey id here.",
            "secret_access_key": "Put your secret AccessKey here.",
            "bucket": "eric-oss-aws-es-snapshot-s3",
            "compress": true
      }
}

image
创建好快照存储库后,查看在AWS ES手动快照步骤中部署名为snapshot_movies_1的快照状态。

GET _snapshot/eric-snapshot-repository/snapshot_movies_1

说明 请记录此快照操作的起始时间和结束时间:当您用阿里云OssImport迁移工具迁移增量快照数据时,此记录会被用到。如:

“start_time_in_millis”: 1519786844591
“end_time_in_millis”: 1519786846236

image

4.恢复快照

在 Kibana > Dev Tools中执行以下请求。


POST _snapshot/eric-snapshot-repository/snapshot_movies_1/_restore
{
    "indexes": "movies"
}
GET movies/_recovery

image

在Kibana > Dev Tools上查看movies索引的可用性。您可以看到在movies索引中存在三条记录,即为AWS ES实例中的记录数。

image

末次快照和恢复

1.AWS ES movies索引中创建实例数据
上步中,在movies索引中已存在三条记录,您还需插入另两条记录。
image

使用请求 GET movies/_count,查看引数。

image

2.手动拍摄另一个快照

请参见上述的在AWS ES上手动拍摄快照步骤,并查看快照状态。
image
查看S3存储空间中列出的文件。
image
如果您查看索引文件夹,也可找出不同。

3.从AWS S3提取增量快照数据至阿里云OSS

您可以使用OSSImport工具从AWS S3迁移数据至阿里云OSS。目前有两个快照文件存储在S3存储空间里,可以通过修改在配置文件local_job.cfg中的isSkipExistFile值来迁移新的文件。

已归档 含义 描述
isSkipExistFile 布尔值,数据迁移期间是否跳过现有对象 如果设置为true,则根据size和LastModifiedTime跳过对象。如果设置为false,则覆盖现有对象。 默认值为false。 当jobType设置为audit时,此选项无效。

迁移工作完成后,您可以看到新的文件已被迁移至OSS中。

阿里云的OSS存储空间:
image

AWS S3的存储空间:
image

4.恢复增量快照

可以参照恢复快照中的步骤恢复增量快照。但是首先需要关闭movies索引,然后再恢复快照。快照恢复后可以再次打开movies索引。


POST /movies/_close
GET movies/_stats
POST _snapshot/eric-snapshot-repository/snapshot_movies_2/_restore
{
    "indexes": "movies"
}
POST /movies/_open

恢复快照步骤完成后,可以看到movies索引中文档数5和AWS ES实例中的数量相同。
image

总结

可以通过快照和恢复的方法将AWS Elasticsearch的服务数据迁移至阿里云的Elasticsearch服务中。

此方案要求首先关闭AWS ES实例以防止迁移期间的写入和请求。

参考资料:

https://www.elastic.co/products/elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html
https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains-snapshots.html
从AWS S3上的应用无缝切换至OSS
https://github.com/zhichen/elasticsearch-repository-oss/wiki/OSS%E5%BF%AB%E7%85%A7%E8%BF%81%E7%A7%BB?spm=a2c4g.11186623.2.3.2acd85
说明及配置

扫码加入我们

加入《Elasticsearch中文技术社区》,与更多开发者探讨交流


dingQR

订阅《阿里云Elasticsearch技术交流期刊》每月定期为大家推送相关干货

dingQR

2019年阿里云云栖大会上,Elasticsearch背后的商业公司Elastic与阿里云Elasticsearch确定战略合作升级,在100%兼容开源的基础上,完成了ELK的完整生态云上闭环,欢迎开通使用。
点击了解更多产品信息

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
22天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
1月前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
|
1月前
|
自然语言处理 算法 关系型数据库
阿里云PAI大模型RAG对话系统最佳实践
本文为大模型RAG对话系统最佳实践,旨在指引AI开发人员如何有效地结合LLM大语言模型的推理能力和外部知识库检索增强技术,从而显著提升对话系统的性能,使其能更加灵活地返回用户查询的内容。适用于问答、摘要生成和其他依赖外部知识的自然语言处理任务。通过该实践,您可以掌握构建一个大模型RAG对话系统的完整开发链路。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
|
3月前
|
存储 机器学习/深度学习 人工智能
基于Megatron-Core的稀疏大模型训练工具:阿里云MoE大模型最佳实践
随着大模型技术的不断发展,模型结构和参数量级快速演化。大模型技术的应用层出不穷。大模型展现惊人效果,但训练和推理成本高,一直是巨大挑战。模型稀疏化能降低计算和存储消耗。近期以Mixtral为代表的MoE(多专家混合)大模型证明了稀疏MoE技术能大幅降低计算量、提升推理速度,模型效果甚至超过同规模稠密模型。阿里云PAI和NVIDIA团队深入合作,基于Megatron-Core MoE框架,解决了MoE大模型训练落地时会遇到的可拓展性、易用性、功能性以及收敛精度等核心问题,在下游任务上取得了很好的模型效果。
|
3月前
|
人工智能 监控 算法
阿里云向量检索服务最佳实践测评
随着大数据和人工智能的快速发展,向量检索技术在各个领域的应用越来越广泛。阿里云作为国内领先的云计算服务提供商,也推出了自己的向量检索服务。本文将对阿里云的向量检索服务进行最佳实践测评,探讨其在语义检索、知识库搭建、AI多模态搜索等方面的应用,并与其它向量检索工具进行比较。
1212 4
|
3月前
|
机器学习/深度学习 人工智能 物联网
快速玩转 Mixtral 8x7B MOE大模型,阿里云机器学习 PAI 推出最佳实践
本文介绍如何在PAI平台针对Mixtral 8x7B大模型的微调和推理服务的最佳实践,助力AI开发者快速开箱。以下我们将分别展示具体使用步骤。
|
4月前
电子好书发您分享《阿里云可观测最佳实践》
电子好书发您分享《阿里云可观测最佳实践》
27 1
|
4月前
|
弹性计算 监控 关系型数据库
阿里云ECS e实例最佳实践测评:搭建云上博客
阿里云ECS e实例最佳实践测评:搭建云上博客
56089 2
|
4月前
电子好书发您分享《阿里云可观测最佳实践》
电子好书发您分享《阿里云可观测最佳实践》
21 1

相关产品

  • 检索分析服务 Elasticsearch版