How to install Elasticsearch on CentOS, Red Hat or Fedora
Elasticsearch is a popular, free, and open-source product for search and analytics engines, yet it is not available in the default package repository for CentOS, RHEL, or Fedora. However, a public repository is, made available for yum / dnf by the company behind it, which you can manually add to the system.
Elasticsearch is a Java application whereby you'll have to install a Java Runtime Environment before installing Elasticsearch. Both Elasticsearch and Java Runtime Environment can be installed from the command line using yum or dnf.
Steps to install Elasticsearch on CentOS, RHEL or Fedora:
-
Launch terminal.
-
Install the latest Java Runtime Environment.
$ sudo dnf install --assumeyes java-11-openjdk [sudo] password for user: Last metadata expiration check: 1 day, 0:28:04 ago on Fri 30 Apr 2021 07:01:52 AM +08. Dependencies resolved. ================================================================================ Package Arch Version Repo Size ================================================================================ Installing: java-11-openjdk x86_64 1:11.0.11.0.1-0.2.ea.el8 appstream 260 k Installing dependencies: copy-jdk-configs noarch 3.7-4.el8 appstream 27 k java-11-openjdk-headless x86_64 1:11.0.11.0.1-0.2.ea.el8 appstream 39 M javapackages-filesystem noarch 5.3.0-1.module_el8.0.0+11+5b8c10bd appstream 30 k lksctp-tools x86_64 1.0.18-3.el8 baseos 100 k ttmkfdir x86_64 3.0.9-54.el8 appstream 62 k tzdata-java noarch 2021a-1.el8 appstream 192 k xorg-x11-fonts-Type1 noarch 7.5-19.el8 appstream 522 k Enabling module streams: javapackages-runtime 201801 Transaction Summary ================================================================================ Install 8 Packages Total download size: 41 M Installed size: 173 M ##### snipped
-
Download and install the public signing key for Elasticsearch repository.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
-
Create and add Elasticsearch repository for yum / dnf.
$ sudo tee /etc/yum.repos.d/elasticsearch.repo <<EOF [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
-
Install Elasticsearch package along with dependencies using dnf.
$ sudo dnf install --assumeyes elasticsearch Elasticsearch repository for 7.x packages 17 MB/s | 24 MB 00:01 Last metadata expiration check: 0:00:05 ago on Sat 01 May 2021 07:34:39 AM +08. Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: elasticsearch x86_64 7.12.1-1 elasticsearch-7.x 311 M Transaction Summary ================================================================================ Install 1 Package Total download size: 311 M Installed size: 518 M ##### snipped
Even though dnf and yum supposedly resolve and install package dependencies, elasticsearch might not list java as a dependency thus you might come to this error if you don't manually install java as in the previous step.
Running transaction which: no java in (/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin) could not find java; set JAVA_HOME or ensure java is in PATH error: %pre(elasticsearch-0:6.4.0-1.noarch) scriptlet failed, exit status 1 Error in PREIN scriptlet in rpm package elasticsearch-6.4.0-1.noarch Verifying : elasticsearch-6.4.0-1.noarch 1/1 Failed: elasticsearch.noarch 0:6.4.0-1
-
Open Elasticsearch configuration file using your favorite text editor to edit configuration options if necessary.
$ sudo vi /etc/elasticsearch/elasticsearch.yml
Listen to host's IP address to enable connection from remote host or use 0.0.0.0 to listen on all available IP addresses in your system.
network.host: 0.0.0.0
-
Enable network access to Elasticsearch service on port 9200 and 9300 from the firewall.
$ sudo firewall-cmd --permanent --add-port=9200/tcp success # firewall-cmd --permanent --add-port=9300/tcp success
-
Reload firewall rules and keep state information.
$ sudo firewall-cmd --reload success
-
Configure Elasticsearch service to automatically start during system boot.
$ sudo systemctl enable elasticsearch Synchronizing state of elasticsearch.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable elasticsearch Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
-
Start Elasticsearch service.
$ sudo systemctl start elasticsearch
The service will take a while to start
-
Access Elasticsearch service to test if installation is successful.
$ curl 127.0.0.1:9200 { "name" : "host", "cluster_name" : "elasticsearch", "cluster_uuid" : "L0drd8tURQSPpAvNzboGwQ", "version" : { "number" : "7.12.1", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7", "build_date" : "2021-04-20T20:56:39.040728659Z", "build_snapshot" : false, "lucene_version" : "8.8.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
You will not be able to connect immediately to Elasticsearch because the service takes quite a while to start and will get the following error if you try to connect immediately.
$ curl 127.0.0.1:9200 curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused