【问题标题】:Elastic Search Give an error No alive nodes found in your clusterElastic Search 报错 No alive nodes found in your cluster
【发布时间】:2017-07-21 20:01:36
【问题描述】:

我开始使用弹性搜索。我在我的服务器上成功安装了弹性搜索(与应用程序服务器不同)。但是当我尝试从我的应用程序服务器调用弹性搜索时,它给出了一个错误 Fatal error: Uncaught exception 'Elasticsearch\Common\Exceptions\NoNodesAvailableException' with message 'No alive nodes found in your cluster'

当我检查 Elastic 搜索状态时,它显示 Active

如何将弹性搜索从我的应用程序服务器调用到我的弹性搜索服务器。

<?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 会显示失败状态。

注意:弹性搜索安装在与我的应用程序服务器不同的服务器上。

【问题讨论】:

  • 您是否在配置文件中添加了network.bind_host: 0 以启用来自本地主机以外的侦听功能?
  • 尝试在elasticsearch.yml中添加network.bind_host: IP_of_your_elastic_search_server,重启弹性搜索服务并尝试从你的应用服务器ip:9200
  • @Kamran Sir 当我设置 network.bind_host: 0 或 network.bind_host: IP_of_your_elastic_search_server 然后检查 elasticsearch 状态它的显示失败。当我评论“#network.bind_host:0”然后它的显示活动。
  • 停止elasticsearch服务,添加network.host: 0.0.0.0再次启动服务。
  • 别忘了把你的 elsaticsearch 服务器 ip 放在 $hosts = ['ip_address:9200']; 数组中

标签: php search elasticsearch server


【解决方案1】:

我发现了错误。由于 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
 )

【讨论】:

  • 但是“elasticsearch.yml”文件在哪里,我很难找到这个文件,但我没有得到任何类型的文件,所以请知道它在哪里...谢谢
  • @Yagneshbhalala 最有可能在 /etc/elasticsearch/elasticsearch.yml 如果没有,请尝试在命令行输入updatedb,然后输入locate elasticsearch|grep elasticsearch.yml
【解决方案2】:

我发现了这个错误并通过以下步骤解决了它:

  1. 评论 app/etc/env.php 文件中的插件设置。

    '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' => ''
       ]
      ] */
     ]
    ]
    
  2. 启动服务器。

  3. 升级magento

    php bin/magento setup:upgrade 
    

【讨论】:

    【解决方案3】:

    我也面临同样的问题。我在主机'myhostaddress:9200'中被指定。使用 Elasticsearch 主机服务器的 IP 更改它,例如 '127.0.0.1:9200' 。它解决了我的问题。

    【讨论】:

      【解决方案4】:

      您的答案可以在我提供的链接中找到https://forums.aws.amazon.com/thread.jspa?threadID=230626 我遇到了同样的问题,但是通过这个链接解决了,建议在末尾附加后缀 :443 的答案将起作用

      【讨论】:

        【解决方案5】:

        删除弹性搜索中的尾部斜杠。有时它会产生错误。

        至少在我的情况下,我从 Amazon ES URL 中删除了尾部斜杠使其正常工作。

        【讨论】:

          【解决方案6】:

          我在 magento2 中也面临同样的问题

          然后,我安装了

          $sudo apt-get install elasticsearch
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-02-14
            • 1970-01-01
            • 1970-01-01
            • 2017-06-30
            • 2020-12-12
            • 2016-10-16
            相关资源
            最近更新 更多