迁移到 Amazon Elasticsearch Service - Amazon Elasticsearch Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

迁移到 Amazon Elasticsearch Service

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

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

  2. 创建一个 Amazon ES 域。

  3. 授予 Amazon ES 访问存储桶的权限,并授予您的用户账户使用快照的权限。

  4. 还原 Amazon ES 域上的快照。

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

拍摄并上传快照

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

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

拍摄快照并将其上传到 Amazon S3

  1. path.repo 设置添加到所有节点上的 elasticsearch.yml,然后重新启动每个节点。

    path.repo: ["/my/shared/directory/snapshots"]
  2. 注册快照存储库:

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

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

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

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

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

创建域

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

aws es create-elasticsearch-domain \ --domain-name migration-domain \ --elasticsearch-version 7.4 \ --elasticsearch-cluster-config InstanceType=c5.large.elasticsearch,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),请使用 Amazon ES 控制台。

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

重要

快照只能向前兼容,并且只能与一个主要版本兼容。例如,无法从 1.x 集群或 6.x 集群上的 2.x 集群还原快照,而只能从 2.x 或 5.x 集群还原快照。次要版本也很重要。您无法从 5.3.2 Amazon ES 域上自行管理的 5.3.3 集群还原快照。我们建议您选择快照支持的最新版本的 Elasticsearch。

提供权限

在 AWS Identity and Access Management (IAM) 控制台中,创建具有以下权限和信任关系的角色。将该角色命名为 AmazonESSnapshotRole,以便于查找。

权限

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

信任关系

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

然后,为您的个人 IAM 用户或角色(您之前用于配置 AWS CLI 的用户或角色)提供使用 AmazonESSnapshotRole 的权限。创建以下策略并将其附加到您的身份。

权限

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

然后使用您在创建 Amazon ES 域时指定的主用户凭证登录到 Kibana。您可以在 Amazon ES 控制台中找到 Kibana URL。其格式为 https://domain-endpoint/_plugin/kibana/

在 Kibana 中,选择 Security (安全)Role Mappings (角色映射)Add (添加)。对于 Role (角色),选择 manage_snapshots (管理快照)。然后在相应字段中为您的个人 IAM 用户或角色指定 ARN。在 Users (用户) 部分中输入用户 ARN。在 Backend roles (后端角色) 部分中输入角色 ARN。此步骤使用精细访问控制来授予您的身份使用快照的权限。

还原快照

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

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

如需还原快照

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

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

    速记

    GET _snapshot/migration-repository/_all

    curl

    curl -XGET -u master-user:master-user-password https://domain-endpoint/_snapshot/migration-repository/_all
  3. 还原快照。

    速记

    POST _snapshot/migration-repository/migration-snapshot/_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/migration-repository/migration-snapshot/_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

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