Elasticsearch数据迁移中因Logstash资源占用导致Elasticsearch集群过载
问题描述
在进行Elasticsearch数据迁移任务时,Logstash作为数据管道,在从源集群读取数据或将处理后的数据写入目标集群的过程中,会消耗大量的CPU和内存资源。如果Logstash的配置或迁移策略不当,可能导致源集群或目标集群的资源被耗尽,出现性能下降甚至集群状态异常的情况。典型现象包括:
- 源端集群: 查询响应变慢、查询请求排队、索引写入延迟、集群节点负载过高、集群状态变为red。
- 目标端集群: 写入操作被拒绝、集群状态变为red、数据迁移任务中断。
问题原因
- Logstash资源占用过高:Logstash在数据迁移时因同时读写操作导致源端和目的端集群CPU、内存资源占用过高,主要由于批量处理参数(batchSize)和并发线程数(pipeline.workers)配置不当引发资源竞争。
- Elasticsearch集群过载:源端集群因数据读取任务堆积导致查询延迟和节点负载过高,同时目的端集群因写入压力过大出现异常状态(如red),反映集群资源配置未匹配实际迁移需求。
- 迁移策略不当:迁移过程中未根据集群负载动态调整策略,一次性迁移数据量过大且缺乏分批次控制,直接超出集群处理能力上限。
解决方法
- 停止Logstash进程,以释放源集群和目标集群的资源,减轻集群压力。
- 进入配置中心页面。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > Logstash”。
- 在集群列表,单击目标集群名称,进入集群详情页。
- 选择“配置中心”页签。
- 勾选目标管道,单击管道列表上方的“热停止”。
- 根据对话框提示,单击“确定”,停止所选管道的数据迁移任务。
热停止成功则可以看到管道列表中目标配置已被移除且该管道数据迁移中断。
- 进入配置中心页面。
- 修复源端或目标端集群的异常状态。
- 调整Logstash配置,降低Logstash的资源占用,避免资源争抢。
- 进入Logstash集群的配置中心页面。
- 在配置文件列表,选择目标配置文件,单击操作列的“编辑”进入编辑配置文件页面。
修改“配置文件内容”,将迁移任务从批量索引缩小为单索引或同类型索引,并按业务优先级分阶段迁移数据。
- 单击“下一页”修改运行参数。
减少“pipeline.workers”降低并行处理压力,默认值为CPU核心数,建议根据实际资源调整。
降低“pipeline.batch.size”减少每次处理的数据量,默认值为125,建议设置为50,以减少资源占用。
增加“pipeline.batch.delay”以减少资源瞬时占用,默认值为50,可以设置为500毫秒,以平滑资源使用。
- 修改完成后,单击“保存”。
- 重启Logstash进程。
- 在配置文件列表,勾选目标配置文件,单击“启动”。
- 在“启动Logstash服务”对话框中,根据业务需要选择“是否保持常驻”。
- 单击“确定”,启动配置文件。
可以在管道列表看到启动的配置文件。
- 查看数据迁移是否成功,可以检查目标集群中的数据条目数量是否与源集群一致。
- 是,故障恢复。
- 否,联系技术支持。