Elasticsearch版本升级后出现大量文档删除问题排查
Elasticsearch集群升级后异常问题排查
集群环境
- 3个master节点:2核2GB t3.small EC2实例
- 2个data节点(data-0、data-1):原2核8GB m6a.large EC2实例,后升级为4核16GB;数据节点最大堆内存4GB
- 运行环境:EKS集群
- 核心索引
40p1r:约9.2亿文档,存储大小1.9TB - 日常流量:平均60次/秒实时文档索引,2次/秒搜索查询
问题背景
将集群从8.3.1版本升级至8.13.4版本后,突发大量文档删除操作,进而引发大规模段合并,导致data节点CPU长时间处于100%状态,期间集群无法正常处理搜索请求与文档索引,目前无法定位大量删除的触发原因。
事件时间线
- 16:18:执行
POST /flush及PUT _cluster/settings {"persistent": {"cluster.routing.allocation.enable": "primaries"}}(实时索引流量未停止) - 16:20:重启data-1节点
- 16:22:data-1节点启动,40个分片逐一分配耗时20-30分钟(此前重启分片分配仅需2-3秒),节点出现多次超过50万文档/秒的删除速率峰值
- 16:41:重启data-0节点
- 16:43:data-0节点启动,表现与data-1一致,分片分配耗时久,出现50万文档/秒的删除速率
- 16:52:data-1节点CPU使用率接近100%
- 17:15:data-0节点CPU使用率接近100%
- 17:30:将data-1升级为4核16GB实例并重启,仍出现高删除速率峰值,最终CPU使用率仍达100%
- 18:06:停止发送索引流量以降低集群负载
- 18:18:所有删除峰值结束,随即出现段合并速率峰值(最高达30万文档/秒)
- 18:45:段合并完成,两个data节点CPU使用率立即下降(节点重启后已重置
cluster.routing.allocation.enable属性)
初步推测
大量段合并由大规模删除操作触发,可能是分段中已删除文档占比达到默认阈值引发自动合并。集群磁盘使用gp3 EBS,监控显示读取吞吐量达到最大值125MB/s,IOPS远低于限制值。
待解疑问
- 为何触发大量删除?4月整月删除速率仅约500文档/秒、合并速率约3.5千文档/秒,升级后突增到50万文档/秒删除、35万文档/秒合并,未在8.3.1至8.13.1的破坏性变更文档中找到相关内容,该现象是否属于正常升级后的行为?
- 为何节点重启后分片分配耗时极久?此前EKS集群版本升级时重启节点,分片分配仅需数秒,但此次ES版本升级+实例规格升级(2核转4核)后,每个节点分片分配耗时约30-40分钟?
- 节点重启后磁盘达到最大吞吐量,是否仅由大量删除操作导致?还是版本升级后会执行特定的大IO操作?
监控截图
- CPU使用率:

- 系统负载:

- data-1删除速率:

- data-0删除速率:

- 段合并速率:

- 操作速率:

内容的提问来源于stack exchange,提问作者Luv
相关产品推荐
相关产品推荐

