network.asciidoc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. [[modules-network]]
  2. === Networking
  3. Each {es} node has two different network interfaces. Clients send requests to
  4. {es}'s REST APIs using its <<http-settings,HTTP interface>>, but nodes
  5. communicate with other nodes using the <<transport-settings,transport
  6. interface>>. The transport interface is also used for communication with
  7. <<remote-clusters,remote clusters>>.
  8. You can configure both of these interfaces at the same time using the
  9. `network.*` settings. If you have a more complicated network, you might need to
  10. configure the interfaces independently using the `http.*` and `transport.*`
  11. settings. Where possible, use the `network.*` settings that apply to both
  12. interfaces to simplify your configuration and reduce duplication.
  13. By default {es} binds only to `localhost` which means it cannot be accessed
  14. remotely. This configuration is sufficient for a local development cluster made
  15. of one or more nodes all running on the same host. To form a cluster across
  16. multiple hosts, or which is accessible to remote clients, you must adjust some
  17. <<common-network-settings,network settings>> such as `network.host`.
  18. [WARNING]
  19. .Be careful with the network configuration!
  20. =============================
  21. Never expose an unprotected node to the public internet. If you do, you are
  22. permitting anyone in the world to download, modify, or delete any of the data
  23. in your cluster.
  24. =============================
  25. Configuring {es} to bind to a non-local address will <<dev-vs-prod,convert some
  26. warnings into fatal exceptions>>. If a node refuses to start after configuring
  27. its network settings then you must address the logged exceptions before
  28. proceeding.
  29. [[common-network-settings]]
  30. ==== Commonly used network settings
  31. Most users will need to configure only the following network settings.
  32. `network.host`::
  33. (<<static-cluster-setting,Static>>, string)
  34. Sets the address of this node for both HTTP and transport traffic. The node
  35. will bind to this address and will also use it as its publish address. Accepts
  36. an IP address, a hostname, or a <<network-interface-values,special value>>.
  37. +
  38. Defaults to `_local_`. However, note that <<configuring-stack-security,security
  39. auto-configuration>> will add `http.host: 0.0.0.0` to your `elasticsearch.yml`
  40. configuration file, which overrides this default for HTTP traffic.
  41. `http.port`::
  42. (<<static-cluster-setting,Static>>, integer)
  43. The port to bind for HTTP client communication. Accepts a single value or a
  44. range. If a range is specified, the node will bind to the first available port
  45. in the range.
  46. +
  47. Defaults to `9200-9300`.
  48. `transport.port`::
  49. (<<static-cluster-setting,Static>>, integer)
  50. The port to bind for communication between nodes. Accepts a single value or a
  51. range. If a range is specified, the node will bind to the first available port
  52. in the range. Set this setting to a single port, not a range, on every
  53. master-eligible node.
  54. +
  55. Defaults to `9300-9400`.
  56. [[remote_cluster.port]]
  57. `remote_cluster.port`::
  58. (<<static-cluster-setting,Static>>, integer)
  59. The port to bind for remote cluster client communication. Accepts a single value.
  60. +
  61. Defaults to `9443`.
  62. [[network-interface-values]]
  63. ==== Special values for network addresses
  64. You can configure {es} to automatically determine its addresses by using the
  65. following special values. Use these values when configuring
  66. `network.host`, `network.bind_host`, `network.publish_host`, and the
  67. corresponding settings for the HTTP and transport interfaces.
  68. `_local_`::
  69. Any loopback addresses on the system, for example `127.0.0.1`.
  70. `_site_`::
  71. Any site-local addresses on the system, for example `192.168.0.1`.
  72. `_global_`::
  73. Any globally-scoped addresses on the system, for example `8.8.8.8`.
  74. `_[networkInterface]_`::
  75. Use the addresses of the network interface called `[networkInterface]`. For
  76. example if you wish to use the addresses of an interface called `en0` then
  77. set `network.host: _en0_`.
  78. `0.0.0.0`::
  79. The addresses of all available network interfaces.
  80. NOTE: In some systems these special values resolve to multiple addresses. If
  81. so, {es} will select one of them as its publish address and may change its
  82. selection on each node restart. Ensure your node is accessible at every possible
  83. address.
  84. NOTE: Any values containing a `:` (e.g. an IPv6 address or some of the
  85. <<network-interface-values,special values>>) must be quoted because `:` is a
  86. special character in YAML.
  87. [[network-interface-values-ipv4-vs-ipv6]]
  88. ===== IPv4 vs IPv6
  89. These special values yield both IPv4 and IPv6 addresses by default, but you can
  90. also add an `:ipv4` or `:ipv6` suffix to limit them to just IPv4 or IPv6
  91. addresses respectively. For example, `network.host: "_en0:ipv4_"` would set this
  92. node's addresses to the IPv4 addresses of interface `en0`.
  93. [TIP]
  94. .Discovery in the Cloud
  95. ================================
  96. More special settings are available when running in the Cloud with either the
  97. {plugins}/discovery-ec2.html[EC2 discovery plugin] or the
  98. {plugins}/discovery-gce-network-host.html#discovery-gce-network-host[Google Compute Engine discovery plugin]
  99. installed.
  100. ================================
  101. [[modules-network-binding-publishing]]
  102. ==== Binding and publishing
  103. {es} uses network addresses for two distinct purposes known as binding and
  104. publishing. Most nodes will use the same address for everything, but more
  105. complicated setups may need to configure different addresses for different
  106. purposes.
  107. When an application such as {es} wishes to receive network communications, it
  108. must indicate to the operating system the address or addresses whose traffic it
  109. should receive. This is known as _binding_ to those addresses. {es} can bind to
  110. more than one address if needed, but most nodes only bind to a single address.
  111. {es} can only bind to an address if it is running on a host that has a network
  112. interface with that address. If necessary, you can configure the transport and
  113. HTTP interfaces to bind to different addresses.
  114. Each {es} node has an address at which clients and other nodes can contact it,
  115. known as its _publish address_. Each node has one publish address for its HTTP
  116. interface and one for its transport interface. These two addresses can be
  117. anything, and don't need to be addresses of the network interfaces on the host.
  118. The only requirements are that each node must be:
  119. * Accessible at its HTTP publish address by all clients that will discover it
  120. using sniffing.
  121. * Accessible at its transport publish address by all other nodes in its
  122. cluster, and by any remote clusters that will discover it using
  123. <<sniff-mode>>.
  124. If you specify the transport publish address using a hostname then {es} will
  125. resolve this hostname to an IP address once during startup, and other nodes
  126. will use the resulting IP address instead of resolving the name again
  127. themselves. To avoid confusion, use a hostname which resolves to the node's
  128. address in all network locations.
  129. ===== Using a single address
  130. The most common configuration is for {es} to bind to a single address at which
  131. it is accessible to clients and other nodes. In this configuration you should
  132. just set `network.host` to that address. You should not separately set any bind
  133. or publish addresses, nor should you separately configure the addresses for the
  134. HTTP or transport interfaces.
  135. ===== Using multiple addresses
  136. Use the <<advanced-network-settings, advanced network settings>> if you wish to
  137. bind {es} to multiple addresses, or to publish a different address from the
  138. addresses to which you are binding. Set `network.bind_host` to the bind
  139. addresses, and `network.publish_host` to the address at which this node is
  140. exposed. In complex configurations, you can configure these addresses
  141. differently for the HTTP and transport interfaces.
  142. [[advanced-network-settings]]
  143. ==== Advanced network settings
  144. These advanced settings let you bind to multiple addresses, or to use different
  145. addresses for binding and publishing. They are not required in most cases and
  146. you should not use them if you can use the <<common-network-settings,commonly
  147. used settings>> instead.
  148. `network.bind_host`::
  149. (<<static-cluster-setting,Static>>, string)
  150. The network address(es) to which the node should bind in order to listen for
  151. incoming connections. Accepts a list of IP addresses, hostnames, and
  152. <<network-interface-values,special values>>. Defaults to the address given by
  153. `network.host`. Use this setting only if binding to multiple addresses or using
  154. different addresses for publishing and binding.
  155. `network.publish_host`::
  156. (<<static-cluster-setting,Static>>, string)
  157. The network address that clients and other nodes can use to contact this node.
  158. Accepts an IP address, a hostname, or a <<network-interface-values,special
  159. value>>. Defaults to the address given by `network.host`. Use this setting only
  160. if binding to multiple addresses or using different addresses for publishing
  161. and binding.
  162. NOTE: You can specify a list of addresses for `network.host` and
  163. `network.publish_host`. You can also specify one or more hostnames or
  164. <<network-interface-values,special values>> that resolve to multiple addresses.
  165. If you do this then {es} chooses one of the addresses for its publish address.
  166. This choice uses heuristics based on IPv4/IPv6 stack preference and
  167. reachability and may change when the node restarts. Ensure
  168. each node is accessible at all possible publish addresses.
  169. [[tcp-settings]]
  170. ===== Advanced TCP settings
  171. Use the following settings to control the low-level parameters of the TCP
  172. connections used by the HTTP and transport interfaces.
  173. `network.tcp.keep_alive`::
  174. (<<static-cluster-setting,Static>>, boolean)
  175. Configures the `SO_KEEPALIVE` option for network sockets, which determines
  176. whether each connection sends TCP keepalive probes. Defaults to `true`.
  177. `network.tcp.keep_idle`::
  178. (<<static-cluster-setting,Static>>, integer)
  179. Configures the `TCP_KEEPIDLE` option for network sockets, which determines the
  180. time in seconds that a connection must be idle before starting to send TCP
  181. keepalive probes. Defaults to `-1`, which means to use the system default. This
  182. value cannot exceed `300` seconds. Only applicable on Linux and macOS.
  183. `network.tcp.keep_interval`::
  184. (<<static-cluster-setting,Static>>, integer)
  185. Configures the `TCP_KEEPINTVL` option for network sockets, which determines the
  186. time in seconds between sending TCP keepalive probes. Defaults to `-1`, which
  187. means to use the system default. This value cannot exceed `300` seconds. Only
  188. applicable on Linux and macOS.
  189. `network.tcp.keep_count`::
  190. (<<static-cluster-setting,Static>>, integer)
  191. Configures the `TCP_KEEPCNT` option for network sockets, which determines the
  192. number of unacknowledged TCP keepalive probes that may be sent on a connection
  193. before it is dropped. Defaults to `-1`, which means to use the system default.
  194. Only applicable on Linux and macOS.
  195. `network.tcp.no_delay`::
  196. (<<static-cluster-setting,Static>>, boolean)
  197. Configures the `TCP_NODELAY` option on network sockets, which determines
  198. whether {wikipedia}/Nagle%27s_algorithm[TCP no delay] is enabled. Defaults to
  199. `true`.
  200. `network.tcp.reuse_address`::
  201. (<<static-cluster-setting,Static>>, boolean)
  202. Configures the `SO_REUSEADDR` option for network sockets, which determines
  203. whether the address can be reused or not. Defaults to `false` on Windows and
  204. `true` otherwise.
  205. `network.tcp.send_buffer_size`::
  206. (<<static-cluster-setting,Static>>, <<byte-units,byte value>>)
  207. Configures the size of the TCP send buffer for network sockets. Defaults to
  208. `-1` which means to use the system default.
  209. `network.tcp.receive_buffer_size`::
  210. (<<static-cluster-setting,Static>>, <<byte-units,byte value>>)
  211. Configures the size of the TCP receive buffer. Defaults to `-1` which means to
  212. use the system default.
  213. include::http.asciidoc[]
  214. include::transport.asciidoc[]
  215. include::remote-cluster-network.asciidoc[]
  216. include::network/tracers.asciidoc[]
  217. include::network/threading.asciidoc[]