在 Amazon OpenSearch Service 中进行配置更改 - Amazon Opensearch Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

在 Amazon OpenSearch Service 中进行配置更改

Amazon OpenSearch Service 在更新域时使用蓝/绿部署过程。蓝/绿通常是指运行两个生产环境 (一个活动环境和一个空闲环境) 并在您进行软件更改时切换这两个环境的做法。对于 OpenSearch Service,它是指创建用于域更新的新环境并在这些更新完成后将用户路由至新环境的实践。此实践可在部署到新环境未成功的情况下最大程度地减少停机时间并维护原始环境。

通常会导发蓝/绿部署的更改

以下操作会引发蓝/绿部署:

  • 更改实例类型

  • 启用精细访问控制

  • 执行服务软件更新

  • 如果您的域没有 专用主节点,则更改数据实例计数

  • 启用或禁用专用主节点

  • 更改专用主节点计数或实例类型

  • 启用或禁用多 AZ

  • 更改存储类型、卷类型或卷大小

  • 选择不同的 VPC 子网

  • 添加或删除 VPC 安全组

  • 启用或禁用 OpenSearch 控制面板的 Amazon Cognito 身份认证

  • 选择不同的 Amazon Cognito 用户池或身份池

  • 修改高级设置

  • 允许或禁止将错误日志、审核日志或慢速日志发布到 CloudWatch

  • 升级到新的 OpenSearch 版本

  • 启用或禁用 Require HTTPS (要求 HTTPS)

  • 已启用静态数据加密或节点到节点加密

  • 启用或禁用 UltraWarm 存储或冷存储

  • 禁用自动调整和回滚其更改

  • 修改自定义端点

通常不会导发蓝/绿部署的更改

大多情况下,以下操作不会引发蓝/绿部署:

  • 更改访问策略

  • 更改自动快照时间

  • 在不回滚其更改的情况下启用自动调整或禁用它

  • 如果您的域具有专用主节点,则更改数据节点或 UltraWarm 节点计数

存在一些异常情况,具体取决于您的服务软件版本。如果您想确保更改绝对不会导发蓝/绿部署,请先执行试运行,然后再更新域。

确定更改是否会导发蓝/绿部署

您可以对计划的配置更改执行试运行,以确定它是否会导发蓝/绿部署。在控制台中进行更改时,系统会提示您选择 Run analysis(运行分析),OpenSearch Service 将会计算更改将会导发的部署类型。

此外,您还可以通过配置 API 执行试运行分析。例如,这个 UpdateDomainConfig 请求将会测试启用 UltraWarm 导发的部署类型:

POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config { "ClusterConfig": { "WarmCount": 3, "WarmEnabled": true, "WarmType": "ultrawarm1.large.search" }, "DryRun": true }

该请求将会返回更改将会导发的部署类型,但实际上不会执行更新:

{ "ClusterConfig": { ... }, "DryRunResults": { "DeploymentType": "Blue/Green", "Message": "This change will require a blue/green deployment." } }

可能的部署类型如下:

  • Blue/Green - 此更改将会导发蓝/绿部署。

  • DynamicUpdate - 此更改不会导发蓝/绿部署。

  • Undetermined - 域仍处于正在处理状态,因此无法确定部署类型。

  • None - 未发生配置更改。

启动配置更改

当您启动配置更改时,域状态将更改为处理直到 OpenSearch 服务创建了一个具有最新服务软件,此时它会更改回处于活动状态。在特定服务软件更新期间,整个时间状态将保持为 Active (活动)。在这两种情况下,您可以查看群集运行状况和 Amazon CloudWatch 指标,并会在进行域更新时发现群集中的节点数暂时增加(通常加倍)。在下图中,您可以看到配置更改期间的节点从 11 个翻倍至 22 个,然后在更新完成后返回至 11 个。


      节点数在域配置更改期间从 11 翻倍至 22。

这种临时的增加可能会对集群的专用主节点造成压力,其要管理的节点数可能突然增加。它还可以增加搜索和索引延迟,因为 OpenSearch Service 将数据从旧集群复制到新集群。在集群上保持充足的容量很重要,这有助于处理与这些蓝/绿部署相关的开销。

重要

在配置更改和服务维护期间,您不会 产生任何额外费用。您只需要为您的集群请求的节点数量付费。有关具体信息,请参阅配置更改的费用

为防止专用主节点过载,您可以使用 Amazon CloudWatch 指标监控使用情况。有关推荐的最大值,请参阅为 Amazon OpenSearch Service 推荐的 CloudWatch 警报

配置更改的阶段

启动配置更改后,OpenSearch Service 将通过一系列步骤来更新您的域。您可以在控制台中的 Domain status(域状态)下查看配置更改的进度。更新经过的确切步骤取决于您正在进行的更改的类型。此外,您还可以使用 DescribeDomainChangeProgress API 操作监控配置更改。

在某些情况下,例如在服务软件更新期间,在蓝/绿部署实际开始之前,您不会看到进度信息。在此期间,域状态为 Pending Updates

以下是在配置更改期间更新可能经历的阶段:

阶段名称 描述

验证

验证域是否符合更新条件,如有必要,显示验证问题

创建新环境

完成必要的先决条件并创建所需的资源以启动蓝/绿部署。

预置新节点

在新环境中创建新的实例组。

新节点上的流量路由

将流量重定向到新创建的数据节点。

旧节点上的流量路由

禁用旧数据节点上的流量。

准备要删除的节点

准备移除节点。此步骤仅在您将域缩小(例如,从 8 个节点缩小到 6 个节点)时才会发生。

将分片复制到新节点

将分片从旧节点移动到新节点。

终止节点

删除分片后,终止并删除旧节点。

删除较旧资源

删除与旧环境关联的资源(例如负载均衡器)。

动态更新

当更新不需要蓝/绿部署且可以动态应用时显示。

对验证错误进行故障排除

启动配置更改时,OpenSearch Service 首先执行一系列验证检查,以确保您的域是否符合更新条件。如果其中任何一项检查失败,您将在控制台中收到通知,其中包含在更新域之前必须修复的特定问题。下表列出了 OpenSearch Service 可能出现的域问题以及解决这些问题的步骤。

重要

如果您在执行 OpenSearch 版本升级时遇到验证错误,则无法按照以下故障排除步骤中的说明手动修复错误。如果您在尝试升级域时收到错误,请联系 Amazon Web Services Support

问题 错误代码 故障排除步骤
未找到安全组 SecurityGroupNotFound

与您的 OpenSearch Service 域关联的安全组不存在。要解决此问题,请使用指定的名称创建安全组

未找到子网 SubnetNotFound

与您的 OpenSearch Service 域关联的子网不存在。要解决此问题,请在您的 VPC 中创建子网

未配置服务相关角色 SLRNotConfigured 未配置 OpenSearch Service 的服务相关角色。服务相关角色由 OpenSearch Service 预定义,包括服务代表您调用其他 Amazon 服务所需的所有权限。如果该角色不存在,您可能需要手动创建角色
没有足够的 IP 地址 InsufficientFreeIPsForSubnets

您的一个或多个 VPC 子网没有足够的 IP 地址,因此无法更新您的域。要计算您需要的 IP 地址数量,请参阅在 VPC 子网中预留 IP 地址

Cognito 用户群体不存在 CognitoUserPoolNotFound

OpenSearch Service 无法找到 Amazon Cognito 用户群体。确认您已创建一个用户池并具有正确的 ID。要查找该 ID,您可以使用 Amazon Cognito 控制台或以下 Amazon CLI 命令:

aws cognito-idp list-user-pools --max-results 60 --region us-east-1
Cognito 身份群体不存在 CognitoIdentityPoolNotFound

OpenSearch Service 无法找到 Cognito 身份群体。确认您已创建一个用户池并具有正确的 ID。要查找该 ID,您可以使用 Amazon Cognito 控制台或以下 Amazon CLI 命令:

aws cognito-identity list-identity-pools --max-results 60 --region us-east-1
找不到用户群体的 Cognito 域 CognitoDomainNotFound

用户池没有域名。您可以使用 Amazon Cognito 控制台或以下 Amazon CLI 命令配置一个:

aws cognito-idp create-user-pool-domain --domain my-domain --user-pool-id id
未配置 Cognito 角色 CognitoRoleNotConfigured

IAM 角色授予 OpenSearch Service 配置 Amazon Cognito 用户群体和身份群体的权限,并使用这些权限进行身份验证,但该 IAM 角色未配置。使用适当的权限集和信任关系配置角色。您可以使用控制台创建默认 CognitoAccessForAmazonOpenSearch 角色,或者您也可以使用 Amazon CLI 或 Amazon SDK 手动配置角色。

无法描述用户群体 UserPoolNotDescribable 指定的 Amazon Cognito 角色无权描述与您的域关联的用户群体。确保角色权限策略允许 cognito-identity:DescribeUserPool 操作。请参阅 关于 CognitoAccessForAmazonOpenSearch 角色获取完全权限策略。
无法描述身份群体 IdentityPoolNotDescribable 指定的 Amazon Cognito 角色无权描述与您的域关联的身份群体。确保角色权限策略允许 cognito-identity:DescribeIdentityPool 操作。请参阅 关于 CognitoAccessForAmazonOpenSearch 角色获取完全权限策略。
无法描述用户群体和身份群体 CognitoPoolsNotDescribable 指定的 Amazon Cognito 角色无权描述与您的域关联的用户群体和身份群体。确保角色权限策略允许 cognito-identity:DescribeIdentityPoolcognito-identity:DescribeUserPool 操作。请参阅 关于 CognitoAccessForAmazonOpenSearch 角色获取完全权限策略。
KMS 密钥未启用。 KMSKeyNotEnabled

用于加密域的 Amazon Key Management Service(Amazon KMS)密钥已禁用。立即重新启用密钥

自定义证书未处于 ISSUED(已签发)状态 InvalidCertificate

如果您的域使用自定义端点,您可以通过以下方式保护该端点:在 Amazon Certificate Manager(ACM)中生成 SSL 证书或导入您自己的一个证书。证书状态必须为 Issued(已签发)。如果您收到此错误,请在 ACM 控制台中检查证书状态。如果状态为“Expired(已过期)”、“Failed(失败)”、“Inactive(非活动)”或“Pending validation(待验证)”,请参阅 ACM 故障排除文档解决问题。

容量不足,无法启动所选实例类型 InsufficientInstanceCapacity

请求的实例类型容量不可用。例如,您可能请求五个 i3.16xlarge.search 节点,但 OpenSearch Service 没有足够的 i3.16xlarge.search 主机可供使用,因此无法满足请求。检查 OpenSearch Service 中支持的实例类型,然后选择其他实例类型。

集群中的红色索引 RedCluster

集群中一个或多个索引的状态为红色,导致集群的整体状态为红色。要对此问题进行故障排除和修复,请参阅红色集群状态

内存断路器,请求过多 TooManyRequests

对域的搜索和写入请求过多,因此 OpenSearch Service 无法更新其配置。您可以减少请求数量,将实例的 RAM 纵向扩展至高达 64 GiB,或者通过添加实例横向扩展。

新配置无法保存数据(磁盘空间不足) InsufficientStorageCapacity

配置的存储大小无法保存域中的所有数据。要解决此问题,请选择更大的卷删除未使用的索引,或者增加集群中的节点数量以立即释放磁盘空间。

固定到特定节点的分片 ShareMovementBlocked

您的域中的一个或多个索引已附加到特定节点,并且无法重新分配。发生这种情况的最可能原因是您配置了分片分配筛选,其使您能够指定允许哪些节点托管特定索引的分片。

要解决此问题,请从所有受影响的索引中删除分片分配筛选条件:

PUT my-index/_settings { "settings": { "index.routing.allocation.require._name": null } }
新配置无法保存所有分片(分片数) TooManyShards 您的域上的分片数过高,这会阻止 OpenSearch Service 将分片移至新配置。要解决此问题,请通过添加与当前集群节点具有相同配置类型的节点来横向扩展域。请注意,最大 EBS 卷大小取决于节点的实例类型。

要防止将来出现此问题,请参阅 选择分片数量并定义适合您的使用案例的分片策略。

配置更改的费用

如果您更改了某个域的配置,OpenSearch Service 将创建一个新集群,如 在 Amazon OpenSearch Service 中进行配置更改 中所述。在从旧群集迁移到新群集时,会产生以下费用:

  • 如果您更改实例类型,第一个小时两个集群都会收费。第一个小时后,您只需为新群集付费。EBS 卷不会收取两次费用,因为它们是您的集群的一部分,因此它们的计费遵循实例计费。

    示例:您将配置从三个 m3.xlarge 实例更改为四个 m4.large 实例。在第一个小时中,两个集群都需要收费 (3 个 m3.xlarge + 4 个 m4.large)。第一个小时后,您只需为新集群付费 (4 个 m4.large)。

  • 如果您未更改实例类型,第一个小时您只需要为最大的集群付费。第一个小时后,您只需为新集群付费。

    示例: 您将配置从六个 m3.xlarge 实例更改为三个 m3.xlarge 实例。在第一个小时,您只需要为最大的集群付费 (6 个 m3.xlarge)。第一个小时后,您只需为新集群付费 (3 个 m3.xlarge)。