美文网首页elasticsearch
【es】elasticsearch 集群的9200、9300端口

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

作者: Bogon | 来源:发表于2023-11-07 22:21 被阅读0次

    默认情况下,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

    相关文章

      网友评论

        本文标题:【es】elasticsearch 集群的9200、9300端口

        本文链接:https://www.haomeiwen.com/subject/cjgfwdtx.html