传输模块用于集群内节点之间的内部通信。 从一个节点到另一个节点的每个呼叫都使用传输模块(例如,当 HTTP GET 请求由一个节点处理,并且实际上应该由保存数据的另一个节点处理时)。
传输机制本质上是完全异步的,这意味着没有阻塞线程等待响应。 使用异步通信的好处是首先解决了 C10k 问题,同时也是分散(广播)/收集操作(如 ElasticSearch 中的搜索)的理想解决方案。
TCP 传输是使用 TCP 的传输模块的实现。 它允许以下设置:
设置 | 描述 |
---|---|
transport.tcp.port |
绑定端口范围。 默认为9300-9400。 |
transport.publish_port |
群集中其他节点在与此节点通信时应使用的端口。 当集群节点位于代理或防火墙后面,并且 transport.tcp.port 不能从外部直接寻址时,此功能很有用。 默认为通过 transport.tcp.port 分配的实际端口。 |
transport.bind_host |
绑定传输服务的主机地址。 默认为 transport.host(如果设置)或 network.bind_host。 |
transport.publish_host |
要发布的集群中要连接的节点的主机地址。 默认为 transport.host(如果设置)或 network.publish_host 。 |
transport.host |
用于设置 transport.bind_host 和 transport.publish_host 默认设置为 transport.host 或 network.host。 |
transport.tcp.connect_timeout |
套接字连接超时设置(时间设置格式)。 默认为30秒。 |
transport.tcp.compress |
设置为true以在所有节点之间启用压缩(LZF)。 默认为 false。 |
transport.ping_schedule |
发送固定的 ping 消息,以确保连接保持活动。 传输客户端默认为5s,其他地方为-1(禁用)。 |
它还使用通用网络设置。
Elasticsearch 允许您通过使用传输配置文件绑定到不同接口上的多个端口。请参阅此示例配置:
transport.profiles.default.port:9300-9400
transport.profiles.default.bind_host:10.0.0.1
transport.profiles.client.port:9500-9600
transport.profiles.client.bind_host:192.168.0.1
transport.profiles.dmz.port:9700-9800
transport.profiles.dmz.bind_host:172.16.1.2
默认配置文件是一个特例。如果没有设置特定的配置设置,它将被用作任何其他配置文件的备用。请注意,默认配置文件是群集中其他节点通常连接到此节点的方式。将来,此功能将允许通过多个接口启用节点到节点的通信。
可以配置以下参数:
传输模块有一个专用的跟踪记录器,当它被激活时,会记录进出的请求。 可以通过将 org.elasticsearch.transport.TransportService.tracer 记录器的级别设置为 TRACE 来动态激活日志:
PUT _cluster/settings
{
"transient" : {
"logger.org.elasticsearch.transport.TransportService.tracer" : "TRACE"
}
}
您还可以使用一组包含和排除通配符模式来控制哪些操作将被跟踪。 默认情况下,每个请求都将被跟踪,除了故障检测 ping :
PUT _cluster/settings
{
"transient" : {
"transport.tracer.include" : "*",
"transport.tracer.exclude" : "internal:discovery/zen/fd*"
}
}