123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- [[modules-transport]]
- == Transport
- The transport module is used for internal communication between nodes
- within the cluster. Each call that goes from one node to the other uses
- the transport module (for example, when an HTTP GET request is processed
- by one node, and should actually be processed by another node that holds
- the data).
- The transport mechanism is completely asynchronous in nature, meaning
- that there is no blocking thread waiting for a response. The benefit of
- using asynchronous communication is first solving the
- http://en.wikipedia.org/wiki/C10k_problem[C10k problem], as well as
- being the ideal solution for scatter (broadcast) / gather operations such
- as search in Elasticsearch.
- [float]
- === TCP Transport
- The TCP transport is an implementation of the transport module using
- TCP. It allows for the following settings:
- [cols="<,<",options="header",]
- |=======================================================================
- |Setting |Description
- |`transport.tcp.port` |A bind port range. Defaults to `9300-9400`.
- |`transport.publish_port` |The port that other nodes in the cluster
- should use when communicating with this node. Useful when a cluster node
- is behind a proxy or firewall and the `transport.tcp.port` is not directly
- addressable from the outside. Defaults to the actual port assigned via
- `transport.tcp.port`.
- |`transport.bind_host` |The host address to bind the transport service to. Defaults to `transport.host` (if set) or `network.bind_host`.
- |`transport.publish_host` |The host address to publish for nodes in the cluster to connect to. Defaults to `transport.host` (if set) or `network.publish_host`.
- |`transport.host` |Used to set the `transport.bind_host` and the `transport.publish_host` Defaults to `transport.host` or `network.host`.
- |`transport.tcp.connect_timeout` |The socket connect timeout setting (in
- time setting format). Defaults to `30s`.
- |`transport.tcp.compress` |Set to `true` to enable compression (`DEFLATE`)
- between all nodes. Defaults to `false`.
- |`transport.ping_schedule` | Schedule a regular application-level ping message
- to ensure that transport connections between nodes are kept alive. Defaults to
- `5s` in the transport client and `-1` (disabled) elsewhere. It is preferable to
- correctly configure TCP keep-alives instead of using this feature, because TCP
- keep-alives apply to all kinds of long-lived connection and not just to
- transport connections.
- |=======================================================================
- It also uses the common
- <<modules-network,network settings>>.
- [float]
- ==== TCP Transport Profiles
- Elasticsearch allows you to bind to multiple ports on different interfaces by the use of transport profiles. See this example configuration
- [source,yaml]
- --------------
- 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
- --------------
- The `default` profile is a special. It is used as fallback for any other profiles, if those do not have a specific configuration setting set.
- Note that the default profile is how other nodes in the cluster will connect to this node usually. In the future this feature will allow to enable node-to-node communication via multiple interfaces.
- The following parameters can be configured like that
- * `port`: The port to bind to
- * `bind_host`: The host to bind
- * `publish_host`: The host which is published in informational APIs
- * `tcp_no_delay`: Configures the `TCP_NO_DELAY` option for this socket
- * `tcp_keep_alive`: Configures the `SO_KEEPALIVE` option for this socket
- * `reuse_address`: Configures the `SO_REUSEADDR` option for this socket
- * `tcp_send_buffer_size`: Configures the send buffer size of the socket
- * `tcp_receive_buffer_size`: Configures the receive buffer size of the socket
- [float]
- ==== Long-lived idle connections
- Elasticsearch opens a number of long-lived TCP connections between each pair of
- nodes in the cluster, and some of these connections may be idle for an extended
- period of time. Nonetheless, Elasticsearch requires these connections to remain
- open, and it can disrupt the operation of the cluster if any inter-node
- connections are closed by an external influence such as a firewall. It is
- important to configure your network to preserve long-lived idle connections
- between Elasticsearch nodes, for instance by leaving `tcp_keep_alive` enabled
- and ensuring that the keepalive interval is shorter than any timeout that might
- cause idle connections to be closed, or by setting `transport.ping_schedule` if
- keepalives cannot be configured.
- [float]
- === Transport Tracer
- The transport module has a dedicated tracer logger which, when activated, logs incoming and out going requests. The log can be dynamically activated
- by settings the level of the `org.elasticsearch.transport.TransportService.tracer` logger to `TRACE`:
- [source,js]
- --------------------------------------------------
- PUT _cluster/settings
- {
- "transient" : {
- "logger.org.elasticsearch.transport.TransportService.tracer" : "TRACE"
- }
- }
- --------------------------------------------------
- // CONSOLE
- You can also control which actions will be traced, using a set of include and exclude wildcard patterns. By default every request will be traced
- except for fault detection pings:
- [source,js]
- --------------------------------------------------
- PUT _cluster/settings
- {
- "transient" : {
- "transport.tracer.include" : "*",
- "transport.tracer.exclude" : "internal:discovery/zen/fd*"
- }
- }
- --------------------------------------------------
- // CONSOLE
|