如何指定zookeeper目录为每个SolrCore / SolrCollection上传配置文件

时间:2014-04-16 03:10:53

标签: solr apache-zookeeper solrcloud

我从solr4.1.0升级到solr4.7.1。之前,我使用外部ZooKeeper集合部署了SolrCloud(超过2个节点)。 solr.xml看起来像:

<solr persistent="true" sharedLib="lib">
  <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:}" hostContext="solr">
    <core collection="collection1" name="core1" instanceDir="core1" />
  </cores>
</solr>

我在一个节点上通过以下命令引导云:

java -Djetty.port=8983 -Dsolr.solr.home=/dir/to/mysolrhome -Dbootstrap_conf=true -DzkHost=zookeeper1:2181 -jar start.jar

并使用以下命令启动其他solr节点:

java -Djetty.port=8983 -Dsolr.solr.home=/dir/to/mysolrhome -DzkHost=zookeeper1:2181 -jar start.jar

我的solr.home目录结构是:

mysolrhome    
    |--core1
    |--solr.xml

使用solr4.1.0时一切顺利。

但是当我将solr升级到v4.7.1时,我得到了以下异常:

5955 [coreLoadExecutor-4-thread-1] ERROR org.apache.solr.common.cloud.ZkStateReader  - Specified config does not exist in ZooKeeper:collection1
5957 [coreLoadExecutor-4-thread-1] ERROR org.apache.solr.core.CoreContainer  - Unable to create core: core1
org.apache.solr.common.cloud.ZooKeeperException: Specified config does not exist in ZooKeeper:collection1
    at org.apache.solr.common.cloud.ZkStateReader.readConfigName(ZkStateReader.java:152)
    at org.apache.solr.core.ZkContainer.createFromZk(ZkContainer.java:233)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:595)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:258)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:250)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
5959 [coreLoadExecutor-4-thread-1] ERROR org.apache.solr.core.CoreContainer  - null:org.apache.solr.common.SolrException: Unable to create core: core1
    at org.apache.solr.core.CoreContainer.recordAndThrow(CoreContainer.java:989)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:606)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:258)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:250)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
Caused by: org.apache.solr.common.cloud.ZooKeeperException: Specified config does not exist in ZooKeeper:collection1
    at org.apache.solr.common.cloud.ZkStateReader.readConfigName(ZkStateReader.java:152)
    at org.apache.solr.core.ZkContainer.createFromZk(ZkContainer.java:233)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:595)
    ... 10 more

我检查了zookeeper,它显示了以下结构: enter image description here 似乎上传到zookeeper的configure目录是核心名称core1,但是solr加载了集合名称collection1的configure目录。

当我更改solr.xml以将核心名称设置为collection1时,它会起作用。

我的问题是,我可以为每个集合配置上传的配置目录吗? 或者,如果我更改我的核心名称,我之前的申请是否有任何副作用? 还是有其他解决方案?

我不使用-Dbootstrap_confdir,因为它只支持一个集合。我有多个使用不同模式的集合。

提前感谢。

1 个答案:

答案 0 :(得分:1)

最后,我将集合名称(&#34; collection1&#34;)更改为核心名称(&#34; core1&#34;)。