我如何防止 Amazon Elasticsearch Service 中出现 HTTP 503 服务不可用错误?

上次更新时间:2019 年 8 月 23 日

我查询 Amazon Elasticsearch Service (Amazon ES) 域时,收到 HTTP 503 服务不可用错误。

注意:造成此错误的原因有很多。本文介绍常见的根本原因和解决方案。

简短描述

负载均衡器位于每个 Amazon ES 域的前面。负载均衡器将传入流量分配到数据节点。HTTP 503 错误表示集群中一个或多个数据节点过载,且节点没有足够的容量来处理请求。这种情况通常因传入流量过多或查询开销大造成。

提示:您可以使用 RequestCount Amazon CloudWatch 指标追踪 HTTP 响应代码。

解决方法

使用以下方法之一来解决 HTTP 503 错误:

预置更多计算资源

  • 通过切换到更大的实例向上扩展您的域,或通过在集群中添加更多节点来水平扩展。有关更多信息,请参阅配置 Amazon ES 域
  • 确认您使用的实例类型适合您的使用案例。有关更多信息,请参阅选择实例类型并测试

降低查询的资源使用率

  • 确认您在遵照分区和集群架构的最佳实践。设计拙劣的集群无法使用所有的可用资源。当一些节点处于闲置状态时,另一些节点可能会过载。Elasticsearch 无法从过载的节点中获取文档。
  • 减少至域的并发请求数量。
  • 缩小您的查询范围。例如,如果您按时间范围查询,则缩小日期范围或通过在 Kibana 中配置索引模式来筛选结果。
  • 避免对大型索引执行选择*查询。相反,使用筛选条件查询部分索引并且尽可能少地搜索字段
  • 重建索引并减少分区的数量。您的 Elasticsearch 集群中包含的分区越多,您越有可能收到 Courier 获取错误。由于每个分区都有自己的资源分配和开销,大量的分区会使集群受到压力。要减少您的集群中的分区数量,请参阅我的 Amazon Elasticsearch Service 域已很长时间停滞在“正在处理”状态