如何使用多个核配置Solr复制

时间:2012-10-25 09:16:28

标签: solr replication

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

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

我的配置:
配置:/ data / solr / web / solr / conf / config文件
数据:/ data / solr / data / solr / core data dirs

是否真的有必要为每个核心复制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>

2 个答案:

答案 0 :(得分:16)

您需要做的是复制从属服务器上的solr实例,并在solrconfig.xml上配置复制处理程序。 最佳做法是为每个核心创建一个不同的instanceDir目录,因为通常每个核心都有自己的schema.xmlsolrconfig.xml。无论如何,您可以使用相同的配置文件,只需将solr.xml配置为指向相同的instanceDir,但指定dataDir dataDir solrconfig.xml <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,那么这应该是您的情况。

从属服务器上的<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> 复制部分需要包含主服务器的URL,包括核心名称,当然每个核心名称都不同。但您可以像这样使用占位符$ {solr.core.name}:

solr.core.name

事实上,enable.master等某些属性会自动添加到core scope中,您可以在配置中引用它们。因此,如果您没有任何核心特定设置,则每个核心的复制部分可以相同。

此外,您可以使用具有以下配置的master and slave相同的配置,只需更改分配给环境变量enable.slave<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> 的值(true或false)在你想做什么。我的意思是你可以使用相同的文件,但当然它将在不同的机器上,因为在同一台机器上拥有主机和从机是没有多大意义的。

{{1}}

答案 1 :(得分:1)

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

要卸载更多的solr实例,我建议您使用仅用于索引的主服务器和从主服务器复制的2个服务器,用于查询您的文档。