123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- [[modules-network]]
- === Networking
- Each {es} node has two different network interfaces. Clients send requests to
- {es}'s REST APIs using its <<http-settings,HTTP interface>>, but nodes
- communicate with other nodes using the <<transport-settings,transport
- interface>>. The transport interface is also used for communication with
- <<modules-remote-clusters,remote clusters>>.
- You can configure both of these interfaces at the same time using the
- `network.*` settings. If you have a more complicated network, you might need to
- configure the interfaces independently using the `http.*` and `transport.*`
- settings. Where possible, use the `network.*` settings that apply to both
- interfaces to simplify your configuration and reduce duplication.
- By default {es} binds only to `localhost` which means it cannot be accessed
- remotely. This configuration is sufficient for a local development cluster made
- of one or more nodes all running on the same host. To form a cluster across
- multiple hosts, or which is accessible to remote clients, you must adjust some
- <<common-network-settings,network settings>> such as `network.host`.
- [WARNING]
- .Be careful with the network configuration!
- =============================
- Never expose an unprotected node to the public internet. If you do, you are
- permitting anyone in the world to download, modify, or delete any of the data
- in your cluster.
- =============================
- Configuring {es} to bind to a non-local address will <<dev-vs-prod,convert some
- warnings into fatal exceptions>>. If a node refuses to start after configuring
- its network settings then you must address the logged exceptions before
- proceeding.
- [[common-network-settings]]
- ==== Commonly used network settings
- Most users will need to configure only the following network settings.
- `network.host`::
- (<<static-cluster-setting,Static>>)
- Sets the address of this node for both HTTP and transport traffic. The node
- will bind to this address and will also use it as its publish address. Accepts
- an IP address, a hostname, or a <<network-interface-values,special value>>.
- +
- Defaults to `_local_`.
- `http.port`::
- (<<static-cluster-setting,Static>>)
- The port to bind for HTTP client communication. Accepts a single value or a
- range. If a range is specified, the node will bind to the first available port
- in the range.
- +
- Defaults to `9200-9300`.
- `transport.port`::
- (<<static-cluster-setting,Static>>)
- The port to bind for communication between nodes. Accepts a single value or a
- range. If a range is specified, the node will bind to the first available port
- in the range. Set this setting to a single port, not a range, on every
- master-eligible node.
- +
- Defaults to `9300-9400`.
- [[network-interface-values]]
- ==== Special values for network addresses
- You can configure {es} to automatically determine its addresses by using the
- following special values. Use these values when configuring
- `network.host`, `network.bind_host`, `network.publish_host`, and the
- corresponding settings for the HTTP and transport interfaces.
- `_local_`::
- Any loopback addresses on the system, for example `127.0.0.1`.
- `_site_`::
- Any site-local addresses on the system, for example `192.168.0.1`.
- `_global_`::
- Any globally-scoped addresses on the system, for example `8.8.8.8`.
- `_[networkInterface]_`::
- Use the addresses of the network interface called `[networkInterface]`. For
- example if you wish to use the addresses of an interface called `en0` then
- set `network.host: _en0_`.
- `0.0.0.0`::
- The addresses of all available network interfaces.
- NOTE: Any values containing a `:` (e.g. an IPv6 address or some of the
- <<network-interface-values,special values>>) must be quoted because `:` is a
- special character in YAML.
- [[network-interface-values-ipv4-vs-ipv6]]
- ===== IPv4 vs IPv6
- These special values yield both IPv4 and IPv6 addresses by default, but you can
- also add an `:ipv4` or `:ipv6` suffix to limit them to just IPv4 or IPv6
- addresses respectively. For example, `network.host: _en0:ipv4_` would set this
- node's addresses to the IPv4 addresses of interface `en0`.
- [TIP]
- .Discovery in the Cloud
- ================================
- More special settings are available when running in the Cloud with either the
- {plugins}/discovery-ec2.html[EC2 discovery plugin] or the
- {plugins}/discovery-gce-network-host.html#discovery-gce-network-host[Google Compute Engine discovery plugin]
- installed.
- ================================
- [[modules-network-binding-publishing]]
- ==== Binding and publishing
- {es} uses network addresses for two distinct purposes known as binding and
- publishing. Most nodes will use the same address for everything, but more
- complicated setups may need to configure different addresses for different
- purposes.
- When an application such as {es} wishes to receive network communications, it
- must indicate to the operating system the address or addresses whose traffic it
- should receive. This is known as _binding_ to those addresses. {es} can bind to
- more than one address if needed, but most nodes only bind to a single address.
- {es} can only bind to an address if it is running on a host that has a network
- interface with that address. If necessary, you can configure the transport and
- HTTP interfaces to bind to different addresses.
- Each {es} node has an address at which clients and other nodes can contact it,
- known as its _publish address_. Each node has one publish address for its HTTP
- interface and one for its transport interface. These two addresses can be
- anything, and don't need to be addresses of the network interfaces on the host.
- The only requirements are that each node must be:
- * Accessible at its transport publish address by all other
- nodes in its cluster, and by any remote clusters that will discover it using
- <<sniff-mode>>.
- * Accessible at its HTTP publish address by all clients
- that will discover it using sniffing.
- ===== Using a single address
- The most common configuration is for {es} to bind to a single address at which
- it is accessible to clients and other nodes. In this configuration you should
- just set `network.host` to that address. You should not separately set any bind
- or publish addresses, nor should you separately configure the addresses for the
- HTTP or transport interfaces.
- ===== Using multiple addresses
- Use the <<advanced-network-settings, advanced network settings>> if you wish to
- bind {es} to multiple addresses, or to publish a different address from the
- addresses to which you are binding. Set `network.bind_host` to the bind
- addresses, and `network.publish_host` to the address at which this node is
- exposed. In complex configurations, you can configure these addresses
- differently for the HTTP and transport interfaces.
- [[advanced-network-settings]]
- ==== Advanced network settings
- These advanced settings let you bind to multiple addresses, or to use different
- addresses for binding and publishing. They are not required in most cases and
- you should not use them if you can use the <<common-network-settings,commonly
- used settings>> instead.
- `network.bind_host`::
- (<<static-cluster-setting,Static>>)
- The network address(es) to which the node should bind in order to listen for
- incoming connections. Accepts a list of IP addresses, hostnames, and
- <<network-interface-values,special values>>. Defaults to the address given by
- `network.host`. Use this setting only if binding to multiple addresses or using
- different addresses for publishing and binding.
- `network.publish_host`::
- (<<static-cluster-setting,Static>>)
- The network address that clients and other nodes can use to contact this node.
- Accepts an IP address, a hostname, or a <<network-interface-values,special
- value>>. Defaults to the address given by `network.host`. Use this setting only
- if bindiing to multiple addresses or using different addresses for publishing
- and binding.
- NOTE: You can specify a list of addresses for `network.host` and
- `network.publish_host`. You can also specify a single hostname which resolves
- to multiple addresses. If you do this then {es} chooses one of the addresses
- for its publish address. This choice uses heuristics based on IPv4/IPv6 stack
- preference and reachability and may change when the node restarts. You must
- make sure that each node is accessible at all possible publish addresses.
- [[tcp-settings]]
- ===== Advanced TCP settings
- Use the following settings to control the low-level parameters of the TCP
- connections used by the HTTP and transport interfaces.
- `network.tcp.no_delay`::
- (<<static-cluster-setting,Static>>)
- Enable or disable the {wikipedia}/Nagle%27s_algorithm[TCP no delay]
- setting. Defaults to `true`.
- `network.tcp.keep_alive`::
- (<<static-cluster-setting,Static>>)
- Configures the `SO_KEEPALIVE` option for this socket, which
- determines whether it sends TCP keepalive probes.
- `network.tcp.keep_idle`::
- (<<static-cluster-setting,Static>>)
- Configures the `TCP_KEEPIDLE` option for this socket, which
- determines the time in seconds that a connection must be idle before
- starting to send TCP keepalive probes. Defaults to `-1`, which uses
- the system default. This value cannot exceed `300` seconds. Only applicable on Linux and macOS,
- and requires Java 11 or newer.
- `network.tcp.keep_interval`::
- (<<static-cluster-setting,Static>>)
- Configures the `TCP_KEEPINTVL` option for this socket,
- which determines the time in seconds between sending TCP keepalive probes.
- Defaults to `-1`, which uses the system default. This value cannot exceed `300` seconds.
- Only applicable on Linux and macOS, and requires Java 11 or newer.
- `network.tcp.keep_count`::
- (<<static-cluster-setting,Static>>)
- Configures the `TCP_KEEPCNT` option for this socket, which
- determines the number of unacknowledged TCP keepalive probes that may be
- sent on a connection before it is dropped. Defaults to `-1`,
- which uses the system default. Only applicable on Linux and macOS, and requires
- Java 11 or newer.
- `network.tcp.reuse_address`::
- (<<static-cluster-setting,Static>>)
- Should an address be reused or not. Defaults to `true` on non-windows
- machines.
- `network.tcp.send_buffer_size`::
- (<<static-cluster-setting,Static>>)
- The size of the TCP send buffer (specified with <<size-units,size units>>).
- By default not explicitly set.
- `network.tcp.receive_buffer_size`::
- (<<static-cluster-setting,Static>>)
- The size of the TCP receive buffer (specified with <<size-units,size units>>).
- By default not explicitly set.
- include::http.asciidoc[]
- include::transport.asciidoc[]
- include::network/tracers.asciidoc[]
|