如何防止 Elasticsearch 服务 OOM ?

本文介绍了如何通过极限网关限制ES的最大并发连接数和非重要索引的写入速度,以防止服务中断。通过调整网关配置,可以有效管理大并发访问带来的挑战,并提供了实例和多个索引限速的配置方法。

ES 和传统关系型数据库有很多区别, 比如传统数据中普遍都有一个叫“最大连接数”的设置。目的是使数据库系统工作在可控的负载下,避免出现负载过高,资源耗尽,谁也无法登录的局面。

那 ES 在这方面有类似参数吗?答案是没有,这也是为何 ES 会被流量打爆的原因之一。

针对大并发访问 ES 服务,造成 ES 节点 OOM,服务中断的情况,极限科技旗下的 INFINI Gateway 产品(以下简称 “极限网关”)可从两个方面入手,保障 ES 服务的可用性。

  1. 限制最大并发访问连接数。
  2. 限制非重要索引的请求速度,保障重要业务索引的访问速度。

下面我们来详细聊聊。

架构图


所有访问 ES 的请求都发给网关,可部署多个网关。

限制最大连接数

在网关配置文件中,默认有最大并发连接数限制,默认最大 10000。

entry:
  - name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 10000
    network:
      binding: $[[env.GW_BINDING]]
      # See `gateway.disable_reuse_port_by_default` for more information.
      reuse_port: true

使用压测程序测试,看看到达 10000 个连接后,能否限制新的连接。

超过的连接请求,被丢弃。更多信息参考官方文档

限制索引写入速度

我们先看看不做限制的时候,测试环境的写入速度,在 9w - 15w docs/s 之间波动。虽然峰值很高,但不稳定。

接下来,我们通过网关把写入速度控制在最大 1w docs/s 。
对网关的配置文件 gateway.yml ,做以下修改。

env: # env 下添加
  THROTTLE_BULK_INDEXING_MAX_BYTES: 40485760 #40MB/s
  THROTTLE_BULK_INDEXING_MAX_REQUESTS: 10000 #10k docs/s
  THROTTLE_BULK_INDEXING_ACTION: retry #retry,drop
  THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES: 10 #1000
  THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS: 100 #10

router: # route 部分修改 flow
  - name: my_router
    default_flow: default_flow
    tracing_flow: logging_flow
    rules:
      
您好!对于ElasticsearchOOM(Out of Memory)问题,有几个可能的原因和解决方案。 1. 配置调整:检查Elasticsearch的JVM堆内存设置。默认情况下,Elasticsearch将堆内存设置为1GB,但在处理大量数据时可能会导致OOM。您可以通过编辑elasticsearch.yml文件中的"Xms"和"Xmx"参数来增加堆内存大小。例如,设置为"-Xms4g -Xmx4g"将堆内存设置为4GB。请确保服务器具有足够的物理内存来支持您设置的堆内存大小。 2. 索引优化:检查索引的设置和映射。索引的映射定义了字段类型和分析器等信息,如果不正确地配置索引,可能会导致内存占用过高。尽量使用合适的字段类型,并避免在索引中存储大量的不必要字段。 3. 查询调优:检查查询的复杂性和性能。复杂的查询可能会消耗大量的内存资源,特别是在处理大量数据时。优化查询可以包括使用更简单的查询语句、减少返回结果的数量或使用聚合操作等。 4. 分片设置:检查索引的分片设置。每个分片都需要一定数量的内存来处理数据。如果您的集群中有过多的分片,可能会导致内存不足。您可以减少分片的数量或增加服务器的内存来解决此问题。 5. 版本更新:如果您正在使用旧版本的Elasticsearch,考虑升级到最新版本。每个版本都会进行性能和稳定性的改进,可能会提供更好的内存管理和OOM问题的修复。 请注意,OOM问题可能有多个原因,并且解决方案可能因您的具体环境和使用情况而有所不同。建议您在修改配置之前备份数据和配置文件,并在生产环境中进行测试和验证。如果问题仍然存在,您可以检查Elasticsearch的日志文件以获取更多详细信息,或者参考Elasticsearch社区论坛等资源寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值