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

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

教程:迁移到亚马逊 OpenSearch 服务

索引快照是从自行管理 OpenSearch 或旧版 Elasticsearch 集群迁移到亚马逊服务的常用方式。 OpenSearch 总体而言,此过程包括以下步骤:

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

  2. 创建 OpenSearch 服务域。

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

  4. 在 OpenSearch 服务域上恢复快照。

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

拍摄并上载快照

尽管您可以使用 rep ository-s3 插件将快照直接拍摄到 S3,但您必须在每个节点上安装该插件,进行调整opensearch.yml(或者elasticsearch.yml如果使用 Elasticsearch 集群),重启每个节点,添加您的 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 服务控制台。

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

重要

快照只能向前兼容,并且只能与一个主要版本兼容。例如,您无法从 OpenSearch 1 恢复快照。 Elasticsearch 上的 x 集群 7. x 个集群,只有一个 OpenSearch 1。 x 或 2。 x 集群。次要版本也很重要。您无法从 5.3.2 OpenSearch 服务域上自行管理的 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 服务域时指定的主用户凭据登录控制面板。您可以在 OpenSearch 服务控制台中找到控制面板 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 服务域:使用主用户证书进行 HTTP 基本身份验证或使用 IAM 凭证进行 Amazon 身份验证。由于快照使用没有主用户概念的 Amazon S3,因此您必须使用您的 IAM 证书在 OpenSearch 服务域中注册快照存储库。

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

Postman interface showing Authorization settings for Amazon 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 服务终端节点,调整域大小以适应您的工作负载,检查索引的分片数,切换到 IAM 主用户,或者开始在控制面板中 OpenSearch 构建可视化效果。