SolrCloud - 更新信息solrcore.properties不工作,除非我们重新启动Jetty

时间:2013-12-02 10:58:53

标签: solr apache-zookeeper solrcloud

我们有   - 3个ZooKeepers运行(独立,不是SolrCloud嵌入的)   - 2 Solr实例(版本4.5)

在我们的conf目录中,我们添加文件solrcore.properties以便为dataimporthandler放置动态参数。 一切正常(见下文我们是如何做到的,它也可能对人们有帮助)。

问题是当我想要更改一个值时,除非我重新启动Jetty,否则它无法正常工作?

  • solrcore.properties位于/var/opt/solr4.5/myapp/solr/mycore/conf
  • 我们在内部放置参数和值

    dihBddHost=host
    dihBddPort=3306
    dihBddDatabase=mydatabase
    dihBddLogin=mylogin
    dihBddPassword=mypassword
    
  • 在solrconfig.xml中,在DataImportHandler部分,我们做了

      <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
        <lst name="defaults">
            <str name="update.chain">langid</str>
            <str name="config">db-data-config.xml</str>
        </lst>
        <lst name="invariants"> 
            <str name="dihBddHost">${dihBddHost}</str> 
            <str name="dihBddPort">${dihBddPort}</str> 
            <str name="dihBddDatabase">${dihBddDatabase}</str> 
            <str name="dihBddLogin">${dihBddLogin}</str> 
            <str name="dihBddPassword">${dihBddPassword}</str> 
        </lst>  
      </requestHandler>
    
  • 当我更改我的solrcore.properties时,首先,它将更改放在zookeeper中(进入/var/opt/solr4.5/myapp/solr /)

    cloud-scripts/zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -d /var/opt/solr4.5/myapp/solr/mycore/conf -n conf_one
    
  • 最后,重新加载收藏品 http://myserveur:8983/solr/admin/collections?action=RELOAD&name=collection_one

如果我去Solr Administration,请在“Cloud”菜单上&gt; “树”&gt; “/ configs”&gt; “conf_one”,我可以看到我的文件solrcore.properties发生了变化。

那么有没有重新启动Jetty实例来加载更改的解决方案?

2 个答案:

答案 0 :(得分:1)

在通过网络阅读了很多线程和JIRA后,我发现在zookeeper中使用solrcore.properties并不是一个好方法。 事实上,即使是同一个集合,您的实例也可能具有不同的值。

所以,我所做的,是使用CoreAdmin创建我的核心,并直接将我的属性放在那里,以便在创建时设置everthing。

例如:

http://myserver:8983/solr/admin/cores?action=CREATE&name=core_one&collection=collection_one&collection.configName=conf_one&property.dihBddHost=myhost&property.dihBddPort=3306&property.dihBddDatabase=mydatabase&property.dihBddLogin=mylogin&property.dihBddPassword=mypassword

在solrconfig.xml中,不要忘记输入默认值,以避免一些错误; - )

<!-- Data Import Handler -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">db-data-config.xml</str>
    </lst>
    <lst name="invariants"> 
        <str name="dihBddHost">${dihBddHost:myhost}</str> 
        <str name="dihBddPort">${dihBddPort:3306}</str> 
        <str name="dihBddDatabase">${dihBddDatabase:mydatabase}</str> 
        <str name="dihBddLogin">${dihBddLogin:mylogin}</str> 
        <str name="dihBddPassword">${dihBddPassword:mypassword}</str> 
    </lst>  
</requestHandler>  

创建核心后,如果打开core.properties文件,则会看到自己编写的属性。

非常有用,因为在DEV / TEST / PROD环境中使用相同的conf文件但连接值不同。

希望它有所帮助。

答案 1 :(得分:0)

我还需要设置多个属性,我发现了一种更简单的方法,而不是将它们全部单独注入到CREATE集合命令中。只需添加包含主属性文件路径的“properties”属性(请参阅the documentation):

http://myserver:8983/solr/admin/cores?action=CREATE&name=core_one&collection=collection_one&collection.configName=conf_one&property.properties=/var/lib/solr/allcore.properties

具体做法是:

&property.properties=/var/lib/solr/allcore.properties

并将allcore.properties文件部署到群集中的每个节点。