2012-10-25 33 views
8

Solrを複数のコアで実行しています。 負荷が高いため、正確に同じインデックスを含むスレーブを設定したいと思います。複数のコアでSolrの複製を設定する方法

ドキュメント「http://wiki.apache.org/solr/SolrReplication」は、「各コアのsolrconfig.xmlに複製要求ハンドラを追加します」と記載していますが、solrconfig.xmlは1つのみです。

マイ設定:
設定:/データ/ Solrの/ウェブ/ Solrの/ confに/設定ファイル
データ:/データ/ Solrの/データ/ Solrの/コアデータの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> 
+0

あなたのコアを設定した場所であなたの 'solr.xml'を投稿できますか? – javanna

+0

私はsolr.xmlを追加しました – DionS

+0

ありがとう、まさしく私が思った。私の答えを見てください。 – javanna

答えて

16

スレーブサーバーにあるsolrインスタンスをコピーし、solrconfig.xmlにレプリケーションハンドラを構成する必要があります。 通常、すべてのコアにはそれぞれschema.xmlsolrconfig.xmlがあるため、各コアに異なるinstanceDirディレクトリを持つことをお勧めします。あなたは現在、複数持っている場合

<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.xmldataDirと設定同じinstanceDirが異なるdataDir、を指すようにちょうどあなたのsolr.xmlの設定と同じのconfを使用することができます単一のコアであるが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両方のマシンを含むsolrcore.propertiesファイルを使って動作させています。 – DionS

+0

うれしい私の答えが助けてくれて、歓迎です! – javanna

+0

あなたが与えてくれたことをありがとう、本当に私に役立つ。私はシンボリックリンク複数の同種コアを使用しています(dunはなぜ、私のクライアントからの要求です)。そしてあなたの解決策がキラーパンチであることを見つけてください! – ajreal

1

はい、あなたが複製しているコアの各コピーにあるファイルのまったく同じコピーを持っている必要があります。

さらに多くのsolrインスタンスをアンロードするには、インデックス作成にのみマスタを使用し、ドキュメントのクエリにはmasterからレプリケートされた2つのスレーブを使用することをお勧めします。

+0

複製がまだ十分でない場合は、このオプションも検討します。 – DionS

関連する問題