在 Amazon OpenSearch 服务中进行配置更改 - 亚马逊 OpenSearch 服务

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

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

更新域名时,Amazon S OpenSearch ervice 使用蓝/绿部署流程。blue/green deployment creates an idle environment for domain updates that copies the production environment, and routes users to the new environment after those updates are complete. In a blue/green部署时,蓝色环境是当前的生产环境。绿色环境是闲置环境。

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

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

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

  • 更改实例类型

  • 启用精细访问控制

  • 执行服务软件更新

  • 启用或禁用专用主节点

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

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

  • 选择不同的VPC子网

  • 添加或移除VPC安全组

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

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

  • 修改高级设置

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

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

  • 启用或禁用 UltraWarm 或冷存储

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

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

  • 增加具有两个专用主节点的多可用区域的专用主节点数量

  • 减小EBS卷大小

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

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

对于带待机功能的多可用区的域,一次只能提出一个更改请求。如果已有更改正在执行,则会拒绝新请求。您可以使用查看当前变更的状态DescribeDomainChangeProgressAPI。

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

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

  • 修改访问策略

  • 修改自定义端点

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

  • 更改自动快照时间

  • 启用或禁用 “需要” HTTPS

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

  • 如果您的域有专用的主节点,请更改数据节点或 UltraWarm 节点数量

  • 如果域具有专用主节点,则更改专用主实例类型或节点数量(具有两个专用主节点的多可用区域除外)

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

  • 禁止向发布审核日志 CloudWatch

  • 将每个数据节点的卷大小增加到 3 TiB,更改卷类型或吞吐IOPS量

  • 添加或删除标签

注意

存在一些异常情况,具体取决于您的服务软件版本。如果要确保更改不会导致蓝绿部署,请先执行试运行(如果此选项可用),然后再更新域。某些更改不提供试运行选项。一般而言,我们建议您在流量高峰时段之外对集群进行更改。

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

您可以对某些类型的计划配置更改进行测试,以在无需提交更改的情况下确定是否会导致蓝绿部署。在启动配置更改之前,请使用控制台或运行验证检查,以确保您的域名符合更新条件。API

Console
验证配置更改
  1. 导航到亚马逊 OpenSearch 服务控制台,网址为https://console.aws.amazon.com/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,请将设置DryRuntrue,然后设置DryRunModeVerbose。除了确定更改是否会启动蓝绿部署外,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." } }

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

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 控制台的配置更改状态字段和ConfigChangeStatusAPI响应中找到最新配置更改详细信息的状态。以下值指示域的配置状态:

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

  • Initializing:服务正在启动配置更改请求。

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

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

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

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

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

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

    注意

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

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

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

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

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

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

重要

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

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

配置更改的阶段

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

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

阶段名称 描述

验证

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

创建新环境

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

预置新节点

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

新节点上的流量路由

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

旧节点上的流量路由

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

准备要删除的节点

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

将分片复制到新节点

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

终止节点

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

删除较旧资源

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

动态更新

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

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

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

应用与卷相关的更改

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

蓝绿部署对性能的影响

在蓝/绿部署期间,您的 Amazon S OpenSearch ervice 集群可用于传入的搜索和索引请求。但是,您可能会遇到以下性能问题:

  • 由于集群需要管理更多的节点,领导节点的使用量暂时增加。

  • 由于 OpenSearch 服务将数据从旧节点复制到新节点,因此增加了搜索和索引延迟。

  • 由于集群负载在蓝绿部署期间增加,对传入请求的拒绝情况增加。

  • 为避免延迟问题和请求被拒绝,您应在集群运行状况良好且网络流量较低时运行蓝绿部署。

配置更改的费用

如果您更改域的配置,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 预定义,包括该服务代表您调用其他 AWS 服务所需的所有权限。如果该角色不存在,您可能需要手动创建角色
没有足够的 IP 地址 InsufficientFreeIPsForSubnets

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

Cognito 用户群体不存在 CognitoUserPoolNotFound

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

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

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

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

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

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

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

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

自定义证书未处于ISSUED状态 InvalidCertificate

如果您的域使用自定义终端节点,则可以通过在 AWS Certificate Manager (ACM) 中生成SSL证书或导入自己的证书来保护该终端节点。证书状态必须为 Issued(已签发)。如果您收到此错误,请在ACM控制台中检查证书的状态。如果状态为 “已过期”、“失败”、“非活动” 或 “等待验证”,请参阅ACM疑难解答文档以解决问题。

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

请求的实例类型容量不可用。例如,您可能请求了五个i3.16xlarge.search节点,但是 S OpenSearch ervice 没有足够i3.16xlarge.search的主机可用,因此无法完成请求。在 S OpenSearch ervice 中查看支持的实例类型,然后选择其他实例类型。

集群中的红色索引 RedCluster

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

内存断路器,请求过多 TooManyRequests

您的域名有太多的搜索和写入请求,因此 S OpenSearch ervice 无法更新其配置。您可以减少请求数量,将实例垂直扩展到 64 GiBRAM,或者通过添加实例进行水平扩展。

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

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

固定到特定节点的分片 ShardMovementBlocked

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

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

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

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

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

ResultCodeIPv4BlockNotExists

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

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

ResultCodeIPv6BlockNotExists

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