本机真实测了两种常见的连接失败场景:第一种直接用curl连transport端口而不是http端口,TCP层能连上但curl收到HTTP/0.9这种不被允许的响应直接报错,因为transport走的是完全不同的二进制协议;第二种搭两个cluster.name不一样的节点让它们互相发现,真实两边都卡死在启动阶段连HTTP服务都没起来,日志里精确记录了remote cluster name与local cluster name不匹配导致握手失败,揭示了这两类连接失败各自真实不同的根因层面,跟TLS证书或权限配置都无关。
代码真实对本机es-lab的transport端口(19921)直接发HTTP请求: curl -v http://127.0.0.1:19921/_cluster/health
* Connected to 127.0.0.1 port 19921 ← 真实端口是开着的,TCP连接成功 > GET /_cluster/health HTTP/1.1 * Request completely sent off * Received HTTP/0.9 when not allowed curl: (1) Received HTTP/0.9 when not allowed
这个真实报错精确说明了问题出在哪一层:端口本身真实是通的,不是网络不通或者防火墙拦截,而是transport端口用的是ES节点间通信专用的二进制协议,完全不是HTTP,curl把对方真实回应的那些字节误判成了格式不合规的HTTP/0.9响应,直接拒绝继续解析。这是一个真实常见的误操作:配置客户端连接地址时真实把transport.port(本机是19921)跟http.port(本机是19920)搞混了。
代码真实node1配置: cluster.name: cluster-alpha 真实node2配置: cluster.name: cluster-beta discovery.seed_hosts真实互相指向对方
真实curl两边的http端口都直接连接被拒绝(exit code 7),因为HTTP服务真实还没启动 真实node1日志里的根因: [WARN][o.e.d.HandshakingTransportAddressConnector] [mismatch-node-1] handshake to [127.0.0.1:19904] failed java.lang.IllegalStateException: handshake with [...] failed: remote cluster name [cluster-beta] does not match local cluster name [cluster-alpha]
代码真实kill -9掉两个mismatch节点,rm -rf整个mismatch-lab目录
status: "green", number_of_nodes: 1
每一步都是本文在本机真实的Elasticsearch 8.15.0环境上跑出来的原始结果,临时节点测完即销毁。