Elasticsearch 的网络配置是集群管理和性能优化的重要组成部分。它涉及多个层面的设置,包括节点间通信、客户端访问、安全性以及网络性能优化。以下是结合上述翻译内容对 Elasticsearch 网络配置的详细总结:
---
1.Elasticsearch 网络接口概述
Elasticsearch 节点通过两种网络接口进行通信:
• HTTP 接口:用于客户端与 Elasticsearch 之间的交互,支持 RESTful API 请求。
• 传输接口(Transport Interface):用于节点之间的内部通信,例如集群管理、分片同步等。它使用自定义的二进制协议,通过长连接的 TCP 通道实现高效通信。
两种接口都可以通过 TLS 进行加密,以确保数据传输的安全性。
---
2.默认网络配置
默认情况下,Elasticsearch 仅绑定到`localhost`(`127.0.0.1`),这意味着它只能在本地访问,无法从远程访问。这种配置适用于开发环境或单节点测试环境。如果需要跨多台主机组建集群或允许远程客户端访问,需要调整网络配置。
---
3.常用网络设置
3.1`network.host`
• 作用:设置节点的绑定地址,同时用于 HTTP 和传输流量。
• 默认值:`_local_`(绑定到本地回环地址)。如果启用了安全自动配置,可能会被覆盖为`0.0.0.0`,允许绑定到所有网络接口。
• 建议:在生产环境中,建议显式设置为一个安全的内网地址,以防止节点暴露在公共网络中。
3.2`http.port`
• 作用:定义 HTTP 接口绑定的端口。
• 默认值:`9200-9300`(可以指定一个范围,节点会绑定到第一个可用端口)。
• 建议:在多节点环境中,确保每个节点的 HTTP 端口不冲突。
3.3`transport.port`
• 作用:定义节点间通信的端口。
• 默认值:`9300-9400`(建议设置为单一端口,例如`9300`,以避免端口范围带来的复杂性)。
• 建议:在主节点上,确保端口配置一致,以避免集群间通信问题。
3.4`remote_cluster.port`
• 作用:定义远程集群通信的端口。
• 默认值:`9443`。
• 场景:用于跨集群搜索(CCS)或跨集群复制(CCR)。
---
4.高级网络配置
4.1 特殊值
Elasticsearch 支持使用特殊值(如`_local_`、`_site_`、`_global_`、`_[networkInterface]_`和`0.0.0.0`)自动解析网络地址。这些值可以根据需求绑定到特定的网络接口或全局地址。
4.2 绑定与发布
• 绑定(Binding):节点绑定到的地址,用于接收网络流量。
• 发布(Publishing):节点对外暴露的地址,用于其他节点或客户端访问。
• 建议:在复杂网络环境中,可以分别配置绑定地址和发布地址,以确保节点在所有可能的地址上都可访问。
4.3 高级 TCP 设置
Elasticsearch 提供了多种 TCP 设置,用于优化网络性能和稳定性,例如:
• `network.tcp.keep_alive`:启用 TCP 保活探测,防止连接因长时间空闲而被关闭。
• `network.tcp.no_delay`:启用 TCP 无延迟模式,减少数据传输延迟。
• `network.tcp.send_buffer_size`和`network.tcp.receive_buffer_size`:调整 TCP 发送和接收缓冲区大小,以优化性能。
---
5.HTTP 接口配置
5.1`http.compression`
• 作用:启用 HTTP 响应的压缩,以减少数据传输量。
• 默认值:在非 HTTPS 模式下默认为`true`,在 HTTPS 模式下默认为`false`(出于安全考虑)。
• 建议:如果需要在 HTTPS 下启用压缩,需显式设置为`true`。
5.2 CORS 配置
• 作用:控制跨源资源共享(CORS),允许或限制来自不同源的浏览器请求。
• 默认值:禁用 CORS(`http.cors.enabled: false`)。
• 建议:在需要支持跨域请求时,启用 CORS 并严格限制允许的源(`http.cors.allow-origin`)。
5.3 其他 HTTP 设置
• `http.max_content_length`:限制 HTTP 请求正文的最大大小(默认为`100mb`)。
• `http.max_initial_line_length`和`http.max_header_size`:限制 HTTP URL 和头的最大大小。
---
6.传输接口配置
6.1`transport.compress`
• 作用:控制节点间通信的压缩策略。
• 默认值:`indexing_data`(仅压缩索引数据,平衡网络带宽和 CPU 使用)。
• 选项:
• `false`:不压缩任何数据。
• `true`:压缩所有传输数据。
• 建议:根据集群规模和硬件性能选择合适的压缩策略。
6.2 传输性能优化
• `transport.tcp.keep_alive`和其他 TCP 设置:类似于 HTTP 接口的 TCP 优化。
• `transport.ping_schedule`:定期发送心跳以检测连接故障。
---
7.远程集群通信
远程集群通信(如跨集群搜索和复制)需要额外的网络配置:
• `remote_cluster_server.enabled`:启用远程集群服务。
• `remote_cluster.port`:指定远程集群通信端口。
• 建议:确保远程集群的网络配置安全且性能优化。
---
8.安全性和最佳实践
1. 避免暴露节点:永远不要将未受保护的节点暴露在公共互联网上。如果需要远程访问,建议使用 VPN 或安全组规则限制访问范围。
2. 使用 TLS:为 HTTP 和传输接口启用 TLS,确保数据传输的安全性。
3. 限制发布地址:在多网络接口的主机上,避免使用`0.0.0.0`作为发布地址,以防止节点被意外访问。
4. 监控和日志:启用网络请求追踪(如`HttpTracer`和`TransportService.tracer`),以便在出现问题时快速定位。
---
9.网络线程模型
Elasticsearch 的网络线程模型基于`transport_worker`线程,每个线程负责管理一组 TCP 通道。这些线程负责:
• 接受新连接。
• 发送和接收数据。
• 将请求分发到不同的线程池进行处理。
关键点:
• 如果`transport_worker`线程过于繁忙,可能会导致请求处理延迟。
• 通过调整线程数量(默认为 CPU 核心数)和优化 TCP 设置,可以提高网络性能。
---
10.总结
Elasticsearch 的网络配置涉及多个层面,从基本的绑定和发布地址设置到高级的 TCP 和 HTTP 优化。合理的网络配置可以显著提升集群的性能和安全性,同时避免常见的网络问题(如连接中断、延迟过高和安全漏洞)。在生产环境中,建议根据实际需求和硬件条件进行细致配置,并持续监控网络性能。
如果你有更多关于 Elasticsearch 网络配置的问题,欢迎随时提问!