导语: 腾讯云CDN上每天产生大量回源日志,回源日志通常用在问题定位的时候比较有用。这里使用filebeat+logstash+elasticsearch的方案收集、存储日志数据并提供查询。当前的使用场景里,每天有70亿条日志需要存储,属于写多读少的场景。本文整理了在搭建elasticsearch集群的时候需要注意的配置项,通过对这些配置项的调整,期望提高elasticsearch写入的性能。
未进行配置优化之前,ES集群负载非常高,主要表现在磁盘IO上,写入的qps在2万/s左右 为了提高写入的性能,笔者搜集了官方文档以及一些资料,有如下优化措施。
python { "index": { "translog": { "flush_threshold_size": "1gb", "sync_interval": "30s", "durability": "async" } } }
关于segment merge有两个调整,(1)减少并发merge的线程数,(2)放开merge的磁盘带宽限制。这里猜测是因为,merge操作是要做的,但是并发的merge比较耗磁盘IO,折中的方案是减少并发,加强单线程merge
以上配置全部用上之后,集群负载瞬间降低了,但是不清楚是哪个配置,或者哪些配置的影响比较大,下面通过测试确认了这些配置的影响
使用现网流量进行测试 将上述全部优化项启用的时候作为基准,分别禁用单个优化项,观察ES写入性能和集群负载
对比组 | 时间 | qps | 负载 | 说明 |
---|---|---|---|---|
基准 | 14:30~15:00 | 61685 | 3 | - |
并发merge线程数设为默认(15:09) | 15:30~16:00 | 64831 | 3 | 刚修改配置qps有个小凸尖,随后平稳 |
禁用translog优化(16:07) | 16:12~16:22 | 18399 | 39 | qps暴跌,负载猛增 |
refresh interval使用默认值1s(16:28) | 16:31~17:01 | 57012 | 5 | qps比基准微降,负载微曾 |
开启merge限流(17:05) | 17:10~17:20 | 61862 | 2.5 | 和基准持平 |
按照所有优化项开启的设定,使用python api开启多线程向ES集群发起bulk index请求,同时观察kibana monitor界面,发现index qps达到30w/s,随后集群很快挂掉。
以上测试可以看到
cluster.routing.allocation.enable: all
bootstrap.system_call_filter: false
discovery.zen.ping.unicast.hosts: ["host0", "host1", "host2"]
thread_pool.bulk.queue_size: 6000
network.host: ${lanip}
cluster.routing.allocation.node_concurrent_recoveries: 128
path.data:
- /data1/cdn_log/data
- /data2/cdn_log/data
- /data3/cdn_log/data
- /data4/cdn_log/data
- /data5/cdn_log/data
- /data6/cdn_log/data
- /data7/cdn_log/data
- /data8/cdn_log/data
- /data9/cdn_log/data
- /data10/cdn_log/data
- /data11/cdn_log/data
- /data12/cdn_log/data
node.master: false
path.logs: /data/log/hy-es
discovery.zen.minimum_master_nodes: 2
bootstrap.memory_lock: false
node.data: true
#node.attr.rack: r1
http.port: 9200
gateway.recover_after_data_nodes: 7
node.name: node-5
gateway.recover_after_master_nodes: 2
cluster.name: your_cluster_name
xpack.security.enabled: false
action.destructive_requires_name: true
indices.recovery.max_bytes_per_sec: 200mb
indices.memory.index_buffer_size: 20%
{
"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": {}
}
以上欢迎各位交流,有不合理的地方欢迎指正[抱拳]
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。