使用Elasticsearch JavaScript客户端6.0删除索引列表时出现“No Living connections”错误
解决Elasticsearch JavaScript客户端6.0版本删除索引时的"No Living connections"错误
嘿,这个No Living connections错误我之前对接AWS Elasticsearch的时候也碰到过,咱们一步步来排查和解决:
最核心的问题:AWS ES不支持节点嗅探(Sniffing)
你配置里的sniffOnStart: true是关键诱因。AWS Elasticsearch的内部数据节点不会暴露给公网,当客户端开启嗅探功能时,它会尝试自动发现集群内的其他节点,但根本找不到可用节点,最终就会抛出"No Living connections"错误。
解决办法:直接关闭嗅探功能,把sniffOnStart设为false,或者干脆删掉这个配置项。
其他需要排查的细节
- 验证ES域名的可访问性:确保你的代码运行环境(本地/EC2等)能正常访问目标ES域名,可以用curl快速测试:
curl -X GET https://the-es-host-here.us-west-2.es.amazonaws.com - 检查AWS访问权限:如果你的ES域配置了IAM访问控制,要确保运行代码的实体(EC2实例角色/IAM用户)拥有
es:DeleteIndex等相关权限;如果是IP白名单规则,要确认你的IP在允许列表内。 - 先测试单索引删除:先跳过批量操作,尝试删除单个索引验证连接是否正常,比如:
client.indices.delete({ index: 'enduser-2017-12-04' }) .then(res => console.log(res)) .catch(err => console.error(err));
修改后的完整代码示例
const elasticsearch = require('elasticsearch'); const client = new elasticsearch.Client({ hosts: [ "https://the-es-host-here.us-west-2.es.amazonaws.com" ], apiVersion: "6.0", sniffOnStart: false // 关键:关闭嗅探 }); const indices = [ 'enduser-2017-12-04', 'enduser-2017-12-08', 'enduser-2017-12-07', 'enduser-2017-12-01', 'enduser-2017-12-14', 'enduser-2017-12-10', 'enduser-2017-12-27', 'enduser-2017-12-02', 'enduser-2017-12-18', 'enduser-2017-12-22', 'enduser-2017-12-28', 'enduser-2017-12-09', 'enduser-2017-12-03', 'enduser-2017-12-05', 'enduser-2017-12-11', 'enduser-2017-11-29', 'enduser-2017-12-17', 'enduser-2017-12-15', 'enduser-2017-12-19' ]; // 用Promise替代回调,更易调试和捕获错误 client.indices.delete({ index: indices }) .then(response => { console.log('批量索引删除成功:', response); }) .catch(error => { console.error('删除失败:', error); });
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

