本文整理自:袋鼠云技术荟 | 某物流客户Elasticsearch集群性能优化案例
客户使用ES来进行数据存储、快速查询业务订单记录,但是经常会出现业务高峰期ES集群的cpu负载、内存使用均较高,查询延迟大,导致前端业务访问出现大量超时的情况,极大影响其客户使用体验。
部分监控如下图:
1、 集群架构如下:
集群节点配置:8数据节点(16C64G);3主节点(8C32G)
2、 集群存在问题分析
与客户业务人员沟通,业务处理中有几个聚合查询会占用较多的内存,且这类查询对准确性要求较高,需精确统计所有匹配结果。
存在4-5T的单个较大索引,该索引字段多达2000+,分片大小普遍60G+,最高达到130G+,是制约查询性能的一个较大瓶颈,另外集群在业务高峰期还会出现经常的fullgc,这是出现访问超时的直接原因。
如图:
与客户开发人员沟通了解集群在业务上存在的问题,结合我们在ES这块的服务经验,从语句参数、索引、架构等多个角度给客户提出调优建议。
1、语句、参数调优
客户已提供4个慢查询语句,语句中聚合查询使用"execution_hint": "map",该执行策略会把命中的记录都捞回内存中,一旦查询结果较大就会占用大量内存。建议使用terminator_after,此方法可以控制查询结果数量,另外将不参与聚合、排序的字段设置为doc_values:false, 节省磁盘空间提升索引速度。
2、 集群架构优化:
在原有集群基础上添加协调节点或者扩容数据节点:
结合客户业务特性,我们推荐客户使用添加协调节点的方式对集群架构进行优化。
3、 集群索引优化:
可以对集群进行索引拆分和使用别名两方面进行优化调整。
集群优化后整体性能有明显提升:
a. ES集群负载、内存较为平稳,业务高峰期不会有较大波动;
b. ES集群FullGC出现频次极大降低,降低对业务的影响;
c. ES聚合查询延迟减小,业务数据查询性能提升,速度达到百毫秒级别