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

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

在 Amazon OpenSearch 服务中进行配置更改

更新域名时,Amazon S OpenSearch ervice 使用蓝/绿部署流程。蓝绿部署创建用于域更新的闲置环境,复制生产环境,在完成更新后将用户路由到新环境。在蓝绿部署中,蓝色环境是当前的生产环境。绿色环境是闲置环境。

将数据从蓝色环境迁移至绿色环境。当新环境准备就绪时,S OpenSearch ervice 会切换环境,将绿色环境提升为新的生产环境。切换时不会丢失数据。此实践可在部署到新环境未成功的情况下最大程度地减少停机时间并维护原始环境。

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

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

  • 更改实例类型

  • 启用精细访问控制

  • 执行服务软件更新

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

  • 启用或禁用专用主节点

  • 启用或禁用不带待机功能的多可用区

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

  • 选择不同的 VPC 子网

  • 添加或删除 VPC 安全组

  • 为控制面板启用或禁用 Amazon Cognito 身份验证 OpenSearch

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

  • 修改高级设置

  • 升级到新 OpenSearch 版本(在部分或全部升级过程中,OpenSearch 仪表板可能不可用)

  • 启用静态数据加密或 node-to-node 加密

  • 启用或禁用 UltraWarm 或冷存储

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

  • 关联和取消关联可选插件与域

  • 增加具有两个专用主节点并启用区域感知的域的专用主节点计数

  • 减小 EBS 卷大小

  • 更改 EBS 卷大小、IOPS 或吞吐量(前提是您所做的最后一次更改正在进行或发生在 6 小时以前)

  • 允许向发布审核日志 CloudWatch。

对于带待机功能的多可用区的域,一次只能提出一个更改请求。如果已在进行更改,将拒绝新请求。您可以使用 DescribeDomainChangeProgress API 查看当前更改状态。

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

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

  • 更改访问策略

  • 修改自定义端点

  • 更改传输层安全性协议 (TLS) 策略

  • 更改自动快照时间

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

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

  • 如果您的域名有专用的主节点或者 UltraWarm 节点数量发生变化

  • 更改数据节点数

  • 如果您的域具有专用主节点,请更改专用主实例类型或节点计数(具有两个专用主节点并启用区域感知的域除外)

  • 启用或禁用向发布错误日志或慢速日志 CloudWatch

  • 禁止向发布审核日志 CloudWatch。

  • 增加卷大小,将卷类型、IOPS 和吞吐量更改为每个数据节点卷大小最多 3 TiB

  • 添加或删除标签

注意

存在一些异常情况,具体取决于您的服务软件版本。如果您想绝对确定更改不会导致蓝/绿部署,请在更新域名之前进行试运行(如果此选项可用)。有些更改不提供试运行选项。我们通常建议您在流量高峰时段之外对集群进行更改。

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

您可以测试某些类型的计划配置更改,以确定它们是否会导致蓝/绿部署,而不必承诺这些更改。发起配置更改之前,请使用控制台或 API 运行验证检查,以确保域符合更新条件。

Console
验证配置更改
  1. 导航到亚马逊 OpenSearch 服务控制台,网址为https://console.amazonaws.cn/aos/

  2. 在左侧导航窗格中,选择 Domains(域)。

  3. 选择要进行配置更改的域。随即打开域详细信息页面。选择 Actions(操作)下拉菜单,然后选择 Edit cluster configuration(编辑集群配置)。

  4. Edit cluster configuration(编辑集群配置)页面上,您可以更改实例类型、节点数及任何其他配置。在摘要面板中确认更改后,选择 Run(运行)。

  5. 试运行完成后,结果将自动显示在页面底部,同时显示试运行 ID。结果会通知您所做的更改属于哪个类别:

    • 启动蓝绿部署

    • 不需要蓝绿部署

    • 包含在保存更改之前需要解决的验证错误

    请注意,每次试运行都会覆盖之前的试运行。如需稍后查看每次试运行的详细信息,请务必保存试运行 ID。每次试运行的有效期为 90 天,或者直到您进行配置更新。

  6. 要继续更新配置,请选择 Save changes(保存更改)。否则,选择取消。任一选项都会带您返回到 Cluster configuration(集群配置)选项卡。在此选项卡上,您可以选择 Dry run details(试运行详细信息)以查看最新试运行的详细信息。本页还包括试运行前的配置和试运行配置之间的 side-by-side 比较。

API

您可以通过配置 API 来执行试运行验证。要使用 API 测试更改,请将 DryRun 设置为 true,将 DryRunMode 设置为 Verbose。除了确定更改是否会启动蓝绿部署外,Verbose 模式还会运行验证检查。例如,此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, "DryRunMode": "Verbose" }

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

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

可能的部署类型如下:

  • Blue/Green:此更改将会导致蓝绿部署。

  • DynamicUpdate:此更改不会导致蓝绿部署。

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

  • None:未发生配置更改。

如果验证失败,将返回验证失败列表。

{ "ClusterConfig":{ "..." }, "DryRunProgressStatus":{ "CreationDate":"2023-01-12T01:14:33.847Z", "DryRunId":"db00ca39-48b2-4774-bbd3-252cf094d205", "DryRunStatus":"failed", "UpdateDate":"2023-01-12T01:14:33.847Z", "ValidationFailures":[ { "Code":"Cluster.Index.WriteBlock", "Message":"Cluster has index write blocks." } ] } }

如果状态仍为pending,则可以在后续DescribeDryRunProgress调用的 UpdateDomainConfig 响应中使用试运行 ID 来检查验证状态。

GET https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/dryRun?dryRunId=my-dry-run-id { "DryRunConfig": null, "DryRunProgressStatus": { "CreationDate": "2023-01-12T01:14:42.998Z", "DryRunId": "db00ca39-48b2-4774-bbd3-252cf094d205", "DryRunStatus": "succeeded", "UpdateDate": "2023-01-12T01:14:49.334Z", "ValidationFailures": null }, "DryRunResults": { "DeploymentType": "Blue/Green", "Message": "This change will require a blue/green deployment." } }

要在不进行验证检查的情况下运行试运行分析,请在使用配置 API 时将 DryRunMode 设置为 Basic

Python

以下 Python 代码使用 UpdateDomainConfigAPI 执行试运行验证检查,如果检查成功,则在不进行试运行的情况下调用相同的 API 来开始更新。如果检查失败,脚本将输出错误并停止。

import time import boto3 client = boto3.client('opensearch') response = client.UpdateDomainConfig( ClusterConfig={ 'WarmCount': 3, 'WarmEnabled': True, 'WarmCount': 123, }, DomainName='test-domain', DryRun=True, DryRunMode='Verbose' ) dry_run_id = response.DryRunProgressStatus.DryRunId retry_count = 0 while True: if retry_count == 5: print('An error occured') break dry_run_progress_response = client.DescribeDryRunProgress('test-domain', dry_run_id) dry_run_status = dry_run_progress_response.DryRunProgressStatus.DryRunStatus if dry_run_status == 'succeeded': client.UpdateDomainConfig( ClusterConfig={ 'WarmCount': 3, 'WarmEnabled': True, 'WarmCount': 123, }) break elif dry_run_status == 'failed': validation_failures_list = dry_run_progress_response.DryRunProgressStatus.ValidationFailures for item in validation_failures_list: print(f"Code: {item['Code']}, Message: {item['Message']}") break retry_count += 1 time.sleep(30)

启动和跟踪配置更改

注意

您一次可以请求一项配置更改。您还可以在单个请求中对多个配置更改进行分组。请等待您的域名状态变成,Active然后再请求任何其他配置更改。

您可以在 Amazon S OpenSearch ervice 控制台中查看 “域处理状态” 和 “配置更改状态” 字段,以跟踪域名和配置更改。您还可以通过 API 响应中的和ConfigChangeStatus参数来跟踪域名DomainProcessingStatus和配置的更改。有关更多信息,请参阅 OpenSearch 服务 API 参考中的DomainStatus数据类型。

域处理状态可见性:通过查看控制台中的 “域处理状态” 字段,您可以轻松确定域的配置状态。同样,DomainProcessingStatusAPI 参数可用于识别状态。以下值是域的处理状态:

  • Active: 未进行任何配置更改。您可以提交新的配置更改请求。

  • Creating: 正在创建域。

  • Modifying:正在进行配置更改,例如添加新的数据节点、EBS、gp3、IOPS 配置或设置 KMS 密钥。

    注意

    Modifying在域需要移动分片才能完成配置更改的情况下,您可能会看到该状态。为了向后兼容,Processing参数的行为在 API 响应中保持不变,并且在核心配置更改完成后立即设置为 false,无需等待分片移动完成。

  • Upgrading Engine Version:正在进行引擎版本升级。

  • Updating Service Software: 服务软件更新正在进行中。

  • Deleting: 域名正在被删除。

  • Isolated: 域名已暂停。

配置状态可见性:配置更改可以由操作员启动(例如添加新的数据节点、更改实例类型),也可以由服务启动(例如自动调整和非高峰时段更新)。您可以在 Amazon S OpenSearch ervice 控制台的配置更改状态字段和 ConfigChangeStatus API 响应中找到最新配置更改详细信息的状态。以下值表示域的配置状态:

  • Pending: 配置更改请求已提交。

  • Initializing: 服务正在初始化配置更改请求。

  • Validating:服务部门正在验证请求的更改和所需的资源。

  • Awaiting user inputs:当操作员预计某些配置更改(例如实例类型更改)会继续进行时适用。您可以编辑配置更改。

  • Applying changes: 服务正在应用请求的配置更改。

  • Cancelled: 配置更改已取消。如果您收到验证失败状态,则可以在控制台中单击 “取消” 或调用 CancelDomainConfigChange API 操作。如果执行此操作,则所有已应用的更改都将被回滚。

  • Completed: 请求的配置更改已成功完成。

  • Validation Failed: 请求的更改验证失败。不应用任何配置更改。

    注意

    验证失败可能是由于您的域中存在红色索引、所选实例类型不可用或磁盘空间不足所致。有关验证错误的列表,请参阅对验证错误进行故障排除。在验证失败事件期间,您可以取消、重试或编辑配置更改。

API 摘要:您可以使用DescribeDomainDescribeDomainChangeProgress、和 DescribeDomainConfig API 操作来获取详细的配置更新状态。此外,您还可以CancelDomainConfigChange使用在验证失败时取消更新。有关更多信息,请参阅OpenSearch 服务 API 文档

配置更改完成后,域状态将变回为。Active

您可以查看集群运行状况和 Amazon CloudWatch 指标,发现域更新发生时,集群中的节点数量会暂时增加(通常是翻一番)。在下图中,您可以看到配置更改期间的节点从 11 个翻倍至 22 个,然后在更新完成后返回至 11 个。


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

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

重要

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

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

配置更改的阶段

在您启动配置更改后,S OpenSearch ervice 会通过一系列步骤来更新您的域名。您可以在控制台的配置更改状态下查看配置更改的进度。更新经过的确切步骤取决于您正在进行的更改的类型。您还可以使用 DescribeDomainChangeProgressAPI 操作监控配置更改。

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

阶段名称 描述

验证

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

创建新环境

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

预置新节点

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

新节点上的流量路由

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

旧节点上的流量路由

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

准备要删除的节点

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

将分片复制到新节点

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

终止节点

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

删除较旧资源

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

动态更新

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

应用与专用主节点相关的更改

当专用主实例类型或计数更改时显示。

应用与卷相关的更改

卷大小、类型、IOPS 和吞吐量发生变化时显示。

配置更改的费用

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

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

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

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

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

对验证错误进行故障排除

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

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

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

未找到子网 SubnetNotFound

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

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

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

Cognito 用户群体不存在 CognitoUserPoolNotFound

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

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

OpenSearch 服务找不到 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

未配置向 OpenSearch 服务授予配置 Amazon Cognito 用户和身份池以及使用它们进行身份验证的权限的 IAM 角色。使用适当的权限集和信任关系配置角色。您可以使用控制台为您创建默认CognitoAccessForAmazonOpenSearch角色,也可以使用或 Amazon SDK 手动配置角色。 Amazon CLI

无法描述用户群体 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节点,但是 S OpenSearch ervice 没有足够i3.16xlarge.search的主机可用,因此无法完成请求。在 S OpenSearch ervice 中查看支持的实例类型,然后选择其他实例类型。

集群中的红色索引 RedCluster

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

内存断路器,请求过多 TooManyRequests

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

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

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

固定到特定节点的分片 ShardMovementBlocked

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

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

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

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

与您的域关联的子网不支持 IPv4 地址

ResultCodeIPv4BlockNotExists

要解决此问题,请根据配置的域 IP 地址类型在 VPC 中创建子网或更新现有子网。如果您的域使用仅 IPv4 地址类型,请使用仅 IPv4 的子网。如果您的域使用双堆栈模式,请使用双堆栈子网。

与您的域关联的子网不支持 IPv6 地址

ResultCodeIPv6BlockNotExists

要解决此问题,请根据配置的域 IP 地址类型在 VPC 中创建子网或更新现有子网。如果您的域使用仅 IPv4 地址类型,请使用仅 IPv4 的子网。如果您的域使用双堆栈模式,请使用双堆栈子网。