• elasticsearch(六) 之 elasticsearch优化


    elasticsearch 优化

    从硬件上 :

    1. 使用SSD 硬盘,解决io导致的瓶颈。
    2. 增大内存 但不超过32G(单实例建议设置31G) ,elasticsearch 设置不超过机器内存的60%。
    3. 如果负载过高,增加cpu核心数。

    从软件上:

    1. 减少集群的副本数量, 一般集群有1-2两个副本即可,最多有3个副本。
    Elasticsearch 默认副本数量为 3 个,虽然这样会提高集群的可用性,增加搜索的并发数,但是同时也会影响写入索引的效率。
    
    在索引过程中,需要把更新的文档发到副本节点上,等副本节点生效后在进行返回结束。使用 Elasticsearch 做业务搜索的时候,建议副本数目还是设置为 3 个,但是像内部 ELK 日志系统、分布式跟踪系统中,完全可以将副本数目设置为 1 个。
    
    1. 根据业务量设定分片的数量(默认分片是为5个,分片是为了解决一个索引过大),多分片会导致io压力。

    2. 一个索引不要过大--》分索引(按日分,按周分)

    3. 减少索引的document里的字段,在跟需要查询的用户确认他们需要的字段,然后将一些不需要的字段清除。将filebeat的一些name字段,version字段删除。

    4. 针对不使用的index,进行close。我们需要的时候再进行open,可以节约内存和减轻系统的压力。

    curl -XPOST 127.0.0.1:9200/index_name/_close 
    curl -XPOST 127.0.0.1:9200/index_name/_open
    
    1. 增加 Refresh 时间间隔

      为了提高索引性能,Elasticsearch 在写入数据时候,采用延迟写入的策略,即数据先写到内存中,当超过默认 1 秒 (index.refresh_interval)会进行一次写入操作,就是将内存中 segment 数据刷新到操作系统中,此时我们才能将数据搜索出来,所以这就是为什么 Elasticsearch 提供的是近实时搜索功能,而不是实时搜索功能。

      当然像我们的内部系统对数据延迟要求不高的话,我们可以通过延长 refresh 时间间隔,可以有效的减少 segment 合并压力,提供索引速度。在做全链路跟踪的过程中,我们就将 index.refresh_interval 设置为 30s,减少 refresh 次数。

      同时,在进行全量索引时,可以将 refresh 次数临时关闭,即 index.refresh_interval 设置为 -1,数据导入成功后再打开到正常模式,比如 30s。
      如果我们的业务是要求的实时性比较高的,将index.refresh_interval 设置为 -1

    2. 不使用swap(虚拟内存)

      为什么要禁用?禁用swap

    3. 使用elastisearch 自动生成的id(_id)

      也就是我们的document的字段里面不要有_id字段,让该字段由elasticsearch自动生成。这样索引更快。

    从用户使用层

    1. 用户层:用户去搜索的时候需要避免返回比较大的结果集,通过设置默认的搜索时间段,来尽量避免返回较大的结果集。
    2. 用户进行搜索的时候尽量使用过滤器(Filter)这样可以从缩小搜索范围。比如我们在查询报错日志时,我们通过level字段筛选出ERROR等级,然后再进行搜索,这样对系统的压力可以减小,并且搜索速度更快。

    文档:
    官网:

    https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html

    优化方案:
    https://elasticsearch.cn/article/6202

    lucene
    https://elasticsearch.cn/article/6178

    腾讯云优化:https://cloud.tencent.com/developer/article/1156231

  • 相关阅读:
    ural(Timus) 1346. Intervals of Monotonicity
    SGU 223 Little Kings
    poj 1243 One Person
    poj 1185 炮兵布阵
    poj 1191 棋盘分割
    poj 1187 陨石的秘密
    ACMICPC Live Archive 2451 Brackets Sequence
    将时间格式的字符串转换成日期类型浏览器兼容解决方案
    asp.net项目发布容易忽略的debug=true
    使用微软的Ajax控件遇到的后台js提示语句不起作用的解决方案其一
  • 原文地址:https://www.cnblogs.com/operationhome/p/10143257.html
Copyright © 2020-2023  润新知