--- layout: default title: Install OpenSearch nav_order: 2 has_children: true redirect_from: - /opensearch/install/ - /opensearch/install/compatibility/ - /opensearch/install/important-settings/ --- # Install OpenSearch This section details how to install OpenSearch on your host, including which operating systems are [compatible with OpenSearch](#operating-system-compatibility), which [ports to open](#network-requirements), and which [important settings](#important-settings) to configure on your host. ## Operating system compatibility We recommend installing OpenSearch on Red Hat Enterprise Linux (RHEL) or Debian-based Linux distributions that use [systemd](https://en.wikipedia.org/wiki/Systemd), such as CentOS, Amazon Linux 2, or Ubuntu Long-Term Support (LTS). OpenSearch should work on most Linux distributions, but we only test a handful. We recommend RHEL 7 or 8, CentOS 7 or 8, Amazon Linux 2, or Ubuntu 16.04, 18.04, or 20.04 for any version of OpenSearch. OpenSearch also supports Windows Server 2019. Avoid using a network file system for node storage in a production workflow. Using a network file system for node storage can cause performance issues in your cluster due to factors such as network conditions (like latency or limited throughput) or read/write speeds. You should use solid-state drives (SSDs) installed on the host for node storage where possible. {: .note} ## Java compatibility The OpenSearch distribution for Linux ships with a compatible [Adoptium JDK](https://adoptium.net/) version of Java in the `jdk` directory. To find the JDK version, run `./jdk/bin/java -version`. For example, the OpenSearch 1.0.0 tarball ships with Java 15.0.1+9 (non-LTS), OpenSearch 1.3.0 ships with Java 11.0.14.1+1 (LTS), and OpenSearch 2.0.0 ships with Java 17.0.2+8 (LTS). OpenSearch is tested with all compatible Java versions. OpenSearch Version | Compatible Java Versions | Bundled Java Version :---------- | :-------- | :----------- 1.0 - 1.2.x | 11, 15 | 15.0.1+9 1.3.x | 8, 11, 14 | 11.0.14.1+1 2.0.0 | 11, 17 | 17.0.2+8 To use a different Java installation, set the `OPENSEARCH_JAVA_HOME` or `JAVA_HOME` environment variable to the Java install location. For example: ```bash export OPENSEARCH_JAVA_HOME=/path/to/opensearch-{{site.opensearch_version}}/jdk ``` ## Network requirements The following ports need to be open for OpenSearch components. Port number | OpenSearch component :--- | :--- 443 | OpenSearch Dashboards in AWS OpenSearch Service with encryption in transit (TLS) 5601 | OpenSearch Dashboards 9200 | OpenSearch REST API 9250 | Cross-cluster search 9300 | Node communication and transport 9600 | Performance Analyzer ## Important settings For production workloads, make sure the [Linux setting](https://www.kernel.org/doc/Documentation/sysctl/vm.txt) `vm.max_map_count` is set to at least 262144. Even if you use the Docker image, set this value on the *host machine*. To check the current value, run this command: ```bash cat /proc/sys/vm/max_map_count ``` To increase the value, add the following line to `/etc/sysctl.conf`: ``` vm.max_map_count=262144 ``` Then run `sudo sysctl -p` to reload. The [sample docker-compose.yml]({{site.url}}{{site.baseurl}}/install-and-configure/install-opensearch/docker/#sample-docker-composeyml) file also contains several key settings: - `bootstrap.memory_lock=true` Disables swapping (along with `memlock`). Swapping can dramatically decrease performance and stability, so you should ensure it is disabled on production clusters. - `OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m` Sets the size of the Java heap (we recommend half of system RAM). - `nofile 65536` Sets a limit of 65536 open files for the OpenSearch user. - `port 9600` Allows you to access Performance Analyzer on port 9600. Do not declare the same JVM options in multiple locations because it can result in unexpected behavior or a failure of the OpenSearch service to start. If you declare JVM options using an environment variable, such as `OPENSEARCH_JAVA_OPTS=-Xms3g -Xmx3g`, then you should comment out any references to that JVM option in `config/jvm.options`. Conversely, if you define JVM options in `config/jvm.options`, then you should not define those JVM options using environment variables. {: .note}