当前位置: 首页 > 知识库问答 >
问题:

无可用节点异常Elasticsearch 5.0.2

罗心思
2023-03-14

首先,我为我的英语感到抱歉。我有一个问题与Java API传输客户端。我有一个主节点和三个数据节点。我的Elasticsearch版本是5.0.2,我使用5.0.2 API。

我尝试用传输客户端连接到群集,然后响应

Exception in thread "main" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{8SAZOxXXTU61DuDDMN-vGw}{XX.XX.X.XXX}{XX.XX.X.XXX:9300}, {#transport#-2}{Fv3729YgTGClRBo5T2mWpA}{XX.XX.X.XXX}{XX.XX.X.XXX:9300}, {#transport#-3}{Fr98ApBbRv29Xv6Mc8L4TQ}{XX.XX.X.XXX}{XX.XX.X.XXX:9300}, {#transport#-4}{JOmpSH4LRzuP_XInxQtD9Q}{XX.XX.X.XXX}{XX.XX.X.XXX:9300}]]
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:328)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:226)
    at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59)
    at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:339)
    at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:403)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54)
    at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:62)
    at nn.Main.main(Main.java:57)

这是我的客户端代码:

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;

public class Main {
    private static String[] hosts = new String[] {
            "XX.XX.X.XXX"
            ,"XX.XX.X.XXX"
            ,"XX.XX.X.XXX"
            ,"XX.XX.X.XXX"          
            };

    private static final Settings settings = Settings.builder()
            .put("cluster.name", "myCluster")
            .put("client.transport.sniff", true)
            .put("transport.tcp.port", 9300)
            .put("xpack.security.user", "transport_client_user:changeme")
            .build();
    private static final String index = "myIndex";
    private static final String type = "myType";
    private static TransportClient client;


    public static void main(String[] args) throws UnknownHostException {

        InetSocketTransportAddress[] ista = new InetSocketTransportAddress[hosts.length]; 

        for (int i = 0; i < hosts.length; i++) {
        ista[i] = new InetSocketTransportAddress(InetAddress.getByName(hosts[i]), 9300);
    }

        client = new PreBuiltXPackTransportClient(settings).addTransportAddresses(ista);        

        SearchRequestBuilder rb = client
                .prepareSearch(index)
                .setTypes(type)
                .setSearchType(SearchType.DEFAULT)
                .setQuery(QueryBuilders.termQuery("_id", 3524598));


        SearchResponse sResponse = rb.get();
        System.out.println(sResponse.toString());
    }
}

传输客户端的端口-9300,我的所有节点都在此端口下通信。我看到了很多和我一样的问题,我试图遵循其中包含的建议。但我也有同样的例外。

如果需要更多的信息或任何文件或我的弹性设置-我准备回答。

如果很重要,这是ElasticSearch.yml的内容

cluster.name: myCluster
node.name: elastic-0

path.data: /var/db/elasticsearch
path.logs: /var/log/elasticsearch
path.scripts: /usr/local/libexec/elasticsearch

network.host: _vmx0_

node.master: true 
node.data: false 
node.ingest: false 

node.attr.rack_id: rack_one
cluster.routing.allocation.awareness.attributes: rack_id

discovery.zen.minimum_master_nodes: 3
discovery.zen.ping.unicast.hosts: ["XX.XX.X.XXX","XX.XX.X.XXX","XX.XX.X.XXX","XX.XX.X.XXX","XX.XX.X.XXX"]

bootstrap.memory_lock: false

xpack.monitoring.exporters:
  id1:
    type: http
    host: ["XX.XX.X.XXX:9200"] 
    auth.username: remote_monitor 
    auth.password: changeme

我尝试只在client上更改TransportClient,并禁用client.transport.sniff,但没有结果。

我将非常感激任何帮助或想法。

共有1个答案

年风华
2023-03-14

我找到了我收到“NonodeAvailableException”的原因。

原因是transport_client的角色没有授予在默认情况下查看所有索引中的数据的权限。我将为访问索引中的数据建立我的角色。

链接:https://www.elastic.co/guide/en/x-pack/5.0/build-in-roles.html

 类似资料:
  • 我对弹性搜索概念非常陌生。我试图建立一个简单的应用程序使用弹性搜索。 我的类看起来像, 谢谢你。

  • 我使用的是Aerospike3.12.1.1和Java4客户端。 Aerospike命名空间配置为在内存中。我的意图是使用20个线程并行地向内存单仓名称空间中写入1亿个整数,其中每个线程写入500万个整数。

  • 问题内容: 我从计算机访问服务器 得到这个 为什么使用Java API会出错? 编辑 有集群和节点部分的配置 问题答案: 一些建议: 1-使用端口9300。[9300-9400]用于节点到节点通信,[9200-9300]用于HTTP通信。 2-确保您使用的Java API的版本与服务器上运行的elasticsearch的版本匹配。 3-确保集群名称为(检查服务器上的elasticsearch.ym

  • 作者:mendickxiao 经过部署Kubernetes集群章节我们已经可以顺利的部署一个集群用于开发和测试,但是要应用到生产就就不得不考虑master节点的高可用问题,因为现在我们的master节点上的几个服务kube-apiserver、kube-scheduler和kube-controller-manager都是单点的而且都位于同一个节点上,一旦master节点宕机,虽然不应答当前正在运

  • 我最近将selenium升级到最新版本(2.53),将firefox升级到最新版(45.0.1)。 我在相同的网站上运行相同的代码,但我突然有很多这样的例外: Web 驱动程序异常: 消息: 元素在点 (312, 8.816665649414062) 不可单击。其他元素将收到单击: 例如: 有什么我应该注意的新东西吗?我之前的python selenium版本相当旧,而且我在Firefox 38上

  • 当我在master note上运行此命令时 然而,Hadoop multinode运行良好