ES-PHP向ES批量添加文档报No alive nodes found in your cluster

ES-PHP向ES批量添加文档报No alive nodes found in your cluster

参考文章phpcurl 请求Chunked-Encoded data 遇到的一个问题

问题描述

为了提高保存数据到es消耗的时间,采取积攒到3000条文档的时候才保存到ES中,之前一直没有问题,昨天新上了几个log服务器后,经常会发现保存失败报如下错误:

No alive nodes found in your cluster
  • 1

首先我要说这个错误真坑啊,以这个关键字搜索问题,花了两天也没解决,后来无意中翻墙搜google,网后翻了好几页看到上面的参考文章,才知道,原来真正的错误信息隐藏在ES-PHPConnection类中,代码如下:

这里写图片描述

添加var_dump($response['error']->getMessage());一行代码来输出一下错误信息,错误信息如下:

cURL error 55: Send failure: Broken pipe
  • 1

首先觉得是curlbug,所以我升级到了最新版本,发现问题还在,然后我调整3000条文档一保存改为500条,发现保存是没问题的,后来我怀疑是curlbody体是不是对大小有限制,但是经过询问得到的回复是没有这方面的限制,但是组长给我了一个提示,curl没有限制,可能是接收方有限制,这个提示给我了新方向,查了一下es果然有配置,配置项为http.max_content_length,默认为100M,然后我尝试了发送不同大小的数据看反应。

  • 第一次:141M,报错
  • 第二次: 40M,保存成功

然后我跟es维护人员确认一下http.max_content_length确实是100M,由此问题定位成功,原因也知道了

解决方法

  • 1.一次性保存500条数据,确保一次性存储数据量不超过100M
  • 2.由原来的VIP(一个host)改为几点IP(多host),这样做的好处是可以重试多次。
原文地址:https://www.cnblogs.com/gaoyuechen/p/9083112.html