Elasticsearch集群状态正常但无法访问localhost:9200问题
问题定位
修改elasticsearch.yml里的network.host为0.0.0.0后,Elasticsearch会自动从开发模式切换到生产模式,强制触发全套bootstrap引导检查。只要有检查项不通过,即使终端显示集群状态为green,9200端口的HTTP服务也不会正常对外响应,就会出现浏览器连接重置、ERR_EMPTY_RESPONSE、Jupyter连接测试返回false的现象。你看到的持续重复输出的WARN日志,就是引导检查不通过的告警提示。
另外注意:Kibana能正常打开5601端口页面,不代表Kibana已经成功连接Elasticsearch,Kibana本身是独立的前端服务,页面能加载只是自身服务启动正常,如果点进内部的索引、节点监控页面报错,就是还没连上ES。
修复步骤(本地学习环境适用)
- 打开Elasticsearch配置文件
elasticsearch.yml,添加如下配置,明确声明当前为单机节点部署,跳过生产环境强制引导检查:
注意YAML配置对缩进要求极严,配置项行首不要加多余空格,否则配置会不生效。discovery.type: single-node - 完全杀掉当前运行的Elasticsearch进程,重新启动。
- 启动后执行端口检查命令,确认9200端口正常监听:
命令输出如果能看到java进程(Elasticsearch)在监听9200端口,再访问lsof -i :9200http://localhost:9200就能看到Elasticsearch返回的版本、节点名等基础信息JSON,Jupyter连接测试也会恢复正常。
补充说明
如果后续要做生产环境部署,不要用上面的单机模式配置绕过检查,需要对照启动日志里的bootstrap check failure具体报错项,逐一修改系统参数满足ES的运行要求,常见的Mac本地触发的检查失败项包括系统文件描述符上限不足、max_map_count虚拟内存参数不符合要求、单进程可用线程数不够。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

