教程:迁移至 Amazon OpenSearch Service - 亚马逊 OpenSearch 服务

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

教程:迁移至 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),重新启动每个节点,添加 AWS 凭证,最后拍摄快照。此插件是持续使用或迁移大型集群的绝佳选择。

对于较小的集群,一次性方法是拍摄共享文件系统快照,然后使用 AWS 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. 安装 AWS CLI,然后运行 aws configure 以添加凭证。

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

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

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

创建域

虽然控制台是创建域的最简单方法,但在这种情况下,您已经打开了终端并安装了 AWS 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 存储桶的相同 AWS 区域,以及与您的快照兼容的 OpenSearch/Elasticsearch 版本。

重要

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

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

在 AWS Identity and Access Management (IAM) 控制台中,创建具有以下权限和信任关系的角色。创建角色时,选择 S3作为 AWS服务。将该角色命名为 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 凭证进行 AWS 身份验证。由于快照使用 Amazon S3(没有主用户的概念),因此必须使用 IAM 凭证向您的 OpenSearch Service 域注册快照存储库。

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

Postman interface showing Authorization settings for AWS API request with Signature type.
还原快照。
  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 控制面板。