ES-PHP向ES批量添加文档报No alive nodes found in your cluster
问题描述
为了提高保存数据到es
消耗的时间,采取积攒到3000
条文档的时候才保存到ES
中,之前一直没有问题,昨天新上了几个log
服务器后,经常会发现保存失败报如下错误:
No alive nodes found in your cluster
- 1
首先我要说这个错误真坑啊,以这个关键字搜索问题,花了两天也没解决,后来无意中翻墙搜google
,网后翻了好几页看到上面的参考文章,才知道,原来真正的错误信息隐藏在ES-PHP
的Connection
类中,代码如下:
添加var_dump($response['error']->getMessage());
一行代码来输出一下错误信息,错误信息如下:
cURL error 55: Send failure: Broken pipe
- 1
首先觉得是curl
的bug
,所以我升级到了最新版本,发现问题还在,然后我调整3000条文档一保存改为500条,发现保存是没问题的,后来我怀疑是curl
的body
体是不是对大小有限制,但是经过询问得到的回复是没有这方面的限制,但是组长给我了一个提示,curl
没有限制,可能是接收方有限制,这个提示给我了新方向,查了一下es
果然有配置,配置项为http.max_content_length
,默认为100M
,然后我尝试了发送不同大小的数据看反应。
- 第一次:141M,报错
- 第二次: 40M,保存成功
然后我跟es维护人员确认一下http.max_content_length
确实是100M,由此问题定位成功,原因也知道了
解决方法
- 1.一次性保存500条数据,确保一次性存储数据量不超过100M
- 2.由原来的VIP(一个host)改为几点IP(多host),这样做的好处是可以重试多次。