transport.asciidoc 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. === TCP Transport
  16. The TCP transport is an implementation of the transport module using
  17. TCP. It allows for the following settings:
  18. [cols="<,<",options="header",]
  19. |=======================================================================
  20. |Setting |Description
  21. |`transport.tcp.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.tcp.port` is not directly
  25. addressable from the outside. Defaults to the actual port assigned via
  26. `transport.tcp.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` Defaults to `transport.host` or `network.host`.
  30. |`transport.tcp.connect_timeout` |The socket connect timeout setting (in
  31. time setting format). Defaults to `30s`.
  32. |`transport.tcp.compress` |Set to `true` to enable compression (`DEFLATE`)
  33. between 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 to
  37. correctly configure TCP keep-alives instead of using this feature, because TCP
  38. keep-alives apply to all kinds of long-lived connection and not just to
  39. transport connections.
  40. |=======================================================================
  41. It also uses the common
  42. <<modules-network,network settings>>.
  43. [float]
  44. ==== TCP Transport Profiles
  45. Elasticsearch allows you to bind to multiple ports on different interfaces by the use of transport profiles. See this example configuration
  46. [source,yaml]
  47. --------------
  48. transport.profiles.default.port: 9300-9400
  49. transport.profiles.default.bind_host: 10.0.0.1
  50. transport.profiles.client.port: 9500-9600
  51. transport.profiles.client.bind_host: 192.168.0.1
  52. transport.profiles.dmz.port: 9700-9800
  53. transport.profiles.dmz.bind_host: 172.16.1.2
  54. --------------
  55. 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.
  56. 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.
  57. The following parameters can be configured like that
  58. * `port`: The port to bind to
  59. * `bind_host`: The host to bind
  60. * `publish_host`: The host which is published in informational APIs
  61. * `tcp_no_delay`: Configures the `TCP_NO_DELAY` option for this socket
  62. * `tcp_keep_alive`: Configures the `SO_KEEPALIVE` option for this socket
  63. * `reuse_address`: Configures the `SO_REUSEADDR` option for this socket
  64. * `tcp_send_buffer_size`: Configures the send buffer size of the socket
  65. * `tcp_receive_buffer_size`: Configures the receive buffer size of the socket
  66. [float]
  67. ==== Long-lived idle connections
  68. Elasticsearch opens a number of long-lived TCP connections between each pair of
  69. nodes in the cluster, and some of these connections may be idle for an extended
  70. period of time. Nonetheless, Elasticsearch requires these connections to remain
  71. open, and it can disrupt the operation of the cluster if any inter-node
  72. connections are closed by an external influence such as a firewall. It is
  73. important to configure your network to preserve long-lived idle connections
  74. between Elasticsearch nodes, for instance by leaving `tcp_keep_alive` enabled
  75. and ensuring that the keepalive interval is shorter than any timeout that might
  76. cause idle connections to be closed, or by setting `transport.ping_schedule` if
  77. keepalives cannot be configured.
  78. [float]
  79. === Transport Tracer
  80. The transport module has a dedicated tracer logger which, when activated, logs incoming and out going requests. The log can be dynamically activated
  81. by settings the level of the `org.elasticsearch.transport.TransportService.tracer` logger to `TRACE`:
  82. [source,js]
  83. --------------------------------------------------
  84. PUT _cluster/settings
  85. {
  86. "transient" : {
  87. "logger.org.elasticsearch.transport.TransportService.tracer" : "TRACE"
  88. }
  89. }
  90. --------------------------------------------------
  91. // CONSOLE
  92. 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
  93. except for fault detection pings:
  94. [source,js]
  95. --------------------------------------------------
  96. PUT _cluster/settings
  97. {
  98. "transient" : {
  99. "transport.tracer.include" : "*",
  100. "transport.tracer.exclude" : "internal:discovery/zen/fd*"
  101. }
  102. }
  103. --------------------------------------------------
  104. // CONSOLE