【问题标题】:Errors connecting to solrcloud using CloudSolrClient使用 CloudSolrClient 连接到 solrcloud 时出错
【发布时间】:2019-12-27 05:51:27
【问题描述】:

我正在尝试使用 solrj CloudSolrClient 连接到 solrCloud,但出现错误。

以前直接调用单个solr节点,现在切换到solrcloud。我尝试了在线文档中指定的各种不同的 url 格式。

SolrClient solrClient = new CloudSolrClient.Builder(zkUrl).build();
SolrQuery solrQuery = new SolrQuery();

solrQuery.setRequestHandler(FIELD_LIST_HANDLER);
QueryRequest req = new QueryRequest(solrQuery);
req.setBasicAuthCredentials(zkUser, zkPassword);
QueryResponse response = req.process(solrClient, core);

当使用以下 zkHost 字符串时,我会遇到各种错误。

主机:2181

2019-08-21 15:53:17 - 错误 oaccC[.[.[.[.adnsJerseyConfiguration] [http-nio-8080-exec-1] Servlet.service() 用于 servlet [com.att. dplr.nextgen.search.JerseyConfiguration] 在路径 [] 的上下文中抛出异常 [java.lang.RuntimeException: 无法初始化 用根本原因初始化一个 HttpClusterStateProvider(是/是 Solr 服务器,[host:2181],关闭?)] org.apache.http.client.ClientProtocolException:URI 未指定有效的主机名:host:2181/admin/collections?action=CLUSTERSTATUS&wt=javabin&version=2

http://host:2181

2019-08-21 15:55:53 - 错误 oaccC[.[.[.[.adnsJerseyConfiguration] [http-nio-8080-exec-1] Servlet.service() 用于 servlet [com.att. dplr.nextgen.search.JerseyConfiguration] 在路径 [] 的上下文中抛出异常 [java.lang.RuntimeException: 无法初始化 用根本原因初始化一个 HttpClusterStateProvider(是/是 Solr 服务器,[http://host:2181],关闭?)] org.apache.http.NoHttpResponseException:主机:2181 未能响应 在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)

主机:2181/solr

2019-08-21 16:00:11 - 错误 oaccC[.[.[.[.adnsJerseyConfiguration] [http-nio-8080-exec-1] Servlet.service() 用于 servlet [com.att. dplr.nextgen.search.JerseyConfiguration] 在路径 [] 的上下文中抛出异常 [java.lang.RuntimeException: 无法初始化 用根本原因初始化一个 HttpClusterStateProvider(是/是 Solr 服务器,[host:2181/solr],关闭?)] org.apache.http.client.ClientProtocolException:URI 未指定有效的主机名:host:2181/solr/admin/collections?action=CLUSTERSTATUS&wt=javabin&version=2 在 org.apache.http.impl.client.CloseableHttpClient.determineTarget(CloseableHttpClient.java:95)

http://host:2181/solr

2019-08-21 15:57:23 - 错误 oaccC[.[.[.[.adnsJerseyConfiguration] [http-nio-8080-exec-1] Servlet.service() 用于 servlet [com.att. dplr.nextgen.search.JerseyConfiguration] 在路径 [] 的上下文中抛出异常 [java.lang.RuntimeException: 无法初始化 用根本原因初始化一个 HttpClusterStateProvider(是/是 Solr 服务器,[http://host:2181/solr],关闭?)] org.apache.http.NoHttpResponseException:主机:2181 未能响应 在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)

我需要更改什么才能使用 solrj CloudSolrClient 通过 zookeeper 成功查询 solr?

我已经从终端成功地与 zookeeper 实例通信了。

$ echo stat | nc host 2181
Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
Clients:
 /130.10.31.81:60381[0](queued=0,recved=1,sent=0)
 /135.40.74.31:48984[1](queued=0,recved=817933,sent=817933)

Latency min/avg/max: 0/0/80
Received: 1893410
Sent: 1893706
Connections: 2
Outstanding: 0
Zxid: 0xa00000636
Mode: follower
Node count: 214

【问题讨论】:

  • 你是如何配置zkhost的?它的价值是什么?
  • 上例中的zkUrl 是什么?与 zookeeper 合奏的连接不应该在其前面有 httpBuilder() 示例似乎也需要不同的参数,具体取决于 Solr 的版本。你现在使用它的方式使它尝试通过 http 而不是通过 zk 连接。
  • @MatsLindh 对于我成功的echo stat | nc 命令,zkUrl 只是主机(没有 http),我的 zkUrl 有 4 种不同的格式。当我不使用 http 时,我收到错误无法初始化 HttpClusterStateProvider (is/are the Solr server(s), [host:2181], down?)],根本原因是 org.apache.http.client。 ClientProtocolException:URI 未指定有效的主机名。我也尝试过直接使用 ipv4 地址并使用 zk:// 前缀导致 zk 协议不受支持

标签: java solr solrj solrcloud


【解决方案1】:

当配置 itme clusterprops.json 在 zookeeper 中不可用时,我也得到了这个 ClientProtocolException / 内容:

{"urlScheme":"https"}

【讨论】:

    【解决方案2】:

    原来solrurls和zkurls都可以提供给CloudSolrClient.Builder。我能够通过使用接受 zkUrls 而 CloudSolrClient.Builder(hosts).build() 接受 solr Urls 的 SolrClient solrClient = new CloudSolrClient.Builder(hosts, Optional.empty()).build(); 来解决上一个问题

    【讨论】:

      猜你喜欢
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2013-12-03
      • 2019-10-23
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多