工程

如何从自管型 Elasticsearch 迁移至 AWS 上的 Elastic Cloud

我们看到越来越多的客户将本地部署工作负载迁移到云端。Elasticsearch 已经有好几年的历史,我们的用户和客户通常都在本地部署中自行管理。Elastic Cloud 上的 Elasticsearch Service(我们的托管型 Elasticsearch 服务)运行于许多不同地区的 Amazon Web Services (AWS)、Google Cloud 和 Microsoft Azure 上,是使用 Elastic Stack 和我们的企业搜索、可观测性和安全解决方案的最佳方式。

如果您想改变自行管理 Elasticsearch 的现状,Elasticsearch Service 将负责以下事项:

  • 配置和管理底层基础架构
  • 创建和管理 Elasticsearch 集群
  • 扩展和缩减集群
  • 升级、打补丁和创建快照

这会让您有更多的时间和精力去解决其他的挑战。

这篇博文探讨了迁移到 Elasticsearch Service 的方法,即通过为 Elasticsearch 集群创建快照,然后在 Elasticsearch Service 上还原快照来完成迁移。

创建集群快照

从自管型 Elasticsearch 迁移到 Elasticsearch Service 时,首先要考虑的是您希望使用哪个云服务提供商以及要部署到的区域。这通常取决于您部署的现有工作负载、云策略以及一系列其他因素。

下面我们将介绍适用于迁移到 AWS 上的 Elasticsearch Service 的过程。之后,针对 Google Cloud 和 Azure 的迁移过程也将很快发布。

将 Elasticsearch 集群数据移动到另一个集群的最简单方法是:创建集群的快照,然后使用该快照将数据还原到新的 Elasticsearch Service 集群中。

执行集群快照的方法有多种。最简单的是执行一次性快照操作。

假设您的 Elasticsearch 不断地采集数据,一次性快照操作的缺点是,在创建快照和在新集群中还原快照之间存在时间延迟,这可能会造成数据丢失。为了最大限度地减少这种滞后,建议创建快照生命周期策略。如果您的 Elasticsearch 集群不经常采集数据,例如用于搜索用例,那么一次性快照完全可以胜任。

在创建本地集群快照之前,您需要配置将存储本地集群快照的 AWS S3 存储桶。在 AWS 上运行的新 Elasticsearch Service 集群将从该存储桶还原集群状态。

为此,需要完成以下几大步骤:

  • 配置云存储(在本例中为 AWS S3 存储桶)
  • 配置本地快照存储库
  • 设置快照策略
  • 在 Elasticsearch Service 上配置新集群
  • 配置 Elasticsearch Service 集群自定义快照存储库
  • 从本地快照还原 Elasticsearch Service 集群

配置云存储

  1. 创建 S3 存储桶。S3 存储桶应位于为您的 Elasticsearch Service 集群所选的同一区域中:
  2. 通过 JSON 选项卡创建 S3 存储桶策略添加 S3 存储桶策略 JSON(使用您的存储桶名称):
  3. 单击复查策略并为您的策略命名:
  4. 创建 IAM 用户并指定上面创建的 S3 存储桶策略:
  5. 单击下一步:权限,选择直接附加现有策略,然后查找您在上一步中创建的策略:
  6. 确保勾选这个策略,然后单击下一步:标签。 您可以跳过添加标签这一步并单击创建用户
  7. 下载用户安全凭证。

配置本地快照存储库

1. 安装 S3 插件

通过在 Elasticsearch 主目录中的每个本地 Elasticsearch 节点上运行以下命令,在您的本地部署中安装 Elasticsearch S3 插件:

sudo bin/elasticsearch-plugin install repository-s3

运行此命令后,您必须重新启动节点。

2. 配置 S3 客户端权限

通过运行以下命令配置本地部署集群 S3 客户端权限:

bin/elasticsearch-keystore add s3.client.default.access_key
bin/elasticsearch-keystore add s3.client.default.secret_key

这一步是必需的,这样本地集群才能获得将快照写入 S3 所需的凭证。Access_key 和 secret_key 可从上一步中创建的 IAM 用户处获得。

设置快照策略

1. 配置快照存储库

通过在 Kibana 开发工具中运行以下命令,在本地集群中配置 S3 快照存储库。我们在这里告诉本地集群要将快照写入哪个 S3 存储桶。您刚刚创建的 IAM 用户应具有读写这个 S3 存储桶的权限。

PUT _snapshot/
{
  "type": "s3",
  "settings": {
    "bucket": ""
  }
}

2. 创建快照策略

接下来,您将在本地集群中创建快照策略,将快照存储在新创建的 S3 存储桶中:

您也可以在 Kibana 开发工具中创建一次性快照:

PUT /_snapshot//?wait_for_completion=true
{
  "indices": "*",
  "ignore_unavailable": true,
  "include_global_state": false
}

通过在开发工具中运行以下命令,验证快照是否正常运行:

GET _snapshot//_all

在 Elasticsearch Service 上配置新集群

一旦我们在 S3 上存储了快照,就可以在 Elasticsearch Service (cloud.elastic.co) 上配置新集群了。您可以在此处选择最能反映您的现有工作负载、AWS 区域和 Elasticsearch 版本的用例。 

在 Elasticsearch Service 控制台中,配置集群密钥库设置:

我们需要配置以下两个设置:

s3.client.default.access_key
s3.client.default.secret_key

这一步是必需的,这样 Elasticsearch Service 集群才能获得从 S3 存储桶读取快照的权限。这些密钥将与 IAM 用户安全凭证的作用相同。

配置 Elasticsearch Service 集群自定义快照存储库

现在,我们必须在 Elasticsearch Service 集群上创建一个新的快照存储库。这会告诉 Elasticsearch Service 我们要还原的快照位于 S3 中的哪个位置。为此,请登录 Kibana,选择堆栈管理,然后导览到“快照和还原”设置。选择注册存储库

添加快照所在的存储桶名称:

然后验证存储库是否已正确配置:

最后,确认 Elasticsearch Service 集群可以看到我们要还原的快照:

从快照还原 Elasticsearch Service 集群

要还原快照,请在 Elasticsearch Service 控制台中前往 Elasticsearch Service 集群 API 控制台,执行以下三个命令。请注意,所有三个命令都在 API 控制台中以 POST 的形式执行。

关闭所有索引

*/_close?expand_wildcards=all

这一步是为了确保先关闭所有索引,这样在还原阶段就不会发生冲突:

还原快照

/_snapshot///_restore

这个命令会还原快照:

打开所有索引

*/_open?expand_wildcards=all

这个命令会打开所有索引:

blog-on-prem-to-ec-aws-14.png

验证快照还原

验证您是否已使用所有索引还原了快照。进入 Kibana 并在开发工具中运行以下命令:

GET _cat/indices

此时,您的新集群应该已经在 Elasticsearch Service 上运行,其中的数据与您从中创建快照的自管型集群中的数据相同。现在,您可以将 Beats 或 Logstash 等采集源重新指向新的 Elasticsearch Service 终端,并且可以在 Elastic Cloud 控制台中找到该终端。

立即迁移到 Elastic Cloud

通过快照将自管型 Elasticsearch 集群迁移到 Elastic Cloud 上的 Elasticsearch Service 是一个比较容易的过程。虽然自行管理 Elasticsearch 很有趣,但 Elasticsearch Service 代您管理 Elasticsearch 集群的所有繁重工作,可让您有时间做更重要的事情。详细了解迁移到 Elastic Cloud 的益处,或立即注册 14 天免费试用