性能与稳定并存 Elasticsearch调优实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. Elasticsearch调优实践 morningchen Tencent TEG CFD
2. SPEAKER morningchen 陈曦 腾讯TEG基础架构部 后台开发工程师 腾讯云Elasticsearch Service、CTSDB后台开发者。 在日志分析、大数据搜索、时序数据分析等方面有丰富的实践经验。
3. CONTENTS • Elasticsearch基本原理 • Elasticsearch调优 • 我们的工作
4. Elasticsearch基本原理 • Elastic Stack • 数据模型 • 数据持久化
5. Elasticsearch基本原理 – Elastic Stack • Elasticsearch • 高性能 • Elastic Stack: 数据采集、清洗、存储、可视化的 完整解决方案 基于Lucene实现的搜索引擎 分布式集群,可线性扩展系统性能 多分片存储,高并发写入、查询 • 高可靠 多副本存储 基架、机房感知,主从容灾 • 易管理 弹性可伸缩、 数据自动均衡 • 易使用 REST接口、强大的聚合分析能力 • 广泛的应用领域
6. Elasticsearch基本原理 – 数据模型 • Logical Namespace Index:数据分类 • Physical Resources Node:一个ES实例,承载多个Shard Shard:Part of Index Primary – Replica Lucene Index Segment:Part of Lucene Index
7. Elasticsearch基本原理 – 数据持久化 • Translog Records every operation • Lucene Data Storage • Refresh New Segment Once every second • Flush Fsync: Segment,Translog -> Disk • Merge Merge segments to big one
8. CONTENTS • Elasticsearch基本原理 • Elasticsearch调优 • 我们的工作
9. Elasticsearch调优 • 降低存储成本 • • • 字段存储选项 为字符串字段选择合适的格式 提升集群稳定性 • • 控制index的分片数和副本数 提高集群性能 • 持久化参数 • 写入优化 • 查询优化
10. 降低存储成本-字段存储选项 分类 控制 倒排索引 数据存储 作用 检索查询 index 行存 原始数据 _source 列存 聚合排序 doc_values
11. 降低存储成本-字符串字段格式 • 分词/全文检索 • options:docs、freqs、positions、offsets text • fields:排序聚合 • 不分词,不支持全文检索 keyword • 相比于text存储成本低,写入速率高
12. 提升集群稳定性-控制index的分片数 Node 1 Node 0 Shard 1 Bulk Queue BulkRequest Node 2 BulkShardRequest Shard 2 Bulk Queue Shard 0 Bulk Queue Index 概念 问题 建议 100GB以下的index,设置 3~5个shard。 分片(shard) shard数量过多,写入放大,导致 一个index由多个shard组成, bulk queue打满,拒绝率上升 每个shard承载index的一部 分数据 100GB以上的index: 数量过小,无法充分利用多节点资源, 把单个shard的数据量控制 机器负载不均衡 在(20GB~50GB)
13. 提高集群性能-控制index的副本数 概念 副本(replica) 同一个shard有多少个备份 问题 replica过多存储成本上升 replica过少,影响查询性能 建议 查询压力较大的index,通 过多个副本均摊查询压力
14. 提高集群性能-持久化参数 refresh • 调整刷新间隔 translog • 异步刷新 • 调整刷新间隔 merge • 调整并发
15. 提高集群性能-写入方式 • 使用bulk批量写入 每个bulk的doc数量设定区间推荐为1k~1w,具体可根据业务场景选取。 • 不指定 _id 写入数据时不指定doc_id,跳过查询_id的步骤,提高写入效率。 • 使用routing 将routing相同的数据写入到同一个分片中。 查询时指定routing,只查询routing指向的那个分片,显著降低调度开销,提升查询效率。 • 让index压力分摊至多个节点 total_shards_per_node:强制限定一个节点上某个index的shard数量。 让shard尽量分配到不同节点上,避免集群中出现过热节点,影响写入/查询性能。 • 综合考虑整个index的shard数量 如果shard数量(不包括副本)超过50个,就很可能引发写入/查询缓慢的问题。 可考虑把该index拆分为多个独立的index,分摊数据量。
16. 提高集群性能-查询方式 使用query-bool-filter 使用场景 • 非全文索引 • 精确查找目标数据 优点 • 不计算score • 缓存filter的结果集,加速后续查询
17. CONTENTS • Elasticsearch基本原理 • Elasticsearch调优 • 我们的工作
18. 我们的工作 • • 运管平台 降低存储成本 • • • 倒排索引内存优化 冷热分离 提升集群稳定性 • • • 集群均衡策略优化 自研限流功能 提升集群性能 • 查询计划优化
19. 运管平台 • 自动化运维系统 集群管理 监控告警 • 插件管理 中文分词插件 SQL插件 数据导出插件 . . . • Index管理 数据过期 Index Rollover . . . • 其他 Kibana 跨机房容灾 Dedicated Master . . .
20. 降低存储成本-倒排索引内存优化 • • 同一个block中的terms,共用FST的同一路径 • block FST:Finite State Transducer 常驻JVM内存(Segment Memory) ,无法被回 收,加速检索 Segment Memory :disk = 1:500 极端情况比例超过1:200(只存索引) 1TB的数据需要2GB JVM 内存 Term Index Term Dictionary Posting List 调整block大小,内存使用降低50% 改为LRU/off-heap 以支持低成本大容量节点(20TB+)
21. 降低存储成本-冷热分离 • Node Attribute • Index Allocation Filter Cluster Attribute: Hot Web UI Attribute: Code Hot Node 0 Cold Node 0 Job Scheduler Allocation Create Job Master 1 Search Job Master 2 Old Index Filter Hot Node 1 Cold Node 1 Hot Node 2 Cold Node 2 SSD SATA Master 3
22. 集群稳定性优化-集群均衡策略优化 Rebalance Shard分配算法优化 避免新增节点压力过大 • 源生逻辑 新增shard大概率被分配到新节点 Node1 Node2 Node3 New Node 调整参数,不考虑shard分布,导致shard分配不均 新增Shard • 我们的逻辑 在保持原有逻辑的基础上,尽量随机分配shard ShardFailed去重优化 Shard分配速度优化 新建Index
23. 集群稳定性优化-自研限流功能 测试环境: 增加限流功能 集群规格:24C 64GB(JVM 32G) SSD * 3 防止集群压力过大,导致OOM 写入方式:100个线程,bulk_size: 5w,doc:12个字段 源生ES:OOM RestAction后限流(有json反序列化的过程) 写 入 通 过 率 RestAction前限流(无json反序列化的过程) JVM 使用率 Json解析 Request Rest Action 写入 Transport Action
24. 集群性能优化-查询计划优化 大查询缓存策略优化 避免加载过大缓存,拖慢查询速度 Fetch轮询策略优化 Merge策略优化 • 源生ES 执行查询时,Lucene 会拆分 ES 的查询条件为多个子查询。 子查询执行到第五次 Lucene 会对子查询结果进行缓存。 针对短时间范围、小数据量的查询,缓存结果有利于多次重复的查询。 但是针对大范围长时间的查询,数据量非常大的时候,缓存的过程会非常耗时,且缓存重复利用率不高。 • 优化后的ES 为此,我们针对大数据量的查询缓存机制做了优化。 在这种场景下,我们会先对查询目标数据量做预估,如果超过一定的阈值(可配置)则不进行缓存。
25. 我们的工作-产品 Elasticsearch调优实践 CTSDB简介性能测试
26.

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.3. UTC+08:00, 2024-12-07 22:30
浙ICP备14020137号-1 $访客地图$