我的 Amazon OpenSearch Service 集群中的一个节点出现了故障,我想防止这种情况发生。
简短描述
每个 OpenSearch Service 节点都在一个单独的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上运行。发生故障的节点是未响应来自其他节点的检测信号的实例。检测信号属于周期性信号,用于监控集群中数据节点的可用性。
集群节点出现故障的常见原因包括:
解决方法
检查出现故障的节点
1. 登录 OpenSearch Service 控制台。
2. 在导航窗格的 Managed clusters(托管集群)下,选择 Domains(域)。
3. 选择您的 OpenSearch Services 域的名称。
4. 选择 Cluster health(集群运行状况)选项卡,然后选择 Nodes(节点)指标。如果节点数少于您为集群配置的数量,则表示有节点发生故障。
注意:****节点指标可能因会因集群配置更改或者对服务的任何例行维护而不准确。这是预期行为。
确定和排查高 JVM 内存压力
JVM 内存压力是指用于 OpenSearch Service 集群中所有数据节点的 Java 堆的百分比。高 JVM 内存压力可能导致 CPU 利用率居高不下,还会产生其他集群性能问题。
JVM 内存压力取决于以下条件:
- 集群上的数据量与资源数量之间的比例。
- 集群上的查询负载。
随着 JVM 内存压力的增加,会发生以下情况:
- 75% 时:OpenSearch Service 将启动并发标记扫描(CMS)垃圾收集器。CMS 收集器与其他进程一起运行,将暂停和中断降至最低限度。
**注意:**OpenSearch Service 向 Amazon CloudWatch 发布了几个垃圾收集指标。这些指标可帮助您监控 JVM 内存使用率。有关更多信息,请参阅使用 Amazon CloudWatch 监控 OpenSearch 集群指标。
- 高于 75%:如果 CMS 收集器无法回收足够的内存且使用率仍高于 75%,则 OpenSearch Service JVM 会尝试释放内存。OpenSearch Service JVM 还会尝试通过减慢或停止进程来防范 JVM OutOfMemoryError (OOM) 异常。
- 如果 JVM 继续增长但空间没有被回收,则 OpenSearch Service JVM 会终止尝试分配内存的进程。如果某个关键进程被终止,一个或多个集群节点可能会发生故障。最佳实践是保持 CPU 利用率低于 80%。
要防止 JVM 内存压力高的问题,请遵循以下最佳实践:
- 避免较大范围的查询,例如通配符查询。
- 避免同时发送大量请求。
- 确保使用适当数量的分片。有关索引策略的更多信息,请参阅选择分区数量。
- 确保您的分片在节点之间均匀分布。
- 避免聚合文本字段。这有助于避免增加字段数据。字段数据越多,占用的堆空间越多。使用 GET _cluster/stats API 操作来检查字段数据。有关更多信息,请参阅 Elasticsearch 文档中的 fielddata。
- 如果您必须聚合文本字段,请将映射类型更改为关键字。如果 JVM 内存压力过高,则使用以下 API 操作清除字段数据缓存:POST /index_name/_cache/clear(索引级缓存)和 POST */_cache/clear(集群级缓存)。
**注意:**清除缓存可能会中断正在进行的查询。
确定和排查硬件故障问题
有时,硬件故障会影响集群节点的可用性。要限制潜在硬件故障的影响,请考虑以下因素:
相关信息
Amazon OpenSearch Service 的操作最佳实践
如何使 Amazon OpenSearch Service 域的容错能力更强?
如何纵向扩展或横向扩展 Amazon OpenSearch Service 域?
我的 Amazon OpenSearch Service 域为什么卡在 "Processing"(正在处理)状态?