配置亚马逊 OpenSearch 服务以获得高可用性

Amazon OpenSear ch S ervice 是一个完全开源的搜索和分析引擎,可安全地解锁对推荐引擎、电子商务网站和目录搜索等用例的业务和运营数据的实时搜索、监控和分析。为了在业务中取得成功,您需要系统具有高可用性和高性能,最大限度地减少停机时间并避免故障。当您使用 OpenSearch 服务作为监控基础设施的主要手段时,还需要确保其可用性。OpenSearch Service 的停机时间可能会对您的业务结果产生重大影响,例如收入损失、生产力损失、品牌价值损失等。

衡量可用 性的 行业标准为 九级。如果您遵循 最佳实践 ,OpenSearch 服务可提供 3 个 9 的可用性 ,这意味着它保证每月的停机时间少于 43.83 分钟。在这篇文章中,您将了解如何通过在设置域名时遵循最佳实践和建议来配置 OpenSearch Service 域以实现高可用性和性能。

有两个基本要素会影响域的可用性:域的资源利用率(主要由您的工作负载驱动)和外部事件,例如基础设施故障。尽管可以通过持续监控域的性能和运行状况并相应地扩展域来控制前者,但后者不能。为了减轻外部事件(例如可用区中断、实例或磁盘故障或网络问题)对域的影响,您必须预置额外的容量,分布在多个可用区中,并保留数据的多个副本。不这样做可能会导致性能降低、不可用,在最坏的情况下,还会导致数据丢失。

让我们来看看可供您使用的选项,以确保域名可用且性能良好。

集群配置

在本节中,我们将讨论正确设置集群所需的各种配置选项,包括指定部署的可用区数量、设置主节点和数据节点、设置索引和分片。

多可用区部署

数据节点负责处理您的域中的索引和搜索请求。通过增加冗余的每区域数据存储和处理,跨多个可用区部署数据节点可以提高域的可用性。通过多可用区部署,即使整个可用区不可用,您的域也可以保持可用。对于生产工作负载, 亚马逊云科技 建议为您的域名使用三个可用区 。对于仅支持两个可用区的区域,使用两个可用区来提高可用性。这可确保您的域在单可用区出现故障时可用。

专用集群管理器(主节点)

亚马逊云科技 建议 为所有生产工作负载使用三个专用集群管理器 (CM) 节点 。CM 节点跟踪集群的运行状况、其索引和分片的状态和位置、所有索引的映射及其数据节点的可用性,并维护正在处理的集群级任务列表。如果没有专用 CM 节点,则集群使用数据节点,这使得集群容易受到工作负载需求的影响。您应该根据任务的大小(主要是数据节点数、索引计数和分片数)来调整 CM 节点的大小。如果区域支持,OpenSearch Service 始终在三个可用区部署 CM 节点(如果区域只有两个可用区,则两个位于一个可用区,另一个位于其他可用区)。对于正在运行的域,三个 CM 节点中只有一个可以当选领导者。如果选定的 CM 节点失败,其他两个 CM 节点将参与选举。

下表显示了 亚马逊云科技 对 CM 大小提出的建议。CM 节点根据节点的数量、索引、分片和映射来工作。工作越多,需要保存和处理集群状态的计算和内存就越多。

Instance Count Cluster Manager Node RAM Size Maximum Supported Shard Count Recommended Minimum Dedicated Cluster Manager Instance Type
1–10 8 GiB 10,000 m5.large.search or m6g.large.search
11–30 16 GiB 30,000 c5.2xlarge.search or c6g.2xlarge.search
31–75 32 GiB 40,000 c5.4xlarge.search or c6g.4xlarge.search
76 – 125 64 GiB 75,000 r5.2xlarge.search or r6g.2xlarge.search
126 – 200 128 GiB 75,000 r5.4xlarge.search or r6g.4xlarge.search

索引和分片

索引是一种包含文档集合的逻辑结构。您可以通过指定主分片数对索引进行分区以进行并行处理,其中分片表示用于存储和处理数据的物理单位。在 OpenSearch 服务中,分片可以是主分片或副本分片。使用副本是为了提高持久性(如果主分片丢失,OpenSearch Service 会将其中一个副本升级为主分片),并提高搜索吞吐量。如果部署在多个可用区中,OpenSearch Service 可确保将主分片和副本分片放置在不同的节点和不同的可用区中。为了实现高可用性,亚马逊云科技 建议在三区域设置中为每个索引配置至少两个副本,以避免性能和可用性中断。在多可用区设置中,如果节点出现故障,或者在极少数情况下,可用区出现故障,您仍将拥有数据的副本。

集群监控和管理

如前所述,根据最佳实践选择配置只是工作的一半。我们还需要持续监控资源利用率和性能,以确定是否需要扩展该域。配置不足或过度利用的域可能导致性能下降并最终导致不可用。

CPU 利用率

您使用域中的 CPU 来运行工作负载。一般而言,您应将任何数据节点的平均 CPU 利用率定为 60%,峰值为 80%,容忍小峰值为 100%。当你考虑可用性时,尤其是考虑到完整区域的不可用性,有两种情况。如果您有两个可用区,则每个区域将处理 50% 的流量。如果某个区域不可用,则另一个区域将占用所有流量,从而使 CPU 使用率翻倍。在这种情况下,您需要将每个区域的 CPU 平均利用率保持在 30-40% 左右才能保持可用性。如果您运行三个可用区,则每个区域将占用 33% 的流量。如果某个区域不可用,则彼此区域将获得大约 17% 的流量。在这种情况下,您应该将平均 CPU 利用率定为 50-60%。

内存利用率

OpenSearch 服务支持两种类型的垃圾回收。 第一个是 G1 垃圾回收 (G1GC),它由由 亚马逊云科技 Graviton 2 提供支持的 OpenSearch 服务节点使用。 第二个是并行标记扫描 (CMS),所有由其他处理器提供支持的节点都使用它。在分配给节点的所有内存中,一半的内存(最多 32 GB)分配给 Java 堆,其余内存用于其他操作系统任务、文件系统缓存等。为了保持域名的可用性,我们建议在 CMS 中将 JVM 的最大 JVM 利用率保持在 80% 左右,在 G1GC 中保持在 95% 左右。除此之外的任何事情都会影响您的域的可用性,并使您的集群运行状况不佳。我们还建议启用自动调谐,它会主动监视内存利用率并触发垃圾回收器。

存储利用率

OpenSearch 服务发布了几项 域名 大小调整指南。 我们提供了一个经验公式,以便您可以确定满足您的要求所需的正确存储量。但是,重要的是要注意存储空间会随着时间的推移和工作负载特征的变化而耗尽。为了确保域名不会耗尽存储空间并可以继续索引数据,您应该配置 Amazon CloudWatch 警报并监控您的可用存储空间。

亚马逊云科技 还建议选择主分片数,以便每个分片都在最佳大小区间内。您可以通过对数据和流量进行概念验证测试来确定最佳分片大小。我们将 10—30 GB 的主分片大小用于搜索用例,将 45—50 GB 的主分片大小作为指导原则,用于日志分析用例。由于分片是您域中的工作节点,因此它们直接负责在数据节点之间分配工作负载。如果分片太大,则可能会因为大型聚合而给Java堆带来压力,查询性能变差,以及分片再平衡、快照和热到温迁移等集群级任务的性能变差。如果您的分片太小,它们可能会使域的 Java 堆空间不堪重负,通过过多的内部网络降低查询性能,并使集群级别的任务变慢。我们还建议保持每个节点的分片数与可用堆成正比(实例 RAM 的一半不超过 32 GB)——每 GB 的 Java 堆有 25 个分片。这使得域中的任何数据节点上实际限制为 1,000 个分片。

结论

在这篇文章中,你学习了使用 OpenSearch 服务设置高可用域的各种提示和技巧,该服务通过在三个可用区运行 OpenSearch 服务来帮助你保持 OpenSearch 服务的性能和可用性。

请继续关注一系列有关 OpenSearch 服务的各种特性和功能的文章。如果您对此帖子有反馈,请在评论部分提交。如果您对这篇文章有疑问,请在 OpenSearch 服务论坛 上开始一个新话题 或联系 亚马逊云科技 S upport。


作者简介

Rohin Bhargava 是亚马逊 OpenSearch Service 团队的高级产品经理。他在 亚马逊云科技 的热情是帮助客户找到正确的 亚马逊云科技 服务组合,以成功实现其业务目标。

Prashant Agrawal 是亚马逊 OpenSearch Service 的高级搜索专家解决方案架构师。他与客户紧密合作,帮助他们将工作负载迁移到云端,并帮助现有客户微调集群以提高性能并节省成本。在加入 亚马逊云科技 之前,他帮助各种客户使用 OpenSearch 和 Elasticsearch 进行搜索和日志分析用例。不工作时,你会发现他在旅行和探索新的地方。简而言之,他喜欢做 “吃” → “旅行” → “重复”。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。