Amazon OpenSearch Service推出托管跨区域灾难恢复
有效阅读仅保存在当前浏览器,用于「为你」推荐;暂停或清除记录。
DataHot 速览
Amazon OpenSearch Service 为 OpenSearch 3.7 及以上版本域提供托管灾难恢复功能,可将主域数据持续同步到另一区域的备用域。该功能通过 API 实现切换与故障转移,RPO 低于 1 分钟、RTO 低于 20 分钟,两步即可完成配置。此前需自建跨集群复制或双写,耗时数月且无协调切换机制;新功能面向客户搜索、金融风控与关键运营数据等场景。
原收录理由(待核验):这是搜索与分析基础设施在跨区域容灾能力上的实质性产品更新,涉及 RPO/RTO 指标与运维机制,对使用 OpenSearch 承载关键检索与分析负载的数据平台团队有直接参考价值。
本文目录 23 节
译文
AI 逐段翻译Amazon OpenSearch Service 已通过 多可用区(Multi-AZ)部署 在单个 AWS 区域内提供高可用性。然而,一些组织需要多区域架构来满足特定的业务需求。这些需求包括严格的恢复点和恢复时间目标、数据驻留要求,以及关键任务搜索和 AI 工作负载的业务连续性计划。
到目前为止,在 Amazon OpenSearch Service 上达到这一标准意味着你要通过 跨集群复制 或向多个区域双写来构建和运行自己的复制。这需要数月的工程工作和持续维护,无法在区域之间协调切换角色,也无法保证恢复点目标(RPO)。
Amazon OpenSearch Service 现为运行 OpenSearch 3.7 或更高版本的域提供托管灾难恢复。托管灾难恢复会将数据从一个区域的主域复制到另一个区域的辅助域,并使辅助域持续保持同步。当你需要迁移工作负载时,可以使用 API 驱动的切换和故障转移。它提供低于 1 分钟的 RPO 和低于 20 分钟的恢复时间目标(RTO),并且只需两步即可设置。
在本文中,我们将解释托管灾难恢复的工作原理、开始前需要检查的内容,以及如何设置、监控和切换区域。
谁应使用托管灾难恢复
托管灾难恢复专为停机或数据丢失会直接带来业务、客户或合规成本的工作负载而构建。常见模式包括:
- 面向客户的搜索: 电子商务、产品目录和站点搜索,停机意味着收入损失和客户体验下降。
- 金融服务与风险: 欺诈检测、交易搜索和风险分析,监管机构期望展示跨区域可恢复性并定期进行灾难恢复演练。
- 关键任务运营数据: 支持事件响应、安全调查或受监管记录检索的搜索和分析,团队需要不间断地访问数据。
如果你的恢复计划要求在另一个区域保留一份 OpenSearch 数据副本,并有一种经过测试的方式将工作负载迁移到那里,托管灾难恢复可以替代你原本需要自行构建和运行的复制管道。
解决方案概述
托管灾难恢复将不同区域的两个 OpenSearch Service 域配对。一个域是 主域:它接受读取和写入。另一个是 辅助域:它持续接收来自主域的变更,并且仅提供读取。下图展示了该架构。
图 1:托管灾难恢复将一个区域中的主域与另一个区域中的只读辅助域配对,两者之间进行托管复制
当你配对这些域时,服务首先会将现有的 Lucene 段从主域复制到辅助域。在此初始复制之后,每个新文档和更新都会同时索引到主域和辅助域。复制流量保持在 OpenSearch Service 网络内,因此你无需设置虚拟私有云(VPC)对等连接或任何网络,并且数据在传输过程中已加密。由于两个域都会索引数据,辅助域随时可以接管成为主域。
两个域都提供读取,但只有当前主域接受写入。当角色发生变化时,你将应用程序的写入重定向到新的主域。有关更多详细信息,请参阅本文后面的切换区域部分。
有两种方式可以将主角色迁移到另一个区域。下表对它们进行了比较,后续部分会引用此表。
| 切换 | 故障转移 | |
| 事件类型 | 计划内 | 计划外 |
| 协调方式 | 两个域之间协调角色互换。 | 单方面提升辅助域。 |
| 数据丢失 | 零:待处理的写入会在角色互换前完成复制。 | 尚未复制的写入会丢失,上限为复制延迟(RPO)。 |
| 使用时机 | 监管演练、维护、计划内区域迁移、OpenSearch Service 之外的问题。 | 主域不可用。 |
| 调用对象 | 被提升的辅助域。 | 被提升的辅助域。 |
你还可以通过 AWS 管理控制台上的内置仪表板管理复制健康状况,并且该服务支持用于静态加密的客户托管 AWS Key Management Service(AWS KMS)密钥。
先决条件和限制
开始之前,请确认你的环境满足以下要求:
- 引擎版本: 两个域都运行 OpenSearch 3.7 或更高版本。如果你使用的是较早版本,请参阅本节末尾的“使用基于克隆的升级升级到 OpenSearch 3.7”。
- 同一 AWS 账户: 主域和辅助域必须在同一 AWS 账户中,且位于不同区域。
- 规格匹配: 两个域都会索引所有数据,并使用相同数量的主分片和副本,因此它们需要相似的 CPU、内存和存储容量。
- UltraWarm、可写热存储和用于日志分析的 Optimized 引擎: 此版本不支持使用 UltraWarm 或可写热存储,或使用用于日志分析的 OpenSearch Optimized 引擎的域。
- 配置不会被复制: 托管灾难恢复复制的是数据。索引状态管理(ISM)策略、索引模板、设置和角色不会被复制,因此请使用基础设施即代码在两个域上管理它们(请参阅本文后面的最佳实践)。
- 客户端重定向: 服务不会在切换或故障转移后重定向应用程序的写入。你的应用程序或运行手册必须执行此操作。
使用基于克隆的升级升级到 OpenSearch 3.7
如果你的域运行的是较早版本,可以通过基于克隆的升级将其升级到 OpenSearch 3.7。OpenSearch Service 不会就地升级你现有的集群,而是在目标版本上创建你的域的克隆,并使其与你的数据保持同步。你的域继续从原始集群提供流量。借助基于克隆的升级,你可以:
- 先验证: 在克隆生效之前,用你自己的读请求测试克隆。
- 准备好后再切换: 你选择何时转移流量。切换期间写入会被阻止,切换可能持续数分钟。
- 取消或回滚: 在切换前随时取消,或在你设置的保留期内回滚到原始集群。
基于克隆的升级适用于运行 Elasticsearch 7.10 或 OpenSearch 1.1 或更高版本的域。更早的版本需要先进行就地升级。在验证期间和保留期内,你需要为原始集群和克隆付费。升级之前,请拍摄手动快照并运行升级前检查。有关详细信息,请参阅 升级 Amazon OpenSearch Service 域。
设置托管灾难恢复
你可以在控制台上或使用 AWS Command Line Interface(AWS CLI)设置托管灾难恢复。在这两种情况下,流程都是:
- 创建主域(OpenSearch 3.7 或更高版本)并开始建立索引和搜索。
- 在不同区域创建大小匹配的相同版本的辅助域。
- 将主域与辅助域配对。
- 检查复制状态。
在控制台上设置
在 AWS Management Console 中,打开 Amazon OpenSearch Service 并选择你的主域。灾难恢复部分适用于运行 OpenSearch 3.7 或更高版本的域。
图 2:域摘要显示灾难恢复状态为未配置,并带有“设置”链接
图 3:信息横幅提供“设置灾难恢复”按钮
选择 设置 或 设置灾难恢复,然后输入辅助域的 Amazon Resource Name(ARN)。
图 4:设置页面,你在此输入辅助域 ARN 并验证先决条件
选择 验证先决条件。当域兼容时,控制台会显示消息“这些域可以配对用于灾难恢复”。选择 创建并启用灾难恢复。配对需要几分钟。
使用 AWS CLI 设置
在主区域运行以下命令,将辅助域添加为复制对等项:
aws opensearch add-replication-peer \
--domain-name <primary_domain> \
--peer-domain-arn arn:aws:es:<secondary_region>:<account>:domain/<secondary_domain> \
--region <primary_region>在配对之前,你可以调用 CompareDomainConfiguration API,以找出两个域的配置在关键类别上的差异。
检查复制状态
在控制台的灾难恢复部分,选择 管理 以查看对等角色和复制状态。
图 5:灾难恢复仪表板,显示两个域的复制状态均为活动
使用 AWS CLI 时,在任一域上调用 DescribeDomainReplication 以查看对等角色和复制状态。要停止复制,请调用 RemoveReplicationPeer。每个域都保留其数据。
aws opensearch describe-domain-replication --domain-name <name> --region <region>监控复制
托管灾难恢复会在辅助域上发布以下 Amazon CloudWatch 指标。我们建议为每个指标创建告警。
| 指标 | 单位 | 衡量内容 | 正常值 | 建议的告警 |
| DisasterRecoveryReplicationLagTime | 毫秒 | 辅助域落后主域的程度 | 即使已追上,也最多 10 秒 | 持续超过你的 RPO 预算(例如,> 30,000 毫秒持续 5 分钟) |
| DisasterRecoveryReplicationLagOps | 计数 | 辅助域尚未应用的更改 | 活跃写入下为几秒,取决于工作负载。 | 在多个周期内持续增长 |
| DisasterRecoveryBootstrappingIndices | 计数 | 仍在进行首次完整复制的索引 | 0(设置后或创建新索引后立即为非零) | 非零时间超过预期的初始同步时间 |
| DisasterRecoveryDegradedIndices | 计数 | 正在复制但未完全正常的索引 | 0 | > 0 持续 15 分钟 |
| DisasterRecoveryFailedIndices | 计数 | 复制因错误而停止且不再接收更改的索引 | 0 | > 0(任何数据点) |
有关更多信息,请参阅 监控 Amazon OpenSearch Service 域。
通过切换或故障转移切换区域
对于计划内事件使用切换,在主域不可用时使用故障转移(参见解决方案概述中的比较表)。在这两种情况下,都在你要提升的辅助域上调用 API。
执行计划内切换
SwitchoverReplication 执行协调的角色交换,且无数据丢失。在辅助域上运行它:
aws opensearch switchover-replication --region <secondary_region> \
--domain-name <secondary_domain> \
--peer-domain-arn arn:aws:es:<primary_region>:<account>:domain/<primary_domain>执行计划外故障转移
FailoverReplication 单方面将辅助域提升为主域。写入旧主域但尚未复制的数据会丢失。丢失量以复制延迟为界。因此,该命令需要 --allow-data-loss 标志:
aws opensearch failover-replication --region <secondary_region> \
--domain-name <secondary_domain> \
--peer-domain-arn arn:aws:es:<primary_region>:<account>:domain/<primary_domain> \
--allow-data-loss重定向客户端写入
托管灾难恢复不会重定向你的应用程序。两个域都保持可读,但只有主域可写,因此在切换或故障转移后,你的应用程序必须将写入发送到新提升的主域。将写路径更新作为与 API 调用相同的运行手册步骤的一部分,例如通过更新 DNS 记录、配置参数或服务发现条目。
切换或故障转移之后
切换后,原主域成为辅助域,复制以相反方向继续进行,无需进一步操作。
故障转移后,当原始域再次可用时,你可以故障恢复。原始域需要重新播种,之后才能再次用于复制。重新播种后,你可以执行切换以恢复原始主区域。
性能结果
我们在多种 r7g 实例规格和数据规模下测量了设置、初始同步、稳态复制延迟、计划内切换和计划外故障转移。测试使用了合成的 Apache 日志数据,持续写入负载为 240 MBps。
域详细信息:
- R7g.4xlarge 域:6 个数据节点 + 3× m7g.large 集群管理器,每节点 12 TiB gp3。
- R7g.8xlarge 域:6 个数据节点 + 3× m7g.large 集群管理器,每节点 12 TiB gp3。
- 索引使用 12 个主分片 + 1 个副本,每个主分片在 50 GB 时滚动。
注意: 结果可能因工作负载、数据大小和配置而异。
设置与初始同步
配对只需一次 API 调用,在我们的测试中,从 1 TiB 到 10 TiB,完成时间为 1 到 3 分钟。初始同步时间取决于数据大小。
| 数据 | 实例 | 开启灾难恢复 | 完整初始同步 |
| 1 TiB | r7g.4xlarge | 约 1 分钟 | 20 分钟 |
| 10 TiB | r7g.4xlarge | 约 1 分钟 | 2 小时 31 分钟 |
| 10 TiB | r7g.8xlarge | 约 1 分钟 | 2 小时 18 分钟 |
稳态复制延迟
复制延迟是指持续写入负载下次级落后的程度,使用 DisasterRecoveryReplicationLagTime 测量(测试窗口内的 p95)。
| 数据 | 实例 | 写入负载 | 复制延迟(p95) |
| 1 TiB | r7g.4xlarge | 240 MBps | 约 10 秒 |
| 10 TiB | r7g.4xlarge | 240 MBps | 约 10 秒 |
| 10 TiB | r7g.8xlarge | 240 MBps | 约 10 秒 |
计划内切换
待处理的写入会先复制到新的主节点,然后角色交换才完成,因此数据丢失为零。RTO 是指在新主节点接受写入之前,客户端写入失败持续的时间。
| 数据 | 实例 | 写入负载 | 写入中断(RTO) | 数据丢失 |
| 1 TiB | r7g.4xlarge | 240 MBps | 36.8 秒 | 0 |
| 10 TiB | r7g.4xlarge | 240 MBps | 38 秒 | 0 |
| 10 TiB | r7g.8xlarge | 240 MBps | 57 秒 | 0 |
计划外故障转移
RPO 是指丢失了多少秒的写入。角色翻转已确认是指控制平面确认提升所需的时间。写入中断是指客户端从新主节点收到 HTTP 201 所需的时间。
| 数据 | 实例 | 写入负载 | 角色翻转已确认 | 写入中断(RTO) | 数据丢失(RPO) |
| 1 TiB | r7g.4xlarge | 240 MBps | 6.4 秒 | 69 秒 | 约 8 秒(约 2.0M 文档) |
| 10 TiB | r7g.4xlarge | 240 MBps | 8.1 秒 | 61 秒 | 约 10 秒(约 2.46M 文档) |
| 10 TiB | r7g.8xlarge | 240 MBps | 5.8 秒 | 60 秒 | 约 10 秒(约 2.46M 文档) |
关键要点
在我们的测试中,我们看到了以下结果:
- RPO: 计划外故障转移丢失了约 8 到 10 秒的写入,远低于 1 分钟以内的 RPO 目标。计划内切换没有丢失数据。
- RTO: 故障转移后写入约 1 分钟恢复,切换后不到 1 分钟恢复,远低于 20 分钟以内的 RTO 目标。
- 规模: 从 1 TiB 到 10 TiB,配对时间、延迟和恢复时间基本保持不变。只有一次性的初始同步会随数据大小增长。
最佳实践
- 使用基础设施即代码管理配置 – 将索引模板、ISM 策略、设置和角色保存在 Git 仓库中,并将它们应用到两个域,例如使用 OpenSearch Terraform provider。
- 先升级次级 – 升级引擎版本时,先升级次级域,最后升级活动主域。我们建议在次级域上测试新版本的性能,然后在次级域升级通过验证后再升级主域。不要长期运行混合版本。
- 域规格保持匹配 – 保持实例类型、数量、存储和分片配置一致,并使用 CompareDomainConfiguration 检测偏差。
- 决定故障转移自动化方式 – 故障转移按设计是手动的,因为正确的触发条件因业务而异。您可以使用 CloudWatch 告警以及故障转移和切换 API 构建事件驱动的自动化。
- 演练您的运行手册 – 定期使用切换来演练区域迁移,包括客户端写入重定向步骤。
定价
托管灾难恢复不收取额外费用。您需要为次级域的实例以及跨区域数据传输付费。实例定价请参阅Amazon OpenSearch Service 定价。
结论与后续步骤
托管灾难恢复为 Amazon OpenSearch Service 域提供持续的跨区域复制、零数据丢失的计划内切换以及有界 RPO 的故障转移,而无需构建和运维自己的复制管道。它服务于具有严格可用性、恢复和业务连续性要求的受监管行业和业务关键型工作负载。
开始使用:
- 在同一 AWS 账户的两个区域中创建域或将域升级到 OpenSearch 3.7 或更高版本。
- 在控制台上或使用 AddReplicationPeer API 将它们配对。
- 为复制指标设置 CloudWatch 告警,并构建和演练您的切换与故障转移运行手册。
有关更多信息,请参阅Amazon OpenSearch Service 灾难恢复文档和API 参考,打开OpenSearch Service 控制台,或观看演示视频。
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏