# 传输

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-transport.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-transport.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10027225](http://www.apache.wiki/pages/viewpage.action?pageId=10027225)

贡献者 :  [@琴剑蓝天](http://www.apache.wiki/users/viewuserprofile.action?username=xujie)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

传输模块用于集群内节点之间的内部通信。 从一个节点到另一个节点的每个呼叫都使用传输模块（例如，当 **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_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（禁用）。 |

它还使用[通用网络设置](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-network.html)。

## 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*"
   }
}
```