【问题标题】:SolrCloud - Update information solrcore.properties not working unless we restart JettySolrCloud - 除非我们重新启动 Jetty,否则更新信息 solrcore.properties 不起作用
【发布时间】:2013-12-18 01:28:44
【问题描述】:

我们有 - 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&amp;name=collection_one

如果我转到 Solr 管理,在“云”菜单 >“树”>“/configs”>“conf_one”上,我可以看到我的文件 solrcore.properties 发生了变化。

那么有没有一种解决方案可以在不重启 Jetty 实例的情况下加载更改?

【问题讨论】:

    标签: solr apache-zookeeper solrcloud


    【解决方案1】:

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

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

    示例:

    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 文件,但连接值不同。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      我还需要设置多个属性,我找到了一种更简单的方法来完成它,而不是将它们全部单独注入 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 文件部署到集群中的每个节点。

      【讨论】:

        猜你喜欢
        • 2015-03-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 2015-03-17
        • 2013-06-28
        • 1970-01-01
        相关资源
        最近更新 更多