php - Cliente de Elasticsearch lanzando la excepción "No se encontraron nodos vivos en su clúster"
php-5.6 (11)
Compruebe si su servidor se ejecuta con el siguiente comando.
service elasticsearch status
Tuve el mismo problema y lo solucioné.
He añadido script.disable_dynamic: true
a elasticsearch.yml como se explica en el tutorial de Digitalocan https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-14-04
Entonces, el servidor elasticsearch no se inició.
Eliminé la siguiente línea de elasticsearch.yml
script.disable_dynamic: true
Estoy tratando de hacer una operación de escaneo y desplazamiento en un índice como se muestra en el example :
$client = ClientBuilder::create()->setHosts([MYESHOST])->build();
$params = [
"search_type" => "scan", // use search_type=scan
"scroll" => "30s", // how long between scroll requests. should be small!
"size" => 50, // how many results *per shard* you want back
"index" => "my_index",
"body" => [
"query" => [
"match_all" => []
]
]
];
$docs = $client->search($params); // Execute the search
$scroll_id = $docs[''_scroll_id'']; // The response will contain no results, just a _scroll_id
// Now we loop until the scroll "cursors" are exhausted
while (/true) {
// Execute a Scroll request
$response = $client->scroll([
"scroll_id" => $scroll_id, //...using our previously obtained _scroll_id
"scroll" => "30s" // and the same timeout window
]
);
// Check to see if we got any search hits from the scroll
if (count($response[''hits''][''hits'']) > 0) {
// If yes, Do Work Here
// Get new scroll_id
// Must always refresh your _scroll_id! It can change sometimes
$scroll_id = $response[''_scroll_id''];
} else {
// No results, scroll cursor is empty. You''ve exported all the data
break;
}
}
La primera llamada API $client->search($params)
ejecuta correctamente y puedo recuperar la ID de desplazamiento. Pero la API $client->scroll()
falla y obtengo la excepción: "Elasticsearch / Common / Exceptions / NoNodesAvailableException No hay nodos vivos en su clúster"
Estoy usando Elasticsearch 1.7.1 y PHP 5.6.11
Por favor ayuda
Configuré el servidor Elasticsearch en el acoplador como el documento, https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
Pero usa una red diferente (redes: - esnet) y no puede hablar con la red de la aplicación. Después de eliminar la configuración de redes y funciona bien.
Descomentar en elasticsearch.yml :
network.host:198....
Y configurado para:
127.0.0.1
Me gusta esto:
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 127.0.0.1
#
# Set a custom port for HTTP:
#
# http.port: 9200
#
Uso Elasticsearch 2.2 en Magento 2 en el contenedor LXC.
Descubrí que el controlador php de elasticsearch está plagado de problemas, la solución que tenía era implementar la API RESTful con curl mediante php. Todo funcionaba mucho más rápido y la depuración era mucho más fácil.
Ese error básicamente significa que no puede encontrar su clúster, probablemente debido a una mala configuración del lado del cliente o del servidor.
He tenido el mismo problema con scroll y estaba trabajando con ciertos índices pero no con otros. Debe haber sido un error en el controlador, ya que se fue después de que haya actualizado el paquete elasticsearch / elasticsearch de 2.1.3 a 2.2.0
Si configura el servidor Elasticsearch en la ventana acoplable como el documento, https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
Pero usa una red diferente (redes: - esnet) de otros servicios y no puede hablar con la red de la aplicación. Después de eliminar la configuración de redes y funciona bien.
Supongo que el ejemplo no está actualizado con la versión que está utilizando (el enlace que proporcionó es 2.0, y está utilizando el 1.7.1). Solo agregue dentro del ciclo:
try {
$response = $client->scroll([
"scroll_id" => $scroll_id, //...using our previously obtained _scroll_id
"scroll" => "30s" // and the same timeout window
]
);
}catch (Elasticsearch/Common/Exceptions/NoNodesAvailableException $e) {
break;
}
Tal vez deberías tratar de hacer telnet en tu máquina telnet [your_es_host] [your_es_ip]
para verificar si puedes acceder a ella.
De lo contrario, intente abrir ese puerto o deshabilite el firewall de su máquina.
Yo recomendaría usar php curl lib directamente para las consultas de búsqueda elástica. Me resulta más fácil de usar que cualquier otra lib de cliente elasticsearch, puede simular cualquier consulta utilizando cli curl y puede encontrar muchos ejemplos, documentación y discusiones en Internet.
reinicie el servicio de búsqueda elástica y configure el host de red en el "127.0.0.1" local.