5

I am running ElasticSearch6 in my docker files.

if i run http://localhost:9200/ in my browser i get this information.

{
"name" : "shakedeal-1",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "X4OkctATTgmlcdLzmtJ4Yg",
  "version" : {
    "number" : "6.5.4",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d2ef93d",
    "build_date" : "2018-12-17T21:17:40.758843Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Here are the contents of my docker/elasticSearch/config/elasticSearch.yml file.

---
## Default Elasticsearch configuration from elasticsearch-docker.
## from https://github.com/elastic/elasticsearch-docker/blob/master/build/elasticsearch/elasticsearch.yml
#
cluster.name: "docker-cluster"
node.name: "shakedeal-1"
network.host: 0.0.0.0

# minimum_master_nodes need to be explicitly set when bound on a public IP
# set to 1 to allow single node clusters
# Details: https://github.com/elastic/elasticsearch/pull/17288
discovery.zen.minimum_master_nodes: 1

## Use single node discovery in order to disable production mode and avoid bootstrap checks
## see https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
#
discovery.type: single-node

Now if i install my magento2 using CLI command.

php bin/magento setup:install --base-url='http://tile500.co.pk/' \
--db-host='mysql' --db-name='Tile500New' --db-user='root' --db-password='tiger' \
--admin-firstname='Magento' --admin-lastname='User' --admin-email='[email protected]' \
--admin-user='admin' --admin-password='admin123' --language='en_US' \
--currency='USD' --timezone='America/Chicago' --use-rewrites=1 \
--search-engine='elasticsearch6' --elasticsearch-host='localhost' \
--elasticsearch-port='9200' 

I get this error

[Progress: 601 / 1206]
Installing search configuration...

In SearchConfig.php line 81:
                                                                                          
  Could not validate a connection to Elasticsearch. No alive nodes found in your cluster  
4
  • 1
    if you are running elastic search in a seperate container then localhost is the wrong hostname, you need to use the hostname of the ES container.
    – paj
    Commented Aug 21, 2020 at 14:38
  • 1
    Yes, thank you very much. Its worked. I change the setup: install option to --elasticsearch-host='es1:9200' and it worked for me. Commented Aug 21, 2020 at 14:50
  • You can refer to how to install the latest magento 2.4 here vi-magento.com/…
    – Long Lê
    Commented Aug 22, 2020 at 5:15
  • How to setup Elasticsearch in windows server cpanel? Commented Apr 5 at 14:02

3 Answers 3

14

I encountered this problem which is really tiring when installing a new Magento 2.4.

I think you have already found the solution but I wanted to share the solution for others.


In SearchConfig.php line 81: Could not validate a connection to Elasticsearch. No alive nodes found in your cluster


This error means that either you don't have Elasticsearch installed in your system or the host configuration which is not correct.

  1. check if Elasticsearch is installed :

    with example :

    sudo systemctl status elasticsearch
    
    //or
    
    curl -X GET 'http://localhost:9200'
    
    //or
    
    curl -X GET 'http://yourdomaine:9200'
    
  2. if you find that Elasticsearch is installed, you go directly to step 4, otherwise you go to step 3 then 4

  3. Elasticsearch installation : Reference

    3.1 We must have OpenJDK to make work Elasticsearch

    sudo apt install openjdk-11-jdk -y
    

    3.2 import the Elasticsearch public GPG key

    curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    

    3.3 add the Elasticsearch source to the sources.list.d directory, where apt will search for new sources

    sudo echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    

    3.4 update the packages to read the Elastic source

    sudo apt update
    

    3.5 install Elasticsearch

    sudo apt install elasticsearch -y
    

    3.6 we configure Elasticsearch host

    sudo nano /etc/elasticsearch/elasticsearch.yml
    

    uncomment and replace #network.host: 192.168.0.1 with network.host: localhost

     # ---------------------------------- Network -----------------------------------
     #
     # Set the bind address to a specific IP (IPv4 or IPv6):
     #
     #network.host: 192.168.0.1 //<- **** uncomment this line then replace it with : network.host: localhost
     #
     # Set a custom port for HTTP:
     #
     #http.port: 9200
     #
     # For more information, consult the network module documentation.
    

    3.7 We start Elasticsearch

     sudo systemctl start elasticsearch
     sudo systemctl enable elasticsearch
    

    3.8 We check the status

     sudo systemctl status elasticsearch
    
     //result : 
    
     //systemd[1]: Starting Elasticsearch...
    

    3.9 Working Elastic

     curl -X GET 'localhost:9200' 
    
     //Result something like : 
     {
       "name" : "wbfdfrbz",
       "cluster_name" : "elasticsearch",
       "cluster_uuid" : "_MpzR9k23l-Vy5vzlSQW",
       "version" : {
         "number" : "7.9.0",
         "build_flavor" : "default",
         "build_type" : "deb",
         "build_hash" : "a179a2a7fwq032d6g9361301700902wff217",
         "build_date" : "2020-08-11T21:36:48.204330Z",
         "build_snapshot" : false,
         "lucene_version" : "8.6.0",
         "minimum_wire_compatibility_version" : "6.8.0",
         "minimum_index_compatibility_version" : "6.0.0-beta1"
       },
      "tagline" : "You Know, for Search"
     }
    

 

  1. Magento command installation

    In step 3.6, we set the HOST value with : localhost (network.host: localhost) so we will set the same thing for --elasticsearch-host='localhost' and --elasticsearch-port=9200, we have keep the default port 9200 (#http.port: 9200).

    So an example for the Magento CLI installation :

    php bin/magento setup:install --base-url="http://yourdomaine.com/" --base-url-secure="http://yourdomaine.com/" --backend-frontname="admin" --session-save="files" --db-host="localhost" --db-name="your-db-name" --db-user="your-db-user" --db-password="your-db-password" --admin-firstname="Amir" --admin-lastname="Admin" --admin-email="[email protected]" --admin-user="amir" --admin-password="Admin123" --language=fr_FR --currency=EUR --timezone=Europe/Paris --use-rewrites=1 --search-engine=elasticsearch7 --elasticsearch-host="localhost" --elasticsearch-port=9200
    

Enjoy !

1
  • What is the expected result from CURL if elasticsearch is installed?? I get 401 Authorization required. And why do we need curl, why not just entering the URL in the browser?
    – Black
    Commented Dec 16, 2020 at 9:14
1

I solved this problem with @paj solution given in comment to this question.

if you are running elastic search in a seperate container then localhost is the wrong hostname, you need to use the hostname of the ES container.

So checked my Docker container. enter image description here

As you can see my docker container name for elastic search is "es1", so i changed my Magento2 install command to

--elasticsearch-host='es1:9200'

and it worked for me.

it was --elasticsearch-host='localhost' before and was not working.

0

its very late to reply but in my case its was fixed using elasticsearch8

Example: php bin/magento setup:install --base-url="http://localhost/" --db-host="localhost" --db-name="m2" --db-user="root" --db-password="" --admin-firstname="Shiv" --admin-lastname="Singh" --admin-email="[email protected]" --admin-user=“user” --admin-password="password" --use-rewrites="1" --backend-frontname="admin11" --search-engine="elasticsearch8" --elasticsearch-host="127.0.0.1" --elasticsearch-port="9200"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.