更新solr配置会重新加载tomcat

时间:2014-05-14 12:30:59

标签: tomcat solr rsync

我在tomcat托管solr。在SOLR_DIR下我有几个核心说。

当我在SOLR_DIR上的本地机器上执行rsync更新服务器上的配置时(没有触及tomcat配置文件),我发现tomcat有时会自动重新加载solr webapp。

为什么会这样?重新加载solr webapp会导致服务器在一段时间内无响应。我不希望它发生。我宁愿重新加载核心以反映更改,而无需重新启动/重新加载整个tomcat服务器。

2 个答案:

答案 0 :(得分:0)

我无法真正对付意外的Tomcat webapp重新加载,但我希望此解决方案可以帮助解决问题。当您更改solrconfig.xml文件时,您需要至少重新加载核心以查看更改。单独重新加载核心将导致核心无响应的一些时间,显然重新加载Tomcat将导致所有核心的停机时间。虽然我一直在测试模式索引中这样做,但我通常认为这在生产环境中是不可接受的。

我的生产解决方案一直在复制。我在一台服务器上构建索引,并将核心复制到第二台。所有索引修改都发生在构建索引中,所有生产查询都指向查询索引。当我对构建索引进行更改时,查询索引会提取更改并保持旧数据和/或配置运行,直到新版本准备就绪,然后在中交换更改,而不会检测到停机时间。这也是一个很好的负载平衡框架,因为您可以拥有多个复制的查询服务器。

确保您希望能够针对实时索引更改的任何conf文件配置为在复制配置中进行复制。这对于s​​olr配置来说有点棘手,因为复制配置在solrconfig.xml中,如果你将构建核心设置为master而查询核心设置为slave,那么只要它复制查询核心就会拉出构建核心的配置。然后它会认为它是主人并停止复制任何未来的变化。

我使用 this solution ,它使用变量在solr配置中设置复制,然后在您的非复制solrcore.properties文件中提供这些变量的值核心的conf文件夹。

来自solrconfig.xml

<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
    <str name="enable">${enable.master:false}</str>
    <str name="replicateAfter">startup,optimize</str>
    <str name="confFiles">schema.xml,solrconfig.xml,protwords.txt,synonyms.txt</str>
</lst>
<lst name="slave">
    <str name="enable">${enable.slave:false}</str>
    <str name="masterUrl">${master.url}</str>
    <str name="pollInterval">01:00:00</str>
</lst>
</requestHandler>

solrcore.properties:

enable.master=true
enable.slave=false
master.url=http://myserver.hostname/solr/coreName/replication

请注意,您插入solrconfig.xml但未能提供值的任何变量都会导致核心无法加载。

答案 1 :(得分:0)

这取决于您更改的文件。

检查tomcat配置并查看reloadable属性是否设置为true

<Context reloadable="true" />

https://tomcat.apache.org/tomcat-6.0-doc/config/context.html

  

如果您希望Catalina监视/ WEB-INF / classes /和/ WEB-INF / lib中的类以进行更改,则设置为true;如果检测到更改,则自动重新加载Web应用程序。此功能在应用程序开发期间非常有用,但它需要大量的运行时开销,不建议在已部署的生产应用程序上使用。这就是为什么此属性的默认设置为false。但是,您可以使用Manager Web应用程序按需触发已部署应用程序的重新加载。