我从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,它显示了以下结构:
似乎上传到zookeeper的configure目录是核心名称core1
,但是solr加载了集合名称collection1
的configure目录。
当我更改solr.xml
以将核心名称设置为collection1
时,它会起作用。
我的问题是,我可以为每个集合配置上传的配置目录吗? 或者,如果我更改我的核心名称,我之前的申请是否有任何副作用? 还是有其他解决方案?
我不使用-Dbootstrap_confdir
,因为它只支持一个集合。我有多个使用不同模式的集合。
提前感谢。
答案 0 :(得分:1)
最后,我将集合名称(&#34; collection1&#34;)更改为核心名称(&#34; core1&#34;)。