java - Solrcloud Zookeper 设置 : No registered leader was found after waiting for 4000ms , 集合:c1 切片:shard2

标签 java solr apache-zookeeper solrj solrcloud

我正在使用 solr 4.10.3,我通过 java 中的嵌入式 jetty 服务器启动 solr。我正在尝试使用 2 个分片(领导者)配置 solrcloud。我有一个外部 zookeeper 设置,我在像这样启动 solr 时指向 zookeeper 实例。

        System.setProperty("zkHost", "192.168.2.21:2111");
        System.setProperty("numShards", "2");
        System.setProperty("collection.configName", "configuration1");
        System.setProperty("bootstrap_confdir","/conf/zooconf");

我有两个 solr 实例在运行,一个在 8983 端口,另一个在 8984。问题是,我不确定两个 solr 节点是否都被识别为领导者。由于我通过 java 启动 solr,因此无法在 solr 管理 UI 中查看状态。

以下是我的 solr.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<solr>
  <solrcloud>
    <str name="host">192.168.2.21</str>
    <int name="hostPort">${hostPort:8984}</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${solr.zkclienttimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:120000}</int>
    <int name="connTimeout">${connTimeout:15000}</int>
  </shardHandlerFactory>
</solr>

在主要方法中,我连接到其中一个 solr 实例 (8983) 并使用以下代码片段创建核心。

    CloudSolrServer server = new CloudSolrServer("192.168.2.21:2111"); 
    server.setZkConnectTimeout(15*60*1000);
    server.setZkClientTimeout(15*60*1000);
    server.setParser(new BinaryResponseParser());
    server.setRequestWriter(new BinaryRequestWriter());     
    server.setDefaultCollection("C1");

    Create adminRequest = new Create();
    adminRequest.setAction(CoreAdminAction.CREATE);
    adminRequest.setCoreName("C1");
    adminRequest.setCollection("C1");
    adminRequest.setCollectionConfigName("configuration1");
    adminRequest.setDataDir("c:\\setup\somelocation");
    adminRequest.setInstanceDir("c:\\setup\somelocation\C1");
    adminRequest.process(solrServer);

当我执行此操作时,仅在一个 solr 实例 (8983) 中创建 C1。 (核心不应该在两个 solr 实例的数据目录中创建吗?)。并且在添加文档时,抛出以下异常。

No registered leader was found after waiting for 4000ms , collection: c1 slice: shard2

这是添加文档时的 clusterState :

live nodes:[192.168.2.21:8984_solr, 192.168.2.21:8983_solr] collections: {
   C1=DocCollection(C1)=   {
      "shards":{
         "shard1":{
            "range":"80000000-ffffffff",
            "state":"active",
            "replicas":{
               "core_node1":{
                  "state":"active",
                  "core":"C1",
                  "node_name":"192.168.2.21:8983_solr",
                  "base_url":"http://192.168.2.21:8983/solr",
                  "leader":"true"
               }
            }
         },
         "shard2":{
            "range":"0-7fffffff",
            "state":"active",
            "replicas":{

            }
         }
      },
      "maxShardsPerNode":"1",
      "router":{
         "name":"compositeId"
      },
      "replicationFactor":"1",
      "autoAddReplicas":"false",
      "autoCreated":"true"
   }
}

如果我在添加文档之前在另一个 solr 实例 (8984) 中创建核心,它工作正常。文档被索引并分布在 2 个分片之间。我做错了什么吗?请帮帮我。

提前致谢..

最佳答案

我在创建 adminRequest 时添加了以下几行,它起作用了

adminRequest.setPath("/admin/collections");
adminRequest.setNumShards(2);

以前它无法正常工作,因为默认路径指向旧的 api“/admin/cores”。我们需要确保在 adminRequest 对象中为 New Collection API 中提到的 solrcloud 操作提供新的 api 路径“/admin/collections” .

关于java - Solrcloud Zookeper 设置 : No registered leader was found after waiting for 4000ms , 集合:c1 切片:shard2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29515948/

相关文章:

java - 从Zookeeper znode获取数据

docker - 如何通过监控cpu、内存、磁盘io等来调度作业

java - Tomcat不重新部署修改JSP?

java - 我的vps有足够的内存,但vm无法运行

java - 在内存中存储等距网格的最佳方法是什么?

solr - yii2 Composer 更新 fatal error

java - 如何将 solr 日期转换为 javascript 日期?

Java Async Http 客户端比较

ruby-on-rails - Travis-CI 与 Debian 的测试速度

java - 尝试在 yahoo streaming-benchmark 上运行 STORM_TEST 时出错