首页 > 解决方案 > Elasticsearch:如何知道默认 9200 已在使用时使用的 HTTP 端口号

问题描述

在 Elasticsearch 文档中,针对 http.port 配置指定了以下内容:

http.port

为传入的 HTTP 请求绑定的端口。接受单个值或范围。如果指定了范围,则节点将绑定到范围中的第一个可用端口。

默认为 9200-9300。

假设 Elasticsearch 自动选择端口 9202,因为 9200 已经在使用中。Java 客户端应用程序如何知道选择了哪个端口并且必须使用哪个端口来创建 RestHighLevelClient 对象?有没有办法查询可以提供端口号信息的另一个服务?

提前致谢。


更新

在第一个答案之后,我尝试通过执行以下操作在 Windows 机器(生产环境)中重现这些步骤:

> tasklist | findstr "elasticsearch"
elasticsearch-service-x64     2232 Services                   0    537,764 K

> netstat -aon | find /i "2232"
  TCP    0.0.0.0:9200           0.0.0.0:0              LISTENING       2232
  TCP    0.0.0.0:9300           0.0.0.0:0              LISTENING       2232
  TCP    127.0.0.1:9200         0.0.0.0:0              LISTENING       2232
  TCP    127.0.0.1:9300         0.0.0.0:0              LISTENING       2232
  TCP    127.0.0.1:49201        127.0.0.1:49202        ESTABLISHED     2232
  TCP    127.0.0.1:49202        127.0.0.1:49201        ESTABLISHED     2232
  TCP    127.0.0.1:49203        127.0.0.1:49204        ESTABLISHED     2232
  TCP    127.0.0.1:49204        127.0.0.1:49203        ESTABLISHED     2232
  TCP    127.0.0.1:49205        127.0.0.1:49206        ESTABLISHED     2232
  TCP    127.0.0.1:49206        127.0.0.1:49205        ESTABLISHED     2232
  ...
  TCP    127.0.0.1:49275        127.0.0.1:49276        ESTABLISHED     2232
  TCP    127.0.0.1:49276        127.0.0.1:49275        ESTABLISHED     2232
  TCP    [::1]:9200             [::]:0                 LISTENING       2232
  TCP    [::1]:9300             [::]:0                 LISTENING       2232

结果显示了使用 9200 端口 (http.port) 的几行:

TCP    0.0.0.0:9200           0.0.0.0:0              LISTENING       2232
TCP    127.0.0.1:9200         0.0.0.0:0              LISTENING       2232
TCP    [::1]:9200             [::]:0                 LISTENING       2232

如果我必须解析该结果以获取端口号,我应该查找哪些 IP 地址?还是根本没关系?

标签: elasticsearch

解决方案


RestHighLevelClient是线程安全的,它由应用程序在启动时或执行第一个请求时实例化。它是如何“在幕后”完成的,也许你可以在RestClientBuilder.java 这里查看

不确定这个问题,但如果您不确定哪个端口ES正在使用,您可以检查它

[root@myserver ~]# service elasticsearch status
elasticsearch (pid  5384) is running...

## netstat on pid
[root@myserver~]# netstat -plunt | grep 5384
tcp        0      0 ::ffff:10.100.14.146:9300   :::*                        LISTEN      5384/java
tcp        0      0 ::ffff:10.100.14.19:9200    :::*                        LISTEN      5384/java
tcp        0      0 ::ffff:127.0.0.1:9200       :::*                        LISTEN      5384/java

推荐阅读