elasticsearch优化的点点滴滴

 

请看懂上面这个图:

问自己refresh  flush是什么意思,translog是什么?  文件cache是什么,内存or磁盘?下面的优化参数是小菜一碟。

https://www.jianshu.com/p/15837be98ffd

1、数据刷新优化 flush refesh translog

1、 数据先存到内存buffer中,这时数据不可搜索,同时写事务日志 translog

2、 当 mem buffer满,或者默认每隔1s ,refresh将内存数据生成segment 保存到文件缓存,这时,数据可以被搜索

3、 当translog大到一定的程度,flush是将文件缓存刷新到磁盘,或者每隔30分钟

注意文件缓存(os cache) 也是一块内存

2、JVM参数

为系统内存的75%+

3、系统架构优化 3个master 其他作为data 防止脑裂

4、数据查询优化

5、 索引数据内容优化 比如 索引大的 只保存查询的field到es,其余丢到hbase

https://blog.csdn.net/wwd0501/article/details/78320971

1. index.refresh_interval: "30s"

优化点: 减少刷新频率,降低潜在的写磁盘性能损耗

2. translog优化

优化点: 减少写磁盘的频率

python

{

 "index": {

   "translog": {

     "flush_threshold_size": "1gb",

     "sync_interval": "30s",

     "durability": "async"

   }

 }

}

flush操作的频率是通过translog的大小控制的,当translog大小达到一定值的时候就执行一次flush,对应参数为index.translog.flush_threshold_size,默认值是512mb,

这里调整为1gb,减少flush的次数translog本身是文件,也需要存储到磁盘,它的存储方式通过index.translog.durability和index.translog.sync_interval设定。

index默认情况下,index.translog.durability=request,意为每次请求都会把translog写到磁盘。这种设定可以降低数据丢失的风险,但是磁盘IO开销会较大

这里采用异步方式持久化translog,每隔30秒写一次磁盘

3. index.store.throttle.type: "none"

优化点: 放开merge操作,加快合并,防止因为merge滞后导致index操作被限速

如果不关心查询的性能,可以把index.store.throttle.type设为none,意为不对merge操作限速

这个参数默认配置是针对merge操作限制使用磁盘带宽20MBps

以下设置我认为更合理:https://www.cnblogs.com/technologykai/articles/10899582.html

提升段合并速度:ES 默认对段合并的速度是 20m/s,如果使用了 SSD,我们可以通过以下的命令将这个合并的速度增加到 100m/s。

PUT /_cluster/settings

{

  "persistent" : {

    "indices.store.throttle.max_bytes_per_sec" : "100mb"

  }

}

4. index.merge.scheduler.max_thread_count: 1

优化点: 减少并发并发merge对磁盘的消耗

5. indices.memory.index_buffer_size: "20%"

优化点: 降低被动写磁盘的可能性

6、结论

以上测试可以看到

translog优化禁用的时候集群负载最高,写入性能最差

index refresh操作对写入的性能略有影响

segment merge对写入性能影响非常小

7. index template配置

{

 "order": 0,

 "template": "hy-log-*",

 "settings": {

  "index": {

   "refresh_interval": "30s",

   "number_of_shards": "20",

   "translog": {

    "flush_threshold_size": "1gb",

    "sync_interval": "30s",

    "durability": "async"

   },

   "number_of_replicas": "0"

  }

 },

 "mappings": {

  "_default_": {

   "dynamic_templates": [

    {

     "strings_as_keywords": {

      "mapping": {

       "index": "not_analyzed"

      },

      "match_mapping_type": "string"

     }

    }

   ]

  }

 },

 "aliases": {}

8 压测

按照所有优化项开启的设定,使用python api开启多线程向ES集群发起bulk index请求,同时观察kibana monitor界面,发现index qps达到30w/s,随后集群很快挂掉。

9 优化存储设备

ES 是一种密集使用磁盘的应用,在段合并的时候会频繁操作磁盘,所以对磁盘要求较高,当磁盘速度提升之后,集群的整体性能会大幅度提高。

磁盘的选择,提供以下几点建议:

  1 使用固态硬盘(Solid State Disk)替代机械硬盘。SSD 与机械磁盘相比,具有高效的读写速度和稳定性。

  2 使用 RAID 0。RAID 0 条带化存储,可以提升磁盘读写效率。

  3 在 ES 的服务器上挂载多块硬盘。使用多块硬盘同时进行读写操作提升效率,在配置文件 ES 中设置多个存储路径,如下所示:

path.data:/path/to/data1,/path/to/data2。

避免使用 NFS(Network File System)等远程存储设备,网络的延迟对性能的影响是很大的。

10 禁止swap 

在 ES 中设置。如果上面的方法都不能做到,你需要打开配置文件中的 mlockall 开关,它的作用就是运行 JVM 锁住内存,禁止 OS 交换出去。

在 elasticsearch.yml 配置如下:

bootstrap.mlockall: true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_36013896

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值