2017-03-02 74 views
6

我開始使用彈性搜索。我在我的服務器上成功安裝了彈性搜索(與應用程序服務器不同)。但是當我嘗試從我的應用程序服務器調用Elatic搜索時它給出了一個錯誤 Fatal error: Uncaught exception 'Elasticsearch\Common\Exceptions\NoNodesAvailableException' with message 'No alive nodes found in your cluster'彈性搜索提供錯誤在羣集中找不到活動節點

當我檢查彈性搜索狀態它顯示活動

如何從我的應用程序服務器向彈性搜索服務器調用彈性搜索。

<?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); 
?> 

我elasticsearch.yml設置

# ======================== 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設置未工作

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

當我設置了上述設置,然後elasticsearch顯示失敗的狀態。

注意:彈性搜索安裝在與我的應用服務器不同的服務器上。

+0

有你加入' network.bind_host:0'在你的配置文件中啓用從本地主機以外的監聽? – Kamran

+0

嘗試在'elasticsearch.yml'中添加'network.bind_host:IP_of_your_elastic_search_server',重新啓動彈性搜索服務並從您的應用服務器嘗試http:// ip:9200 – Kamran

+0

@Kamran Sir當我設置network.bind_host:0或network.bind_host :IP_of_your_elastic_search_server,然後檢查其顯示失敗的彈性搜索狀態。當我評論「#network.bind_host:0」時,它顯示Active。 – Tomas

回答

2

我發現error.Error之前node.namecluster.name卸下襬臂的空間和它的做工精細即將到期的空間。

更新elasticsearch.yml文件

# ======================== 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代碼

<?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'); 

?> 

成功響應

Array 
(
    [acknowledged] => 1 
)