大叔经验分享(141)ElasticSearch优化实践

1 冷热分离(Hot/Warm/Cold)

Index Lifecircle Management Policy

索引特点

  • Hot: 索引被更新,大量被查询
  • Warm: 索引不更新,偶尔被查询
  • Cold: 索引不更新,很少被查询
  • Delete: 索引不更新,不被查询

参考:https://www.elastic.co/guide/en/elasticsearch/reference/7.0/index-lifecycle-management.html

根据索引特点,可以将es集群划分几个小集群:

  • Hot集群:存放Hot索引
  • Warm集群:存放Warm索引
  • Cold集群:存放Cold索引(非必须)

https://www.elastic.co/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management

最简单的是划分为Hot和Warm来管理,他们的特点是:

  • Hot集群:多CPU,大内存,小硬盘,小Shard,同时应对大量的读写请求
  • Warm集群:少CPU,小内存,大硬盘,大Shard,应对少量的读写请求

当一个索引从Hot集群移动到Warm集群时,通常需要将小Shard变为大Shard,这里需要一个shrink操作,即将一个索引的多个shard合并成更少的shard,比如5个10G的shard合并成1个50G的shard,shrink后的索引可以通过alias为原索引被搜索。

https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-shrink-index.html

2 内存分配

elasticsearch的节点内存分为2个部分:

  • JVM内存
  • Lucene索引内存:主要被磁盘大小、shard大小影响

可以通过磁盘大小来预估第二个Lucene索引的最大占用内存,剩下的绝大部分可以分配给JVM,比如当前节点有32G内存,磁盘占用50%,Lucene内存使用1G,可以预估磁盘占满时Lucene最多使用2G内存,那剩下的30G可以分配绝大部分比如28G给JVM来使用,这样可以最优化节点的内存占用。

3 不同节点间磁盘占用不均

ElasticSearch的集群均衡策略是保证不同节点间Shard数量近似相等,如果不同shard大小相差悬殊,就会出现不同节点磁盘占用不均的情况,具体可以分为两种:

Hot节点磁盘占用不均

调整ILM策略,将Hot节点上的索引滚动策略改为使用大小而不是时间,这样可以减少索引热节点上的shard大小不等的情况,进一步减少磁盘分布不均的可能。

Warm节点磁盘占用不均

可以定期删除空索引,合并小索引等操作减少shard数量,进一步减少磁盘分布不均的可能。

4 其他

磁盘使用百分比

热节点和热节点磁盘使用到90%的时候要及时扩容

性能瓶颈

关注集群中的节点有自身的性能瓶颈以及处理能力,比如

  • max_restore_bytes_per_sec:一定要低于磁盘的极限,否则很容易导致节点假死

  • cluster_concurrent_rebalance和node_concurrent_recoveries:如果Warm节点偶尔出现被master踢掉的情况,有可能是因为shrink或迁移的并发太大超过集群承受能力,这时最好降低这两个并发限制。

posted @ 2022-05-29 19:11  匠人先生  阅读(83)  评论(0编辑  收藏  举报