es查询崩溃不可用
来源:10-3 读性能优化

wzywzy
2022-01-04
老师你好 我有一个模糊的问题要请教您
之前公司上收日志存入es集群中 每天上收量大概在20-40g左右 保存的时间为30天
有一段时间 大数据开发发通告说 让我们尽量不要跨多个日期进行搜索日志 因为es会崩溃 ,崩溃后只能让那边重启,很耗时间
请问一下 发生这种情况的可能性是什么,如何解决,谢谢!
写回答
1回答
-
这种实质是一个查询命中的索引过多,即命中的分片过多,导致过多数据载入内存进行计算
尤其当你的查询有聚合类的查询时更严重,这会导致数据节点的 heap 因为短时间载入过多数据而触发严重的 GC
GC时间过长又会导致查询延迟变大,节点响应变慢,进而出现读队列拒绝等情况
还可能出现离群现象(因为长GC导致无法即时回应 master 的心跳检查),离群后因为节点实际没有挂又会立刻申请加群,进一步增加了集群的不稳定
最后整个系统雪崩,只能祭出重启大法。
这种的解决方法是做好索引的分片数规划,比如分片大小控制在30~50GB 左右,可以按周或者月来建立索引,将分片分散在尽量多的数据节点。
优化查询语句,缩小查询命中的分片数等等。
再不行就要考虑是不是要换一个数据产品,尤其是聚合类的查询并不是 es 的长项,这种要考虑用 clickhouse / apache doris 这种专业的 olap 产品
012022-01-05
相似问题