`

elasticsearch性能调优

阅读更多

集群规划

  • 独立的master节点,不存储数据, 数量不少于2
  • 数据节点(Data Node)
  • 查询节点(Query Node),起到负载均衡的作用

Linux系统参数配置

文件句柄

Linux中,每个进程默认打开的最大文件句柄数是1000,对于服务器进程来说,显然太小,通过修改/etc/security/limits.conf来增大打开最大句柄数

* - nofile 65535

虚拟内存设置

max_map_count定义了进程能拥有的最多内存区域

sysctl -w vm.max_map_count=262144

修改/etc/elasticsearch/elasticsearch.yml

bootstrap.mlockall: true

修改/etc/security/limits.conf, 在limits.conf中添加如下内容

* soft memlock unlimited
* hard memlock unlimited

memlock 最大锁定内存地址空间, 要使limits.conf文件配置生效,必须要确保pam_limits.so文件被加入到启动文件中。

确保/etc/pam.d/login文件中有如下内容

session required /lib/security/pam_limits.so

验证是否生效

curl localhost:9200/_nodes/stats/process?pretty

磁盘缓存相关参数

vm.dirty_background_ratio 这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存;

vm.dirty_ratio

  1. 该参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。

  2. 把该参数适当调小,原理通(1)类似。如果cached的脏数据所占比例(这里是占MemTotal的比例)超过这个设置,系统会停止所有的应用层的IO写操作,等待刷完数据后恢复IO。所以万一触发了系统的这个操作,对于用户来说影响非常大的。

sysctl -w vm.dirty_ratio=10
sysctl -w vm.dirty_background_ratio=5

swap调优

swap空间是一块磁盘空间,操作系统使用这块空间保存从内存中换出的操作系统不常用page数据,这样可以分配出更多的内存做page cache。这样通常会提升系统的吞吐量和IO性能,但同样会产生很多问题。页面频繁换入换出会产生IO读写、操作系统中断,这些都很影响系统的性能。这个值越大操作系统就会更加积极的使用swap空间。

调节swappniess方法如下

sudo sh -c 'echo "0">/proc/sys/vm/swappiness'

io sched

如果集群中使用的是SSD磁盘,那么可以将默认的io sched由cfq设置为noop

sudo sh -c 'echo "noop">/sys/block/sda/queue/scheduler'

JVM参数设置

在/etc/sysconfig/elasticsearch中设置最大堆内存,该值不应超过32G

ES_HEAP_SIZE=32g
ES_JAVA_OPTS="-Xms32g"
MAX_LOCKED_MEMORY=unlimited
MAX_OPEN_FILES=65535

indice参数调优

以创建demo_logs模板为例,说明可以调优的参数及其数值设定原因。

PUT _template/demo_logs
{
      "order": 6,
      "template": "demo-*",
      "settings": {
         "index.merge.policy.segments_per_tier": "25",
         "index.mapping._source.compress": "true",
         "index.mapping._all.enabled": "false",
         "index.warmer.enabled": "false",
         "index.merge.policy.min_merge_size": "10mb",
         "index.refresh_interval": "60s",
         "index.number_of_shards": "7",
         "index.translog.durability": "async",
         "index.store.type": "mmapfs",
         "index.merge.policy.floor_segment": "100mb",
         "index.merge.scheduler.max_thread_count": "1",
         "index.translog.translog.flush_threshold_size": "1g",
         "index.merge.policy.merge_factor": "15",
         "index.translog.translog.flush_threshold_period": "100m",
         "index.translog.sync_interval": "5s",
         "index.number_of_replicas": "1",
         "index.indices.store.throttle.max_bytes_per_sec": "50mb",
         "index.routing.allocation.total_shards_per_node": "2",
         "index.translog.flush_threshold_ops": "1000000"
      },
      "mappings": {
         "_default_": {
            "dynamic_templates": [               {                  "string_template": {                     "mapping": {                        "index": "not_analyzed",                        "ignore_above": "10915",                        "type": "string"                     },                     "match_mapping_type": "string"                  }               },               {                  "level_fields": {                     "mapping": {                        "index": "no",                        "type": "string"                     },                     "match": "Level*Exception*"                  }               }            ]
         }
        }
      "aliases": {}
   }

replica数目

为了让创建的es index在每台datanode上均匀分布,同一个datanode上同一个index的shard数目不应超过3个。

计算公式: (number_of_shard * (1+number_of_replicas)) < 3*number_of_datanodes

每台机器上分配的shard数目

"index.routing.allocation.total_shards_per_node": "2",

refresh时间间隔

默认的刷新时间间隔是1s,对于写入量很大的场景,这样的配置会导致写入吞吐量很低,适当提高刷新间隔,可以提升写入量,代价就是让新写入的数据在60s之后可以被搜索,新数据可见的及时性有所下降。

"index.refresh_interval": "60s"

translog

降低数据flush到磁盘的频率。如果对数据丢失有一定的容忍,可以打开async模式。

"index.translog.flush_threshold_ops": "1000000",
"index.translog.durability": "async",

merge相关参数

"index.merge.policy.floor_segment": "100mb",
"index.merge.scheduler.max_thread_count": "1",
"index.merge.policy.min_merge_size": "10mb"

mapping设置

对于不参与搜索的字段(fields), 将其index方法设置为no, 如果对分词没有需求,对参与搜索的字段,其index方法设置为not_analyzed

多使用dynamic_template

集群参数调优

{
   "persistent": {
      "cluster": {
         "routing": {
            "allocation": {
               "enable": "new_primaries",
               "cluster_concurrent_rebalance": "8",
               "allow_rebalance": "indices_primaries_active",
               "node_concurrent_recoveries": "8"
            }
         }
      },
      "indices": {
         "breaker": {
            "fielddata": {
               "limit": "30%"
            },
            "request": {
               "limit": "30%"
            }
         },
         "recovery": {
            "concurrent_streams": "10",
            "max_bytes_per_sec": "200mb"
         }
      }
   },
   "transient": {
      "indices": {
         "store": {
            "throttle": {
               "type": "merge",
               "max_bytes_per_sec": "50mb"
            }
         },
         "recovery": {
            "concurrent_streams": "8"
         }
      },
      "threadpool": {
         "bulk": {
            "type": "fixed"
            "queue_size": "1000",
            "size": "30"
         },
         "index": {
            "type": "fixed",
            "queue_size": "1200",
            "size": "30"
         }
      },
      "cluster": {
         "routing": {
            "allocation": {
               "enable": "all",
               "cluster_concurrent_rebalance": "8",
               "node_concurrent_recoveries": "15"
            }
         }
      }
   }
}

避免shard的频繁rebalance,将allocation的类型设置为new_primaries, 将默认并行rebalance由2设置为更大的一些的值

避免每次更新mapping, 针对2.x以下的版本

"indices.cluster.send_refresh_mapping": false

调整threadpool, size不要超过core数目,否则线程之间的context switching会消耗掉大量的cpu时间,导致load过高。 如果没有把握,那就不要去调整。

定期清理cache

为避免fields data占用大量的jvm内存,可以通过定期清理的方式来释放缓存的数据。释放的内容包括field data, filter cache, query cache

curl -XPOST "localhost:9200/_cache/clear"

其它

  • marvel: 安装marvel插件,多观察系统资源占用情况,包括内存,cpu
  • 日志: 对es的运行日志要经常查看,检查index配置是否合理,以及入库数据是否存在异常

调优之后的运行效果

写入量稳定在30K/s

 

原文链接:http://www.cnblogs.com/hseagle/p/6015245.html

分享到:
评论

相关推荐

    Elasticsearch调优实践

    **Elasticsearch调优实践** ...以上是Elasticsearch调优的一些核心点,实践中需要结合具体业务场景进行调整,以实现最佳性能。此外,了解Java编程基础对于深入理解ES内部机制和进行更细粒度的调优也很重要。

    Elasticsearch原理解析与性能调优

    ### Elasticsearch原理解析与性能调优 #### 一、Elasticsearch概述 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,以其强大的搜索能力和灵活性而闻名。它能够快速地存储、搜索和分析大量的数据,并且...

    Elasticsearch数据库全套教程+安装部署+框架原理+开发调用+性能调优等

    Elasticsearch数据库:Elasticsearch性能调优.pdf Elasticsearch数据库:Elasticsearch监控与运维.pdf Elasticsearch数据库:Elasticsearch集群管理.pdf Elasticsearch数据库:Elasticsearch高可用性与容灾策略.pdf ...

    Elasticsearch索引和查询性能调优.pdf

    Elasticsearch是一个强大的分布式搜索引擎,广泛应用于日志分析、实时数据分析和全文...总之,Elasticsearch的性能调优涉及硬件、软件和索引策略等多个层面,需要综合考虑并不断测试优化,以达到最佳的查询和索引效率。

    elasticsearch 性能测试

    在《Elasticsearch 性能测试》这篇博文中,作者可能深入探讨了使用特定工具(如 JMeter)进行性能测试的步骤,以及如何解析测试结果并进行系统调优。PPT 文件 "elasticsearch.ppt" 可能包含了详细的测试计划、案例...

    [性能]KingbaseES数据库性能调优指南.pdf

    ### KingbaseES数据库性能调优指南知识点概览 #### 一、性能概述 **1.1 性能概述** - **1.1.1 什么是性能** - 性能通常指的是系统的响应速度、处理能力和资源利用率等。在数据库领域,性能主要体现在查询速度、...

    人大金仓KingbaseES 数据库性能调优指南 V8

    ### 人大金仓KingbaseES 数据库性能调优指南 V8 #### 一、性能概述 **1.1 什么是性能** 性能是指数据库系统在处理数据时的速度与效率。对于数据库而言,性能主要体现在响应时间、吞吐量、资源利用率等方面。良好...

    Elasticsearch调优实践.pdf

    Elasticsearch(ES)作为NOSQL+搜索引擎的有机结合体,不仅有近实时的查询能力,还具有强大的聚合分析能力。因此在全文检索、日志分析、监控系 统、数据分析等领域ES均有广泛应用。而完整的Elastic Stack体系...

    技术讲解,性能调优

    使用如Prometheus、Grafana等工具进行实时监控,使用ELK(Elasticsearch, Logstash, Kibana)堆栈进行日志收集和分析,是常见的实践。 最后,性能测试和基准测试是评估优化效果的重要手段。通过JMeter、LoadRunner等...

    最新版Elasticsearch调优搜索速度.pdf

    本文将深入探讨影响Elasticsearch查询性能的因素,并提出一系列调优策略。 首先,Elasticsearch的软件生态包括Elastic Stack,由Elasticsearch、Logstash、Kibana、Beats等组件组成,提供了一个端到端的数据解决...

    自用性能调优资料试试试试

    - **日志分析**:通过Logstash、Elasticsearch、Kibana收集和分析日志,发现性能瓶颈。 以上是性能调优的一些核心领域,每个点都包含大量细节和实践技巧。在实际工作中,需要结合具体业务场景,进行有针对性的优化...

    MySQL性能调优与架构设计

    此外,还会讨论MySQL与其他组件如缓存(如Redis)、搜索引擎(如Elasticsearch)的集成,以提升整体系统性能。 在实际应用中,MySQL的性能调优和架构设计需要结合业务场景、硬件资源以及团队技能综合考虑。通过持续...

    Elasticsearch核心配置与性能调优 & 保姆级教程 & 企业级实战-elasticsearch 内存配置

    2.4 Elasticsearch文件描述符配置 2.5 验证更改 03 网络和I/O优化 3.1 网络优化 3.2 I/O优化 04 CPU和线程优化 4.1 设置线程池 4.2 调整并发设置 4.3 调整索引和搜索操作的并发级别 4.4 使用更高效的查询 4.5 监控和...

    Elasticsearch原理和调优

    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,本文档对它的配置及其参数性能调优做了讲解

    浅入深出ElasticSearch构建高性能搜索架构.docx

    5. **性能调优**:学习如何根据应用场景调整ElasticSearch的配置参数,以达到最佳性能。 #### 构建高性能ES搜索架构 本章节将聚焦于如何构建一个高效、稳定的ElasticSearch搜索架构。 1. **集群设计**:根据业务...

    ElasticSearch Java API 中文文档

    11. **性能调优**: 介绍了如何对ElasticSearch进行性能调优。 12. **ElasticSearch Java API版本操作**: 例如ElasticSearch 5.0.1的Java API操作。 13. **滚动搜索 (Scroll API)**: 在处理大量数据集时,可以通过...

    JVM调优全面总结 中文

    JVM性能调优具有应用独特性(application specific),就是说,不同的应用情形应该有不同的调整方案,这就要求你首先要观察JVM的运行状态,然后根据观察结果调整参数。没有一个通用的调优方案可以适用于所有的...

    ElasticSearch + 架构解析 + 最佳实践

    * Performance Tuning:性能调优,用于优化 ElasticSearch 的性能。 * Resource Allocation:资源分配,用于合理地分配 ElasticSearch 的资源。 * Monitoring and Maintenance:监控和维护,用于监控和维护 Elastic...

Global site tag (gtag.js) - Google Analytics