我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
配置亚马逊 OpenSearch 服务以获得高可用性
有两个基本要素会影响域的可用性:域的资源利用率(主要由您的工作负载驱动)和外部事件,例如基础设施故障。尽管可以通过持续监控域的性能和运行状况并相应地扩展域来控制前者,但后者不能。为了减轻外部事件(例如可用区中断、实例或磁盘故障或网络问题)对域的影响,您必须预置额外的容量,分布在多个可用区中,并保留数据的多个副本。不这样做可能会导致性能降低、不可用,在最坏的情况下,还会导致数据丢失。
让我们来看看可供您使用的选项,以确保域名可用且性能良好。
集群配置
在本节中,我们将讨论正确设置集群所需的各种配置选项,包括指定部署的可用区数量、设置主节点和数据节点、设置索引和分片。
多可用区部署
数据节点负责处理您的域中的索引和搜索请求。通过增加冗余的每区域数据存储和处理,跨多个可用区部署数据节点可以提高域的可用性。通过多可用区部署,即使整个可用区不可用,您的域也可以保持可用。对于生产工作负载,
专用集群管理器(主节点)
下表显示了 亚马逊云科技 对 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 服务支持两种类型的垃圾回收。
存储利用率
OpenSearch 服务发布了几项
亚马逊云科技 还建议选择主分片数,以便每个分片都在最佳大小区间内。您可以通过对数据和流量进行概念验证测试来确定最佳分片大小。我们将 10—30 GB 的主分片大小用于搜索用例,将 45—50 GB 的主分片大小作为指导原则,用于日志分析用例。由于分片是您域中的工作节点,因此它们直接负责在数据节点之间分配工作负载。如果分片太大,则可能会因为大型聚合而给Java堆带来压力,查询性能变差,以及分片再平衡、快照和热到温迁移等集群级任务的性能变差。如果您的分片太小,它们可能会使域的 Java 堆空间不堪重负,通过过多的内部网络降低查询性能,并使集群级别的任务变慢。我们还建议保持每个节点的分片数与可用堆成正比(实例 RAM 的一半不超过 32 GB)——每 GB 的 Java 堆有 25 个分片。这使得域中的任何数据节点上实际限制为 1,000 个分片。
结论
在这篇文章中,你学习了使用 OpenSearch 服务设置高可用域的各种提示和技巧,该服务通过在三个可用区运行 OpenSearch 服务来帮助你保持 OpenSearch 服务的性能和可用性。
请继续关注一系列有关 OpenSearch 服务的各种特性和功能的文章。如果您对此帖子有反馈,请在评论部分提交。如果您对这篇文章有疑问,请在
作者简介
Prashant Agrawal
是亚马逊 OpenSearch Service 的高级搜索专家解决方案架构师。他与客户紧密合作,帮助他们将工作负载迁移到云端,并帮助现有客户微调集群以提高性能并节省成本。在加入 亚马逊云科技 之前,他帮助各种客户使用 OpenSearch 和 Elasticsearch 进行搜索和日志分析用例。不工作时,你会发现他在旅行和探索新的地方。简而言之,他喜欢做 “吃” → “旅行” → “重复”。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。