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

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

迁移到 Amazon Elasticsearch Service

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

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

  2. 创建 Amazon ES 域。

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

  4. 还原 Amazon ES 域的快照。

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

拍摄并上传快照

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

对于较小的集群,一次性方法是拍摄共享文件系统快照,然后使用 Amazon 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. 安装 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 es create-elasticsearch-domain \ --domain-name migration-domain \ --elasticsearch-version 7.10 \ --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 版本。

重要

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

为 S3 存储桶提供权限

在Amazon Identity and Access Management(IAM) 控制台,创建角色具有以下权限,并且信任关系。创建角色时,选择S3作为Amazon服务。将角色命名为AmazonESSnapshotRole所以很容易找到。

权限

{ "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 用户或角色(无论您用于配置Amazon CLI较早的-承担权限AmazonESSnapshotRole。创建以下策略并将其附加到添加到您的身份:

权限

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

在 Kibana 中映射快照角色(如果使用精细访问控制)

如果您启用了访问权限的精细控制,即使您将 HTTP 基本身份验证用于所有其他目的,也需要将manage_snapshots角色分配给您的 IAM 用户或角色,以便您可以使用快照。

为您的身份授予使用快照的权限

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

  2. 从主菜单中选择安全角色,然后选择管理快照角色。

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

  4. 将您的个人 IAM 用户或角色的域 ARN 添加到相应字段。ARN 采用以下格式之一:

    arn:aws:iam::123456789123:user/user-name
    arn:aws:iam::123456789123:role/role-name
  5. Select映射并确认用户或角色显示在映射用户

还原快照

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

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

还原快照

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

    PUT _snapshot/migration-repository { "type": "s3", "settings": { "bucket": "bucket-name", "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 仪表板。