elasticsearch

【es】elasticsearch 集群的9200、9300端口

2023-11-07  本文已影响0人  Bogon

默认情况下,ElasticSearch使用两个端口来监听外部TCP流量。

9200端口:用于所有通过HTTP协议进行的API调用。包括搜索、聚合、监控、以及其他任何使用HTTP协议的请求,所有的客户端库都会使用该端口与ElasticSearch进行交互。

9300端口:是一个自定义的二进制协议,用于集群中各节点之间的通信。用于诸如集群变更、主节点选举、节点加入/离开、分片分配等事项。
Es7.0 版本之前9300端口也被用于客户端库的连接,然而这种类型的交互在我们的官方客户端已被废弃,其他地方也不支持。

在 Elasticsearch 的早期版本中,客户端可以直接与 Elasticsearch 节点的 9300 端口进行交互是因为 Elasticsearch 使用了一种名为 Transport 协议的机制来实现节点之间的通信。

Transport 协议是 Elasticsearch 自己定义的一种二进制协议,它在节点之间建立了一个直接的 TCP 连接。这种直接连接的设计有以下几个优点:

高性能:使用 Transport 协议可以实现高性能的节点间通信。二进制协议相对于基于 HTTP 的文本协议来说,通常能够更高效地传输数据,减少了数据的序列化和反序列化的开销。

集群内部通信:Transport 协议设计用于集群内部的节点间通信。这种直接的节点间通信能够更快地传输数据,实现集群的高吞吐量和低延迟。

然而,随着时间的推移,Elasticsearch 开发团队意识到直接与 9300 端口交互的限制和问题。

一些主要的原因包括:

1.复杂性和兼容性:Transport 协议是 Elasticsearch 自己定义的,这使得它在跨版本和跨语言兼容性方面存在一些挑战。为了支持不同的客户端和语言,需要为每个客户端实现自己的 Transport 协议解析器。

2.生态系统支持:直接与 9300 端口交互限制了 Elasticsearch 的生态系统支持。许多现有的客户端库和工具支持基于 HTTP 的 RESTful API,而不是 Elasticsearch 的 Transport 协议。

综合考虑这些因素,Elasticsearch 开发团队决定在较新的版本中引入基于 HTTP 的 RESTful API,取代直接与 9300 端口交互的 Transport 协议。这样可以提供更好的跨语言和跨平台支持,更好地与现有的生态系统集成,并提供更灵活、可扩展和可控的交互方式。

在 Elasticsearch 高版本中,客户端不再直接与 9300 端口进行交互。
从 Elasticsearch 7.0 版本开始,节点间的通信协议发生了变化,采用了基于 HTTP 的 RESTful API 风格。

现在,您可以使用 Elasticsearch 的 Java 客户端(例如 Elasticsearch Java High Level REST Client)或其他支持 RESTful API 的客户端库(如 Python 的 elasticsearch-py 或 Node.js 的 elasticsearch.js)来与 Elasticsearch 集群进行交互。

这些客户端库会使用 Elasticsearch 的 HTTP RESTful API,通过默认的 9200 端口与 Elasticsearch 集群进行通信。这样,您可以使用标准的 HTTP 请求和响应来执行索引、搜索、聚合等操作,而不需要直接与 9300 端口进行交互。

这种变化使得与 Elasticsearch 进行交互更加方便,同时也提供了更好的跨语言和跨平台的支持。

为什么会做出这样的修改?

Elasticsearch 7.0 版本引入了基于 HTTP 的 RESTful API,取代了之前版本中基于 Transport 协议的直接节点间通信。

这个决策有以下几个主要原因:

1.更好的跨语言和跨平台支持:HTTP 是一种通用的协议,几乎所有编程语言和平台都能够方便地使用和集成。通过使用 HTTP RESTful API,Elasticsearch 可以更好地支持多种编程语言和跨平台的开发和集成。

2.更灵活的架构:基于 HTTP 的 RESTful API 允许客户端和 Elasticsearch 节点之间进行松耦合的通信。这意味着客户端和服务器可以独立地进行升级和扩展,而不会相互依赖并受到限制。这样的架构更加灵活和可扩展。

3.更广泛的生态系统支持:基于 HTTP RESTful API 的决策带来了更广泛的生态系统支持。现在,除了 Elasticsearch 提供的官方客户端之外,第三方开发者还可以使用自己喜欢的编程语言和工具来与 Elasticsearch 进行交互,从而扩大了 Elasticsearch 的用户群体和应用场景。

4.更好的安全性和可控性:基于 HTTP 的 RESTful API 提供了更多的安全性和可控性选项。通过使用标准的 HTTP 安全机制(如基本身份验证、SSL/TLS 加密等),可以更好地保护通信和数据的安全性。

总的来说,通过引入基于 HTTP 的 RESTful API,Elasticsearch 提供了更灵活、可扩展和跨平台的交互方式,以满足不同开发者的需求,并提供更好的安全性和可控性选项。

参考

What are ports 9200 and 9300 used for?
https://discuss.elastic.co/t/what-are-ports-9200-and-9300-used-for/238578

关于elasticsearch 9200端口和9300端口区别
https://www.jianshu.com/p/5d7758955baf

上一篇下一篇

猜你喜欢

热点阅读