传输

传输模块用于集群内节点之间的内部通信。 从一个节点到另一个节点的每个呼叫都使用传输模块(例如,当 HTTP GET 请求由一个节点处理,并且实际上应该由保存数据的另一个节点处理时)。

传输机制本质上是完全异步的,这意味着没有阻塞线程等待响应。 使用异步通信的好处是首先解决了 C10k 问题,同时也是分散(广播)/收集操作(如 ElasticSearch 中的搜索)的理想解决方案。 

TCP传输

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_hosttransport.publish_host 默认设置为 transport.hostnetwork.host
transport.tcp.connect_timeout 套接字连接超时设置(时间设置格式)。 默认为30秒。
transport.tcp.compress 设置为true以在所有节点之间启用压缩(LZF)。 默认为 false
transport.ping_schedule 发送固定的 ping 消息,以确保连接保持活动。 传输客户端默认为5s,其他地方为-1(禁用)。

它还使用通用网络设置

TCP传输配置文件

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

默认配置文件是一个特例。如果没有设置特定的配置设置,它将被用作任何其他配置文件的备用。请注意,默认配置文件是群集中其他节点通常连接到此节点的方式。将来,此功能将允许通过多个接口启用节点到节点的通信。

可以配置以下参数:

  • port:要绑定的端口 
  • bind___host:要绑定的主机
  • publish_host:在信息API中发布的主机
  • tcp_no_delay:为此套接字配置 TCP_NO_DELAY 选项
  • tcp_keep_alive:为此套接字配置 SO_KEEPALIVE 选项
  • reuse_address:配置此套接字的 SO_REUSEADDR 选项
  • tcp_send_buffer_size:配置套接字的发送缓冲区大小
  • tcp_receive_buffer_size:配置套接字的接收缓冲区大小

传输跟踪器

传输模块有一个专用的跟踪记录器,当它被激活时,会记录进出的请求。 可以通过将 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*"
   }
}