云搜索服务 CSS-配置Elasticsearch集群读写流量控制策略2.0:开启内存流控

时间:2024-10-26 16:09:32

开启内存流控

  1. 执行如下命令,开启内存流控。
    PUT /_cluster/settings
    {
      "persistent": {
        "flowcontrol.memory.enabled": true,
        "flowcontrol.memory.heap_limit": "80%"
      }
    }
    表3 内存流控的配置项说明

    配置项

    类型

    说明

    flowcontrol.memory.enabled

    Boolean

    内存流控开关,开启后持续监控内存使用情况。

    取值范围:
    • true
    • false(默认值)

    flowcontrol.memory.heap_limit

    String

    节点堆内存的阈值,限制节点全局堆内存的使用率,超过此值将进行流量反压。

    取值范围:10%-100%

    默认值:90%

    说明:
    • 默认值90%是一个比较保守的阈值,即堆内存大于90%使用量时会停止读取客户端超过64KB的大请求,直至堆内存下降。如堆内存下降到85%,会开始允许最多一次读取“5%×堆内存最大值”的客户端数据量。如果堆内存持续超过90%,则无法放开客户端连接的请求读取,此时会尝试触发GC算法进行垃圾回收,直到堆内存低于所设定的阈值。
    • 日常使用时可以将“flowcontrol.memory.heap_limit”阈值设置为80%或以下,保证节点有一定的堆内存余量,供写入内存以外的行为使用,比如:Elasticsearch查询、Segment merge等。

    flowcontrol.holding.in_flight_factor

    Float

    反压释放因子,原理类似于熔断器“network.breaker.inflight_requests.overhead”参数。内存达到限制值时,该值越大反压越强,写入流量将受限。

    取值范围:≥0.5

    默认值:1.0

    flowcontrol.holding.max

    TimeValue

    每个请求最长的延迟时间,当延迟超过此值时可以设置断开该请求反压或断开请求链路。详见“flowcontrol.holding.max_strategy”配置。

    取值范围:≥15s

    默认值:60s

    flowcontrol.holding.max_strategy

    String

    超过最大延迟时间后的运行策略。

    取值范围:
    • keep(默认值):如果堆内存仍在高位,选择继续反压 - 何时执行请求仍由服务器根据实时内存自主决定。
    • soft:如果堆内存仍在高位,也必须执行该请求。执行/拒绝权力交给inFlight熔断器。
    • hard:如果堆内存仍在高位,丢弃该请求,同时断开该请求的客户端连接。

    flowcontrol.memory.once_free_max

    String

    被暂停的请求队列一次性最大重新打开的内存,防止强压场景下短暂的低内存现象一次性冲挂集群。

    取值范围:1%-50%

    默认值:10%

    flowcontrol.memory.nudges_gc

    Boolean

    写入压力过大时(1s检查一次反压连接池,所有现有连接均被阻塞无法放开新的写入请求),是否尽力触发垃圾回收,保证写入稳定性。取值:

    • true(默认值)
    • false

    当所有参数指设置为“null”时,表示恢复配置默认值。

  2. 执行如下命令,关闭集群内存流控。
    PUT /_cluster/settings
    {
      "persistent": {
        "flowcontrol.memory.enabled": false
      }
    }
support.huaweicloud.com/usermanual-css/css_01_0192.html