教程:迁移至 Amazon OpenSearch Service - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:迁移至 Amazon OpenSearch Service

要从自行管理的 OpenSearch 集群或遗留的 Elasticsearch 集群迁移到 Amazon OpenSearch Service,的一种常用的方式是使用索引快照。总体而言,此过程包括以下步骤:

  1. 拍摄现有集群的快照,然后将快照上载到 Amazon S3 存储桶。

  2. 创建 OpenSearch Service 域。

  3. 授予 OpenSearch Service 访问存储桶的权限,并确保您有权限使用快照。

  4. 恢复 OpeSearch Service 域上的快照。

此演练提供了更详细的步骤和替代选项(如果适用)。

拍摄并上载快照

尽管可以使用 repository-s3 插件直接将快照生成到 S3,但必须在每个节点上安装此插件,调整 opensearch.yml(如果使用的是 Elasticsearch 集群,则需要调整 elasticsearch.yml),重新启动每个节点,添加 Amazon 凭证,最后拍摄快照。此插件是持续使用或迁移大型集群的绝佳选择。

对于较小的集群,一次性方法是拍摄共享文件系统快照,然后使用 Amazon CLI 将其上传到 S3。如果您已有快照,请跳至步骤 4。

拍摄快照并将其上载到 Amazon S3
  1. path.repo 设置添加到所有节点上的 opensearch.yml(或 Elasticsearch.yml),然后重新启动每个节点。

    path.repo: ["/my/shared/directory/snapshots"]
  2. 注册快照存储库,这是您拍摄快照之前所必需的。存储库只是一个存储位置:共享文件系统、Amazon S3、Hadoop Distributed File System (HDFS) 等。在这种情况下,我们将使用共享文件系统(“fs”):

    PUT _snapshot/my-snapshot-repo-name { "type": "fs", "settings": { "location": "/my/shared/directory/snapshots" } }
  3. 拍摄快照:

    PUT _snapshot/my-snapshot-repo-name/my-snapshot-name { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }
  4. 安装 Amazon CLI,然后运行 aws configure 以添加凭证。

  5. 导航到快照目录。然后运行以下命令以创建新的 S3 存储桶,并将快照目录的内容上传到该存储桶:

    aws s3 mb s3://bucket-name --region us-west-2 aws s3 sync . s3://bucket-name --sse AES256

    此操作可能需要一些时间,具体取决于快照大小和互联网连接速度。

创建域

虽然控制台是创建域的最简单方法,但在这种情况下,您已经打开了终端并安装了 Amazon CLI。修改以下命令以创建符合您需要的域:

aws opensearch create-domain \ --domain-name migration-domain \ --engine-version OpenSearch_1.0 \ --cluster-config InstanceType=c5.large.search,InstanceCount=2 \ --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 \ --node-to-node-encryption-options Enabled=true \ --encryption-at-rest-options Enabled=true \ --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \ --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions='{MasterUserName=master-user,MasterUserPassword=master-user-password}' \ --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["*"]},"Action":["es:ESHttp*"],"Resource":"arn:aws:es:us-west-2:123456789012:domain/migration-domain/*"}]}' \ --region us-west-2

如果不修改,此命令会创建一个具有两个数据节点的可访问互联网的域,每个节点都有 100 GiB 的存储。它还可以通过 HTTP 基本身份验证和所有加密设置实现精细访问控制。如果需要更高级的安全配置(如 VPC),请使用 OpenSearch Service 控制台。

在发布命令之前,请更改域名、主用户凭证和账号。指定与您用于 S3 存储桶的相同 Amazon Web Services 区域,以及与您的快照兼容的 OpenSearch/Elasticsearch 版本。

重要

快照只能向前兼容,并且只能与一个主要版本兼容。例如,您无法从 Elasticsearch 7.x 集群上的 OpenSearch 1.x 集群还原快照,只能从 OpenSearch 1.x 或 2.x 集群还原快照。次要版本也很重要。您无法从 5.3.2 OpenSearch Service 域上自行托管的 5.3.3 集群还原快照。我们建议您选择快照支持的最新版本的 OpenSearch 或 Elasticsearch。有关兼容版本的表格,请参阅使用快照迁移数据

提供权限以访问 S3 存储桶。

在 Amazon Identity and Access Management (IAM) 控制台中,创建具有以下权限和信任关系的角色。创建角色时,选择 S3作为 Amazon服务。将该角色命名为 OpenSearchSnapshotRole,以便于查找。

权限

{ "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name/*" ] } ] }

信任关系

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

然后向您的个人 IAM 角色授予权限以代入 OpenSearchSnapshotRole。创建以下策略并将其附加到您的身份。

权限

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole" } ] }

映射 OpenSearch 控制面板中的快照角色(如果使用精细访问控制)

如果启用了细粒度访问权限,即使您将 HTTP 基本身份验证用于所有其他目的,也需要将 manage_snapshots 角色映射到您的 IAM 角色,以便使用快照。

授予您的身份使用快照的权限
  1. 然后使用您在创建 OpenSearch Service 域时指定的主用户凭证录入到控制面板。您可以在 OpenSearch Service 控制台中找到控制面板 URL。其格式为 https://domain-endpoint/_dashboards/

  2. 从主菜单中选择安全角色,然后选择 manage_snapshots 角色。

  3. 选择映射的用户管理映射

  4. 在相应字段中添加个人 IAM 角色的域 ARN。ARN 必须采用以下格式之一:

    arn:aws:iam::123456789123:user/user-name
    arn:aws:iam::123456789123:role/role-name
  5. 选择 Map(映射)并确认在 Mapped users(映射的用户)下显示的角色。

还原快照。

此时,可以通过两种方式访问 OpenSearch Service 域:使用您的主用户凭证进行 HTTP 基本身份验证,或者使用 IAM 凭证进行 Amazon 身份验证。由于快照使用 Amazon S3(没有主用户的概念),因此必须使用 IAM 凭证向您的 OpenSearch Service 域注册快照存储库。

大多数编程语言都有库来协助对请求进行签名,但更简单的方法是使用像 Postman 这样的工具,并将您的 IAM 凭证放入授权部分中。

还原快照。
  1. 无论您选择如何对请求进行签名,第一步都是注册存储库:

    PUT _snapshot/my-snapshot-repo-name { "type": "s3", "settings": { "bucket": "bucket-name", "region": "us-west-2", "role_arn": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole" } }
  2. 然后在存储库中列出快照,并找到要还原的快照。此时,您可以继续使用 Postman,也可以切换到像 curl 这样的工具。

    速记

    GET _snapshot/my-snapshot-repo-name/_all

    curl

    curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/my-snapshot-repo-name/_all
  3. 还原快照。

    速记

    POST _snapshot/my-snapshot-repo-name/my-snapshot-name/_restore { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }

    curl

    curl -XPOST -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/my-snapshot-repo-name/my-snapshot-name/_restore \ -H 'Content-Type: application/json' \ -d '{"indices":"migration-index1,migration-index2,other-indices-*","include_global_state":false}'
  4. 最后,验证索引是否已按预期还原:

    速记

    GET _cat/indices?v

    curl

    curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_cat/indices?v

此时,迁移已完成。您可以将客户端配置为使用新的 OpenSearch Service 端点,调整域大小以适应您的工作负载,检查索引的分片计数,切换到 IAM 主用户,或开始构建 OpenSearch 控制面板。