ES & Lucene 段合并相关参数

以下参数,在一定程度上可以优化ES节点的IO压力。

整个 merge 参数主要分为以下三类:限速,新段生成,forcemerge 参数。

限速

  1. index.merge.scheduler.max_thread_count

最大 merge 线程数,如果是 ssd 盘可以适当调大该数值

  1. index.merge.scheduler.auto_throttle

是否开启io限流,默认限制为 20MB/s

  1. index.merge.scheduler.max_merge_count

当前最大执行的 merge 任务数

  1. index.merge.policy.max_merge_at_onc

单次最大允许多少个段合并

新段生成

  1. index.merge.policy.floor_segment

小于此的段将“向上取整”到此大小,这是为了防止频繁刷新微小段,从而避免索引中出现长尾效应。默认阈值为 2mb。如果索引比较大,有很多小的 Segment 可以适当提升该阈值,这样可以降低 Segment 的总量,从而降低查询时产生的 io。提升该阈值会带来更频繁的 Merge 操作

  1. index.merge.policy.max_merged_segment

最大的段大小默认是 5GB,ES 默认情况下不会生成大于 5GB 的段,在自动merge中,如果两个段合并后的大小会超过5gb,ES 会放弃该次合并操作。forcemerge 生成的段不受该阈值控制。

  1. index.merge.policy.segments_per_tier

每层允许的段数。ES 在合并过程中,是分层合并的,具体合并流程可以参考 Chris 的博客。更小的值意味着更多的段合并操作和更少的段。该值必须大于等于 max_merge_at_once ,否则会带来频繁的段合并。

forcemerge参数

以上的参数都是控制 ES 的自动 merge,如果 ES 的自动 merge 不能满足需求,或者索引更新频率比较高,可以使用 ES 的 forcemerge api 来强制进行段合并,从而有效降低 Segment 数量和物理移除标记删除文档。

  1. index.merge.policy.expunge_deletes_allowed

配合 only_expunge_deletes 参数使用,意味只删除比例高于该阈值的段进行段合并。

  1. index.merge.policy.max_merge_at_once_explicit

控制 forcemerge 中单次最大段合并数量,用来控制f orcemerge 的段合并速率。

注意:forcemerge会带来大量的 io 和 cpu 占用,且 merge 会导致 cache 失效,一定要在业务低峰期进行,否则可能导致集群在高负载情况下发生雪崩。

translog落盘异步

{"translog":{"flush_threshold_size":"512mb","sync_interval":"5s","durability":"async"}}复制代码

ES 默认的刷盘方式是同步的,在每次写入在操作完成后,都会立刻进行 translog 的落盘操作。同步刷盘可以提供更好的数据保障性工作,但是会带来IO的开销。异步刷盘牺牲了一定的可靠性保障,但是降低了 IO 的开销,性能相对更好。

作者:政采云技术团队

链接:https://juejin.cn/post/7120011857665982478

来源:稀土掘金

猜你喜欢

转载自blog.csdn.net/star1210644725/article/details/129789741