2012-10-25 51 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