8

I have Solr running with multiple cores. Because of the heavy load, I want to set up a slave containing the exact same indexes.

The documentation http://wiki.apache.org/solr/SolrReplication states "Add the replication request handler to solrconfig.xml for each core", but I only have one solrconfig.xml.

My configuration:
Config: /data/solr/web/solr/conf/config files
Data: /data/solr/data/solr/core data dirs

Is it really necessary to copy the solrconfig.xml for each core?
And where should I put these multiple solrconfig files?

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>
4

2 に答える 2

16

必要なことは、スレーブ サーバーにある solr インスタンスをコピーし、solrconfig.xml. 通常、すべてのコアinstanceDirには独自のschema.xmlsolrconfig.xml. とにかく、同じ conf を使用して、同じであるが異なるsolr.xmlを指すように構成するだけで、同じように構成できます。instanceDirdataDirdataDirsolrconfig.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レプリケーション セクションには、コア名を含むマスターの 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に自動的に追加され、構成で参照できます。その結果、コア固有の設定がない場合、複製セクションはすべてのコアで同じになる可能性があります。

さらに、次の構成でマスターとスレーブに同じ構成を使用し、環境変数に割り当てる値 (true または false) を、目的に基づいて変更するenable.masterだけ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>
于 2012-10-25T09:48:41.597 に答える
1

はい、複製するコアの各コピーに、まったく同じファイルのコピーが必要です。

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

于 2012-10-25T09:37:46.920 に答える