集群规划
- 独立的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
-
该参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
-
把该参数适当调小,原理通(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
相关推荐
[性能]KingbaseES数据库性能调优指南
Elasticsearch(ES)作为NOSQL+搜索引擎的有机结合体,不仅有近实时的查询能力,还具有强大的聚合分析能力。因此在全文检索、日志分析、监控系 统、数据分析等领域ES均有广泛应用。而完整的Elastic Stack体系...
Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能。使用SSD(PCI-E接口SSD 卡/SATA接口SSD盘)通常比机械硬盘(SATA盘/SAS盘)查询速度快5~10倍,写入性能提升不明显。 对于文档检索类查询性能要求...
Elasticsearch是非常灵活且功能丰富的搜索引擎,它提供了许多不同查询数据的方法。...作为分布式系统的Elasticsearch,可能有各种影响查询性能的因素。本文将分析可能导致慢查询的因素,并提供一些优化搜索速度的建议。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,本文档对它的配置及其参数性能调优做了讲解
JVM性能调优具有应用独特性(application specific),就是说,不同的应用情形应该有不同的调整方案,这就要求你首先要观察JVM的运行状态,然后根据观察结果调整参数。没有一个通用的调优方案可以适用于所有的...
1、Elasticsearch 使用建议:介绍在使用 Elasticsearch 进行数据搜索和分析时,应该遵循的一些规范和建议,包括 ES 架构的选择、索引结构的设计、查询语句的优化、写入优化等等,以提高 Elasticsearch 的性能、可靠...
(1)最全面的Elasticsearch运维、管理、调优、故障处理的知识体系:企业级监控体系的搭建,企业级集群部署,集群日常管理策略,集群版本升级方案,集群基准压测方案,集群数据的备份和恢复,系统核心配置参数,性能...
性能调优:提供关于配置分片、副本和内存使用的指导,以及如何避免深度分页等性能杀手。 安全性:强调启用安全特性和限制敏感数据访问的重要性。 备份与恢复:介绍定期备份的最佳实践和如何测试恢复流程。 监控和...
HIVE优化实战分享 HIVE优化实战分享 HIVE优化实战分享
在hbtc2012上的发言,介绍hbase coprocessor的优化。hbase的cp是其自带的分布式并行计算框架。
Elasticsearch 在业务上,主要用于一些业务检索场景(商品检索、订单检索等),构建在 ES 搜索引擎之上。在微盟体系中,商品中台 ES 承载了日均亿级别的查询和高频写入。经历过线上的一些性能挑战之后,逐步的沉淀了...
与kafka,mysql,redis,http,elasticsearch从容错分析析:StateBackend,checkpoint从数据流向角度分析数据源socket通信,本地创建数据,从磁盘文件,从Kafka消息中间件中读取转换操作map :取一个元素并生产一个...
elk日志方案难点总计以及平台参数性能优化设置。包括 kafaka参数性能调优、es数据库参数优化、linux参数优化
OushuDB性能调优实战 TDSQL全局一致性读技术详解 万亿级湖仓一体架构下的统一数据服务平台应用实践 滴普基于ClickHouse的实时分析引擎应用实践 滴普湖仓一体架构探索与实践 腾讯云原生自研数据库内核深度优化最佳...
Flink学习 麻烦路过的各位亲亲给这个项目点个star,太不易了,写了这么多,算是对我坚持下来的一种鼓励吧! 随着时间的推移观星人 本项目结构 如何建造 也许您的Maven conf文件settings.xml镜像可以添加aliyun中央...
但是伴随新的问题到来,对于开发者,框架是易于使用的,屏蔽了底层细节,换来的是对原理的深入理解不够,对性能调优和理论的淡化,在很多优秀的线上产品dubbo、spark、zookeeper、elasticSearch等等,使用了netty...
描述在KingbaseES中SQL语言的使用。我们从描述SQL的一般语法开始,然后解释如何创建保存数据的结构、如何填充数据库以及如何查询它。中间的部分列出了在SQL命令中可用...剩余的部分则留给对于调优数据性能的重要方面。
我学会了使用Spark编写分布式的数据处理程序,并通过调优技巧提高了程序的性能。在实践过程中,我遇到了一些挑战,比如调试复杂的数据流转和处理逻辑,但通过查阅文档和与同学的讨论,我成功地克服了这些困难。最终...
Hbase存储原理、RowKey设计、协处理、Shell访问、Java API访问和Hbase性能调优 ElasticSearch入门、概念基础、基础原理、索引、映射、搜索、聚合和性能优化 Scala入门、函数、类、对象、特征、模式匹配、常用类和...