[英]How do I configure Solr replication with multiple cores
我有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>
您需要做的是復制從服務器上的solr實例並在solrconfig.xml
上配置復制處理程序。 最佳做法是為每個核心分配一個不同的instanceDir
目錄,因為通常每個核心都有自己的schema.xml
和solrconfig.xml
。 無論如何,您可以使用相同的conf只配置您的solr.xml
指向相同的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
這樣的solr.core.name
會自動添加到核心作用域中 ,您可以在配置中引用它們。 因此,如果您沒有任何核心特定設置,則每個核心的復制部分可以相同。
此外,您可以使用以下配置為主服務器和從服務器使用相同的配置,只需根據您要執行的操作更改分配給環境變量enable.master
和enable.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>
是的,您需要在要復制的核心的每個副本中具有完全相同的文件副本。
要卸載更多的solr實例,我建議您使用僅用於索引的主服務器和從主服務器復制的2個從服務器,用於查詢您的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.