【问题标题】:Solrj cannot connect to AWS EC2 box with SolrSolrj 无法使用 Solr 连接到 AWS EC2 盒子
【发布时间】:2017-04-25 06:27:12
【问题描述】:

我正在尝试连接到我在 EC2 Ubuntu AMI 上运行的 solr 实例。我已经为 solr 开放了 7574、8982 和 9983 端口。我可以看到控制台很好。我正在使用 solrj 连接到我的实例并尝试使用一个字段编写 Solr 文档。

CloudSolrClient solr = new CloudSolrClient.Builder().withZkHost(external-ip:9983).build();
SolrInputDocument doc = new SolrInputDocument();
doc.addField("test", "test");
solr.add("collection", doc);
solr.commit();

从 Solr 管理控制台,我可以看到空集合。重试 5 次后出现此错误。

org.apache.solr.client.solrj.SolrServerException: 没有可用的实时 SolrServers 可用于处理此请求:[http://internal-ip:8983/solr/collection, http://internal-ip:7574/solr/collection]

原因:java.net.ConnectException:连接超时:连接

我很困惑为什么内部 IP 会显示在错误消息中,以及为什么它通常无法连接。

我使用命令 ./solr -e cloud -noprompt 启动 Solr

Java 8

【问题讨论】:

    标签: java amazon-web-services amazon-ec2 solr solrj


    【解决方案1】:

    查看您的问题,我想您正在 AWS EC2 实例中运行 Solr,并且您正在使用 Solrj 从您的本地计算机与 Solr 进行交互。

    命令 ./solr -e cloud 在您的本地工作站上启动 SolrCloud 集群。脚本创建的网络具有与您的需求不兼容的拓扑。 以独立风格启动 Solr (./solr start) 应该可以让您以更少的痛苦进行远程连接。

    在这种情况下你必须使用HttpSolrClient:

    String urlString = "http://remote-ec2-ip-address:8983/solr/yourcollection";
    SolrClient solr = new HttpSolrClient.Builder(urlString).build();
    

    当您以 SolrCloud 模式启动 Solr 时,Solrj 客户端使用 Zookeeper 来发现 SolrCloud 集合的 Solr 端点。

    但是 Zookeeper 会向客户端返回每个 Solr 实例的 url 列表,在您的情况下,这些 url 使用只能在 AWS 网络内访问的 IP 地址。

    这就是您无法远程连接的原因。

    更新

    需要明确的是,如果 SolrCloud 仅在您需要企业配置时才有意义,当您有数百万个查询要提供服务和/或数十亿个文档要搜索时。

    一个集群也意味着许多 EC2 实例,通常是 3 个(或更多)Solr 实例和 3 个(或 5 个)Zookeeper 实例。

    【讨论】:

    • 感谢您的建议。我将尝试使用 HttpSolrClient,但如果我想在 SolrCloud 模式下运行,我需要设置什么?我看到另一个网页提到将 serverip1:2181,serverip2:2182,serverip3:2183 添加到 solr.xml
    • 远程连接所需的 SolrCloud 配置必须手动完成,这不是一件容易的事。首先,我建议看看这个:github.com/freedev/solrcloud-zookeeper-docker
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2017-12-13
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多