Reputation: 514
I am start working with elastic search.I successfully install elastic search on my server(Different from application server).But When I try to call Elatic search from my Application server it gives an error
Fatal error: Uncaught exception 'Elasticsearch\Common\Exceptions\NoNodesAvailableException' with message 'No alive nodes found in your cluster'
When I check Elastic search status it shows Active.
How can I call elastic search from my Application server to my Elastic search server.
<?php
require 'vendor/autoload.php';
$hosts = [
'ip_address:9200' // IP + Port
];
$client = Elasticsearch\ClientBuilder::create()->setHosts($hosts)->build();
$params = [
'index' => 'my_index',
'type' => 'my_type',
'id' => 'my_id',
'body' => ['testField' => 'abc']
];
$response = $client->index($params);
?>
My elasticsearch.yml Settings
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please see the documentation for further information on configuration options:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
#
# Add custom attributes to the node:
#
# node.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
# path.data: /path/to/data
#
# Path to log files:
#
# path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
# bootstrap.memory_lock: true
#
# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
# available on the system and that the owner of the process is allowed to use this limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 0.0.0.0
#network.bind_host: 0
#
# Set a custom port for HTTP:
#
# http.port: 9200
#
# For more information, see the documentation at:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
# discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
#
# discovery.zen.minimum_master_nodes: 3
#
# For more information, see the documentation at:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
# gateway.recover_after_nodes: 3
#
# For more information, see the documentation at:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
#
# ---------------------------------- Various -----------------------------------
#
# Disable starting multiple nodes on a single system:
#
# node.max_local_storage_nodes: 1
#
# Require explicit names when deleting indices:
#
# action.destructive_requires_name: true
elasticsearch.yml settings which are not working
network.host: 127.0.0.1
network.host: 0
network.host: 0.0.0.0
network.host: IP_Address
network.bind_host: 0
network.bind_host: IP_Address
When I set the above settings then elasticsearch shows the failed status.
NOTE : Elastic search install on different server from my Application sever.
Upvotes: 15
Views: 98612
Reputation: 983
This can happen with mismatch in versions between Elasticsearch-PHP and Elasticsearch. Documented in the Elasticsearch-php library github page explains the compatibilites between them: https://github.com/elastic/elasticsearch-php?tab=readme-ov-file#compatibility
The Elasticsearch client is compatible with currently maintained PHP versions.
Language clients are forward compatible; meaning that clients support communicating with greater or equal minor versions of Elasticsearch without breaking. It does not mean that the client automatically supports new features of newer Elasticsearch versions; it is only possible after a release of a new client version. For example, a 8.12 client version won't automatically support the new features of the 8.13 version of Elasticsearch, the 8.13 client version is required for that. Elasticsearch language clients are only backwards compatible with default distributions and without guarantees made.
Elasticsearch Version | Elasticsearch-PHP Branch | Supported |
---|---|---|
main | main | |
8.x | 8.x | 8.x |
7.x | 7.x | 7.17 |
Upvotes: 0
Reputation: 2080
As you know, S.O is also used as a keyword-based reference for the Community years later. Therefore I'm jumping in to add an important discovery I made about resolving this No alive nodes found in your cluster
message:
If you guys are trying to connect to ES Cloud using PHP for example, and are getting this exact message, whereas you've been following the Elasticsearch PHP Client > Connecting documentation section
, and in particular, trying to connect via the CloudId:
$client = ClientBuilder::create()
->setElasticCloudId('<cloud-id>')
->setBasicAuthentication('<username>', '<password>')
->build();
Well you should try to add CA Bundle verification:
$caBundle = \Composer\CaBundle\CaBundle::getBundledCaBundlePath();
$client = ClientBuilder::create()
->setElasticCloudId($ES_CloudID)
->setSSLVerification($caBundle)
->setBasicAuthentication($ES_username, $ES_password)
->build();
I demonstrated that commenting out ->setSSLVerification($caBundle)
makes the construction fail.
Upvotes: 1
Reputation: 858
Remove the trailing slash in elastic search. Sometimes it creates error.
Atleast in my case I removing the trailing slash from Amazon ES URL make it working.
Upvotes: 0
Reputation: 2277
I also facing the same problem. I was specified in host 'myhostaddress:9200'. Change it with IP of your Elasticsearch host server like '127.0.0.1:9200' . It resolve my problem.
Upvotes: 2
Reputation: 979
I have found this error and solved it by following steps:
Comments the plugin setting on app/etc/env.php file.
'system' => [
'default' => [
/* 'smile_elasticsuite_core_base_settings' => [
'es_client' => [
'servers' => 'node-1:9200,node-2:9200',
'enable_https_mode' => '0',
'enable_http_auth' => '0',
'http_auth_user' => '',
'http_auth_pwd' => ''
]
] */
]
]
Start the server.
upgrade magento
php bin/magento setup:upgrade
Upvotes: 2
Reputation: 23
Your answer can be found at the link I am providing https://forums.aws.amazon.com/thread.jspa?threadID=230626 I got the same problem but through this link it resolved, the answer which suggest attaching a suffix :443 at the end will work
Upvotes: 0
Reputation: 514
I found the error.Error is coming due to space before node.name and cluster.name.Remove the space and its working fine.
Updated elasticsearch.yml file
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please see the documentation for further information on configuration options:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: my-application-shakedeal
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: shakedeal-1
#
# Add custom attributes to the node:
#
# node.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
# path.data: /path/to/data
#
# Path to log files:
#
# path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
# bootstrap.memory_lock: true
#
# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
# available on the system and that the owner of the process is allowed to use this limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 127.0.0.1
network.bind_host: IP_ADDRESS
#
# Set a custom port for HTTP:
#
# http.port: 9200
#
# For more information, see the documentation at:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
# discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
#
# discovery.zen.minimum_master_nodes: 3
#
# For more information, see the documentation at:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
# gateway.recover_after_nodes: 3
#
# For more information, see the documentation at:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
#
# ---------------------------------- Various -----------------------------------
#
# Disable starting multiple nodes on a single system:
#
# node.max_local_storage_nodes: 1
#
# Require explicit names when deleting indices:
#
# action.destructive_requires_name: true
PHP Code
<?php
require 'vendor/autoload.php';
$indexParams = [
'index' => 'my_index',
'body' => [
'settings' => [
'number_of_shards' => 5,
'number_of_replicas' => 1
]
]
];
$client = Elasticsearch\ClientBuilder::create()
->setSSLVerification(false)
->setHosts(["IP_ADDRESS:9200"])->build();
$response = '';
try {
/* Create the index */
$response = $client->indices()->create($indexParams);
print_r($response);
print_r($response);
} catch(Exception $e) {
echo "Exception : ".$e->getMessage();
}
die('End : Elastic Search');
?>
Success Response :
Array
(
[acknowledged] => 1
)
Upvotes: 3