【Elasticsearch】网络配置

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 网络配置的问题,欢迎随时提问!

相关推荐
2401_897930063 小时前
Kibana 连接 Elasticsearch(8.11.3)教程
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客11 小时前
Elasticsearch:使用机器学习生成筛选器和分类标签
大数据·人工智能·elasticsearch·机器学习·搜索引擎·ai·分类
Elasticsearch1 天前
Elasticsearch:使用机器学习生成筛选器和分类标签
elasticsearch
浮尘笔记2 天前
go-zero使用elasticsearch踩坑记:时间存储和展示问题
大数据·elasticsearch·golang·go
unhurried人生——冕临2 天前
Ubuntu安装Elasticsearch
elasticsearch
这个懒人2 天前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog
愿你天黑有灯下雨有伞2 天前
Docker 安装 Elasticsearch 教程
运维·elasticsearch·docker
遇到困难睡大觉哈哈2 天前
Git推送错误解决方案:`rejected -> master (fetch first)`
大数据·git·elasticsearch
Roam-G2 天前
Elasticsearch 证书问题解决
大数据·elasticsearch·jenkins
qr9j422332 天前
elasticsearch 如果按照日期进行筛选
大数据·elasticsearch·jenkins