2012-10-25 53 views
8

我有Solr运行多核心。 由于负载很重,我想设置一个包含完全相同索引的从站。如何配置多核心Solr复制

文档http://wiki.apache.org/solr/SolrReplication指出“为每个核心添加复制请求处理程序到solrconfig.xml”,但我只有一个solrconfig.xml。

我的配置:
配置:/数据/ Solr的/ WEB/Solr的/ conf目录/配置文件
数据:/数据/ Solr的/数据/ Solr的/核心数据显示目录

真的有必要复制每个核心的solrconfig.xml?
我应该在哪里放置这些多个solrconfig文件?

solr.xml

<?xml version="1.0" encoding="UTF-8" ?> 
    <solr persistent="true"> 
    <property name="dih.username" value="user"/> 
    <property name="dih.password" value="passwd"/> 
    <property name="jdbclib" value="/usr/progress/dlc102b/java"/> 
    <property name="dih.dburl" value="jdbc:datadirect:openedge://172.20.7.218:31380;databaseName=easource"/> <cores adminPath="/admin/cores"> 
    <core instanceDir="/data/solr/web/trunk/" name="product" dataDir="/data/solr/data/trunk/product-swap"> 
     <property name="dih-config" value="dih-config-product.xml"/> 
    </core> 
    <core instanceDir="/data/solr/web/trunk/" name="product-swap" dataDir="/data/solr/data/trunk/product"> 
     <property name="dih-config" value="dih-config-product.xml"/> 
    </core> 
    <core instanceDir="/data/solr/web/trunk/" name="periodp" dataDir="/data/solr/data/trunk/periodp"> 
     <property name="dih.config" value="dih-config-periodp.xml"/> 
    </core> 
    <core instanceDir="/data/solr/web/trunk/" name="periodp-swap" dataDir="/data/solr/data/trunk/periodp-swap"> 
     <property name="dih.config" value="dih-config-periodp.xml"/> 
    </core> 
    </cores> 
</solr> 
+0

你可以发布你的'solr.xml'来配置你的内核吗? – javanna

+0

我添加了solr.xml – DionS

+0

谢谢,正是我的想法。看看我的答案。 – javanna

回答

16

你需要做的是复制你在从属服务器上的solr实例,并在solrconfig.xml上配置复制处理程序。 由于通常每个核心都有自己的schema.xmlsolrconfig.xml,因此最好为每个核心配备不同的instanceDir目录。反正你可以只使用配置您的solr.xml相同的conf指向同一instanceDir但不同dataDir,你在你的solrconfig.xml配置为dataDir还有:

<solr persistent="true" sharedLib="lib"> 
    <cores adminPath="/admin/cores"> 
     <core name="core0" instanceDir="core"> 
      <property name="dataDir" value="/data/core0" /> 
     </core> 
     <core name="core1" instanceDir="core"> 
      <property name="dataDir" value="/data/core1" /> 
     </core> 
    </cores> 
</solr> 

这应该是你的情况,如果您目前有多个核心,但一个solrconfig.xml

从站上的solrconfig.xml复制部分需要包含主站的URL,包括核心名称,对于每个核心当然不同。但是你可以使用占位符$ {} solr.core.name像这样:

<requestHandler name="/replication" class="solr.ReplicationHandler" > 
    <lst name="slave"> 
     <str name="masterUrl">http://master_host:port/solr/${solr.core.name}/replication</str> 
     <str name="pollInterval">00:00:20</str> 
    </lst> 
</requestHandler> 

事实上,像solr.core.name一些属性被自动添加到core scope,你可以参考他们在您的配置。因此,如果您没有任何核心特定设置,则每个核心的复制部分可以相同。

此外,你可以使用相同的配置为master and slave具有以下配置,只是改变分配给基于你想要做什么环境变量enable.masterenable.slave值(true或false)。我的意思是你可以使用同一个文件,但是当然它会在不同的机器上,因为在同一台机器上有主从机是没有意义的。

<requestHandler name="/replication" class="solr.ReplicationHandler" > 
    <lst name="master"> 
     <str name="enable">${enable.master:false}</str> 
     <str name="replicateAfter">commit</str> 
    </lst> 
    <lst name="slave"> 
     <str name="enable">${enable.slave:false}</str> 
     <str name="masterUrl">http://master_host:8983/solr/${solr.core.name}/replication</str> 
     <str name="pollInterval">00:00:60</str> 
    </lst> 
</requestHandler> 
+0

非常感谢,我使用了包含enable.master和enable.slave voor两个机器的solrcore.properties文件。 – DionS

+0

很高兴我的答案帮助,不客气! – javanna

+0

谢谢你给出的例子,对我真的很有帮助。我一直在使用sym链接多个同类核心(请问为什么,是来自我的客户的请求)。并找出你的解决方案是杀手锏! – ajreal

1

是的,你需要有文件完全相同的副本,你复制的核心的每个副本。

为了卸载更多的solr实例,我建议你有一个只用于索引的主文件和2个从master进行复制的主文件,用于查询你的文档。

+0

谢谢,如果复制仍然不够,我会考虑这个选项。 – DionS