2016-04-03 10:09:24 -04:00
[[settings]]
== Configuring Elasticsearch
2014-06-12 07:56:06 -04:00
2016-04-03 10:09:24 -04:00
Elasticsearch ships with good defaults and requires very little configuration.
Most settings can be changed on a running cluster using the
<<cluster-update-settings>> API.
2013-10-17 05:54:36 -04:00
2016-04-03 10:09:24 -04:00
The configuration files should contain settings which are node-specific (such
as `node.name` and paths), or settings which a node requires in order to be
able to join a cluster, such as `cluster.name` and `network.host`.
2014-11-21 15:41:06 -05:00
2017-07-31 20:52:23 -04:00
[[config-files-location]]
2020-07-23 12:42:33 -04:00
[discrete]
2017-07-31 20:52:23 -04:00
=== Config files location
2014-05-02 04:44:26 -04:00
2017-07-31 20:52:23 -04:00
Elasticsearch has three configuration files:
2014-05-14 10:01:25 -04:00
2017-07-31 20:52:23 -04:00
* `elasticsearch.yml` for configuring Elasticsearch
* `jvm.options` for configuring Elasticsearch JVM settings
* `log4j2.properties` for configuring Elasticsearch logging
2014-05-14 10:01:25 -04:00
2017-07-31 20:52:23 -04:00
These files are located in the config directory, whose default location depends
on whether or not the installation is from an archive distribution (`tar.gz` or
`zip`) or a package distribution (Debian or RPM packages).
2014-05-14 10:01:25 -04:00
2017-07-31 20:52:23 -04:00
For the archive distributions, the config directory location defaults to
`$ES_HOME/config`. The location of the config directory can be changed via the
2017-08-14 17:19:06 -04:00
`ES_PATH_CONF` environment variable as follows:
2014-05-14 10:01:25 -04:00
[source,sh]
2016-04-03 10:09:24 -04:00
-------------------------------
2017-08-14 17:19:06 -04:00
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
2016-04-03 10:09:24 -04:00
-------------------------------
2013-08-28 19:24:34 -04:00
2017-08-14 17:19:06 -04:00
Alternatively, you can `export` the `ES_PATH_CONF` environment variable via the
2017-07-31 20:52:23 -04:00
command line or via your shell profile.
For the package distributions, the config directory location defaults to
`/etc/elasticsearch`. The location of the config directory can also be changed
2017-08-14 17:19:06 -04:00
via the `ES_PATH_CONF` environment variable, but note that setting this in your
2018-03-06 09:50:11 -05:00
shell is not sufficient. Instead, this variable is sourced from
2017-07-31 20:52:23 -04:00
`/etc/default/elasticsearch` (for the Debian package) and
`/etc/sysconfig/elasticsearch` (for the RPM package). You will need to edit the
2017-08-14 17:19:06 -04:00
`ES_PATH_CONF=/etc/elasticsearch` entry in one of these files accordingly to
change the config directory location.
2017-07-31 20:52:23 -04:00
2020-07-23 12:42:33 -04:00
[discrete]
2016-04-03 10:09:24 -04:00
=== Config file format
2013-08-28 19:24:34 -04:00
2020-07-31 16:16:31 -04:00
The configuration format is https://yaml.org/[YAML]. Here is an
2016-04-03 10:09:24 -04:00
example of changing the path of the data and logs directories:
2013-08-28 19:24:34 -04:00
2013-10-17 05:54:36 -04:00
[source,yaml]
2013-08-28 19:24:34 -04:00
--------------------------------------------------
path:
2016-04-03 10:09:24 -04:00
data: /var/lib/elasticsearch
2016-05-12 16:42:27 -04:00
logs: /var/log/elasticsearch
2013-08-28 19:24:34 -04:00
--------------------------------------------------
2016-04-03 10:09:24 -04:00
Settings can also be flattened as follows:
2013-08-28 19:24:34 -04:00
2013-10-17 05:54:36 -04:00
[source,yaml]
2013-08-28 19:24:34 -04:00
--------------------------------------------------
2016-04-03 10:09:24 -04:00
path.data: /var/lib/elasticsearch
2016-05-12 16:42:27 -04:00
path.logs: /var/log/elasticsearch
2013-08-28 19:24:34 -04:00
--------------------------------------------------
2020-10-15 16:56:48 -04:00
In YAML, you can format non-scalar values as sequences:
[source,yaml]
----
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
----
Though less common, you can also format non-scalar values as arrays:
[source,yaml]
----
discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11", "seeds.mydomain.com"]
----
2020-07-23 12:42:33 -04:00
[discrete]
2017-05-19 10:49:56 -04:00
=== Environment variable substitution
2013-08-28 19:24:34 -04:00
2016-04-03 10:09:24 -04:00
Environment variables referenced with the `${...}` notation within the
configuration file will be replaced with the value of the environment
2020-06-05 11:08:03 -04:00
variable. For example:
2013-08-28 19:24:34 -04:00
2013-10-17 05:54:36 -04:00
[source,yaml]
2013-08-28 19:24:34 -04:00
--------------------------------------------------
2016-04-03 10:09:24 -04:00
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}
2013-08-28 19:24:34 -04:00
--------------------------------------------------
2020-06-01 14:19:52 -04:00
2020-06-05 11:08:03 -04:00
Values for environment variables must be simple strings. Use a comma-separated string to provide values that Elasticsearch will parse as a list. For example, Elasticsearch will split the following string into a list of values for the `${HOSTNAME}` environment variable:
[source,yaml]
----
export HOSTNAME=“host1,host2"
----
2020-06-01 14:19:52 -04:00
[discrete]
[[cluster-setting-types]]
=== Cluster and node setting types
Cluster and node settings can be categorized based on how they are configured:
[[dynamic-cluster-setting]]
Dynamic::
+
2020-08-24 09:32:26 -04:00
--
You can configure and update dynamic settings on a running cluster using the
<<cluster-update-settings,cluster update settings API>>. You can also configure
dynamic settings locally on an unstarted or shut down node using
`elasticsearch.yml`.
Updates made using the cluster update settings API can be _persistent_, which
apply across cluster restarts, or _transient_, which reset after a cluster
restart. You can also reset transient or persistent settings by assigning them
a `null` value using the API.
If you configure the same setting using multiple methods, {es} applies the
settings in following order of precedence:
1. Transient setting
2. Persistent setting
3. `elasticsearch.yml` setting
4. Default setting value
For example, you can apply a transient setting to override a persistent setting
or `elasticsearch.yml` setting. However, a change to an `elasticsearch.yml`
setting will not override a defined transient or persistent setting.
2020-06-01 14:19:52 -04:00
TIP: It’ s best to set dynamic, cluster-wide settings with the cluster update
settings API and use `elasticsearch.yml` only for local configurations. Using
the cluster update settings API ensures the setting is the same on all nodes. If
you accidentally configure different settings in `elasticsearch.yml` on
different nodes, it can be difficult to notice discrepancies.
2020-08-24 09:32:26 -04:00
--
2020-06-01 14:19:52 -04:00
[[static-cluster-setting]]
Static::
Static settings can only be configured on an unstarted or shut down node using
`elasticsearch.yml`.
+
Static settings must be set on every relevant node in the cluster.