如何解决RestClient连接Elasticsearch的连接拒绝及启动失败问题
解决Elasticsearch远程IP连接拒绝与启动Bootstrap检查失败问题
咱们先理清楚逻辑:你用IP连接时出现Connection refused,是因为Elasticsearch默认只绑定localhost,不对外提供服务;而你修改network.host: 0.0.0.0后触发了生产环境的Bootstrap检查,导致启动失败。所以得先解决启动问题,再验证远程连接。
一、修复Elasticsearch启动失败的3项Bootstrap检查
1. 提升进程最大文件描述符
Elasticsearch需要足够的文件描述符来处理大量连接和文件操作:
- 临时生效(当前会话):以root用户执行以下命令,然后重启Elasticsearch:
ulimit -n 65535 - 永久生效:编辑
/etc/security/limits.conf文件,添加以下两行(如果Elasticsearch用的是其他用户,替换elasticsearch为对应用户名):
保存后重新登录系统,再启动Elasticsearch。elasticsearch soft nofile 65535 elasticsearch hard nofile 65535
2. 调整虚拟内存区域vm.max_map_count
Elasticsearch依赖大量虚拟内存,默认值不够用:
- 临时生效:执行以下命令:
sysctl -w vm.max_map_count=262144 - 永久生效:编辑
/etc/sysctl.conf文件,添加一行:
保存后执行vm.max_map_count=262144sysctl -p让配置立即生效。
3. 配置集群发现参数(单节点测试环境适配)
当你设置network.host为非localhost值时,Elasticsearch会认为这是生产环境,要求配置集群发现参数。如果是单节点测试,直接在elasticsearch.yml中添加:
discovery.seed_hosts: ["127.0.0.1"] cluster.initial_master_nodes: ["127.0.0.1"]
如果是多节点集群,你需要根据实际节点IP配置discovery.seed_hosts,并指定所有初始主节点。
完成以上三项配置后,重启Elasticsearch,应该能正常启动了。
二、解决远程IP连接拒绝问题
启动成功后,还需要确保外部能访问到Elasticsearch:
- 确认
network.host配置:确保elasticsearch.yml中network.host: 0.0.0.0已经保存生效,这个配置会让Elasticsearch绑定所有可用网卡,接受外部IP的连接。 - 开放服务器防火墙端口:如果服务器开启了防火墙,需要开放9200端口:
- 用
firewalld的话,执行:firewall-cmd --add-port=9200/tcp --permanent firewall-cmd --reload - 用
iptables的话,添加规则:iptables -A INPUT -p tcp --dport 9200 -j ACCEPT service iptables save
- 用
- 测试你的代码连接:现在再运行你修改后的代码:
应该就能正常建立连接了。val client = Option(new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.1.8", 9200, "http"))))
额外提示(Windows环境)
如果你是在Windows上部署Elasticsearch:
- 文件描述符限制:需要以管理员身份启动Elasticsearch服务,或者在服务属性中调整进程的文件句柄数。
vm.max_map_count:Windows不需要调整这个参数,跳过即可。- 防火墙:在Windows Defender防火墙中添加9200端口的入站规则。
内容的提问来源于stack exchange,提问作者sarah w
相关产品推荐
相关产品推荐

