transport.asciidoc 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. [[modules-transport]]
  2. == Transport
  3. The transport module is used for internal communication between nodes
  4. within the cluster. Each call that goes from one node to the other uses
  5. the transport module (for example, when an HTTP GET request is processed
  6. by one node, and should actually be processed by another node that holds
  7. the data).
  8. The transport mechanism is completely asynchronous in nature, meaning
  9. that there is no blocking thread waiting for a response. The benefit of
  10. using asynchronous communication is first solving the
  11. http://en.wikipedia.org/wiki/C10k_problem[C10k problem], as well as
  12. being the ideal solution for scatter (broadcast) / gather operations such
  13. as search in Elasticsearch.
  14. [float]
  15. === Transport Settings
  16. The internal transport communicates over TCP. You can configure it with the
  17. following settings:
  18. [cols="<,<",options="header",]
  19. |=======================================================================
  20. |Setting |Description
  21. |`transport.port` |A bind port range. Defaults to `9300-9400`.
  22. |`transport.publish_port` |The port that other nodes in the cluster
  23. should use when communicating with this node. Useful when a cluster node
  24. is behind a proxy or firewall and the `transport.port` is not directly
  25. addressable from the outside. Defaults to the actual port assigned via
  26. `transport.port`.
  27. |`transport.bind_host` |The host address to bind the transport service to. Defaults to `transport.host` (if set) or `network.bind_host`.
  28. |`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`.
  29. |`transport.host` |Used to set the `transport.bind_host` and the `transport.publish_host`.
  30. |`transport.connect_timeout` |The connect timeout for initiating a new connection (in
  31. time setting format). Defaults to `30s`.
  32. |`transport.compress` |Set to `true` to enable compression (`DEFLATE`) between
  33. all nodes. Defaults to `false`.
  34. |`transport.ping_schedule` | Schedule a regular application-level ping message
  35. to ensure that transport connections between nodes are kept alive. Defaults to
  36. `5s` in the transport client and `-1` (disabled) elsewhere. It is preferable
  37. to correctly configure TCP keep-alives instead of using this feature, because
  38. TCP keep-alives apply to all kinds of long-lived connections and not just to
  39. transport connections.
  40. |=======================================================================
  41. It also uses the common
  42. <<modules-network,network settings>>.
  43. [float]
  44. ==== Transport Profiles
  45. Elasticsearch allows you to bind to multiple ports on different interfaces by
  46. the use of transport profiles. See this example configuration
  47. [source,yaml]
  48. --------------
  49. transport.profiles.default.port: 9300-9400
  50. transport.profiles.default.bind_host: 10.0.0.1
  51. transport.profiles.client.port: 9500-9600
  52. transport.profiles.client.bind_host: 192.168.0.1
  53. transport.profiles.dmz.port: 9700-9800
  54. transport.profiles.dmz.bind_host: 172.16.1.2
  55. --------------
  56. The `default` profile is special. It is used as a fallback for any other
  57. profiles, if those do not have a specific configuration setting set, and is how
  58. this node connects to other nodes in the cluster.
  59. The following parameters can be configured on each transport profile, as in the
  60. example above:
  61. * `port`: The port to bind to
  62. * `bind_host`: The host to bind
  63. * `publish_host`: The host which is published in informational APIs
  64. * `tcp.no_delay`: Configures the `TCP_NO_DELAY` option for this socket
  65. * `tcp.keep_alive`: Configures the `SO_KEEPALIVE` option for this socket
  66. * `tcp.keep_idle`: Configures the `TCP_KEEPIDLE` option for this socket, which
  67. determines the time in seconds that a connection must be idle before
  68. starting to send TCP keepalive probes.
  69. Only applicable on Linux and Mac, and requires JDK 11 or newer.
  70. Defaults to -1, which does not set this option at the socket level, but
  71. uses default system configuration instead.
  72. * `tcp.keep_interval`: Configures the `TCP_KEEPINTVL` option for this socket,
  73. which determines the time in seconds between sending TCP keepalive probes.
  74. Only applicable on Linux and Mac, and requires JDK 11 or newer.
  75. Defaults to -1, which does not set this option at the socket level, but
  76. uses default system configuration instead.
  77. * `tcp.keep_count`: Configures the `TCP_KEEPCNT` option for this socket, which
  78. determines the number of unacknowledged TCP keepalive probes that may be
  79. sent on a connection before it is dropped.
  80. Only applicable on Linux and Mac, and requires JDK 11 or newer.
  81. Defaults to -1, which does not set this option at the socket level, but
  82. uses default system configuration instead.
  83. * `tcp.reuse_address`: Configures the `SO_REUSEADDR` option for this socket
  84. * `tcp.send_buffer_size`: Configures the send buffer size of the socket
  85. * `tcp.receive_buffer_size`: Configures the receive buffer size of the socket
  86. [float]
  87. ==== Long-lived idle connections
  88. Elasticsearch opens a number of long-lived TCP connections between each pair of
  89. nodes in the cluster, and some of these connections may be idle for an extended
  90. period of time. Nonetheless, Elasticsearch requires these connections to remain
  91. open, and it can disrupt the operation of the cluster if any inter-node
  92. connections are closed by an external influence such as a firewall. It is
  93. important to configure your network to preserve long-lived idle connections
  94. between Elasticsearch nodes, for instance by leaving `tcp.keep_alive` enabled
  95. and ensuring that the keepalive interval is shorter than any timeout that might
  96. cause idle connections to be closed, or by setting `transport.ping_schedule` if
  97. keepalives cannot be configured.
  98. [float]
  99. ==== Transport Compression
  100. [float]
  101. ===== Request Compression
  102. By default, the `transport.compress` setting is `false` and network-level
  103. request compression is disabled between nodes in the cluster. This default
  104. normally makes sense for local cluster communication as compression has a
  105. noticeable CPU cost and local clusters tend to be set up with fast network
  106. connections between nodes.
  107. The `transport.compress` setting always configures local cluster request
  108. compression and is the fallback setting for remote cluster request compression.
  109. If you want to configure remote request compression differently than local
  110. request compression, you can set it on a per-remote cluster basis using the
  111. <<remote-cluster-settings,`cluster.remote.${cluster_alias}.transport.compress` setting>>.
  112. [float]
  113. ===== Response Compression
  114. The compression settings do not configure compression for responses. {es} will
  115. compress a response if the inbound request was compressed--even when compression
  116. is not enabled. Similarly, {es} will not compress a response if the inbound
  117. request was uncompressed--even when compression is enabled.
  118. [float]
  119. === Transport Tracer
  120. The transport module has a dedicated tracer logger which, when activated, logs incoming and out going requests. The log can be dynamically activated
  121. by settings the level of the `org.elasticsearch.transport.TransportService.tracer` logger to `TRACE`:
  122. [source,console]
  123. --------------------------------------------------
  124. PUT _cluster/settings
  125. {
  126. "transient" : {
  127. "logger.org.elasticsearch.transport.TransportService.tracer" : "TRACE"
  128. }
  129. }
  130. --------------------------------------------------
  131. 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
  132. except for fault detection pings:
  133. [source,console]
  134. --------------------------------------------------
  135. PUT _cluster/settings
  136. {
  137. "transient" : {
  138. "transport.tracer.include" : "*",
  139. "transport.tracer.exclude" : "internal:coordination/fault_detection/*"
  140. }
  141. }
  142. --------------------------------------------------