我的公司正在生产环境中运行 Elasticsearch dockerized。它是我们主要应用程序中非常重要的组成部分。
docker run --detach \
--name elastic \
--network xxx \
--expose 9200 \
--env TZ="Europe/Warsaw" \
--volume /docker/elastic:/usr/share/elasticsearch/data \
--restart always \
--env discovery.type="single-node" \
--env xpack.security.http.ssl.enabled="true" \
--env xpack.security.transport.ssl.verification_mode="none" \
--env xpack.security.enabled="false" \
--env xpack.security.enrollment.enabled="false" \
--env indices.query.bool.max_clause_count="10240" \
--memory 8g \
初始部署几周后,我们在中午遇到了一堵持续几分钟的错误,中断了我们的主要服务。
错误:
jakarta.servlet.ServletException: Request processing failed: java.util.concurrent.CompletionException: org.springframework.data.elasticsearch.UncategorizedElasticsearchException: [es/search] failed: [search_phase_execution_exception] all shards failed
当我们测试 ES 几个月时,它从未发生过。 我们使用 2 个索引(每个索引 1 个分片),它们没有太多数据(可能都是 200mb),但经常被查询。
这可能是什么原因?是否弹性运行一些内部流程,如果可以,可以将它们安排在不同的时间(晚上)。将索引重新制作成 2 个或更多分片是否有助于将来解决这个问题,即使它们很小? 任何帮助表示赞赏。
什么也没尝试。不知道如何重现此错误。
您应该提供有关您的弹性集群的更多信息,最好也分担 JVM 内存压力。
我想到的第一件事是您使用过多的 Scroll API 或 Search After using (Point in a time) 这会导致内存溢出并导致 Elastic 不稳定。
最好的选择是检查内存压力,如果达到 80% 左右,则增加压力。