2012-10-25 23 views
8

Birden çok çekirdekle çalışan Solr'ım var. Ağır yük nedeniyle, aynı indeksleri içeren bir slave kurmak istiyorum.Birden çok çekirdekle Solr çoğaltmayı nasıl yapılandırabilirim

http://wiki.apache.org/solr/SolrReplication numaralı belgede "Çoğaltma isteği işleyicisini her çekirdek için solrconfig.xml dosyasına ekleyin" ifadeleri belirtilmiştir, ancak yalnızca bir tane solrconfig.xml var.

Benim yapılandırma:
Yapılandırma:/veri/Solr/web/Solr/conf/config dosyaları
veri: gerçekten kopyalamak için gerekli/veri/Solr/veri/Solr/çekirdek veri dirs

mi her çekirdek için solrconfig.xml?
Ve bu çoklu solrconfig dosyalarını nereye yerleştirmeliyim?

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

Çekirdeklerinizi yapılandırdığınız yerde 'solr.xml' yükleyebilir misiniz? – javanna

+0

Solr.xml'i ekledim – DionS

+0

Teşekkürler, tam olarak düşündüğüm şey. Cevabıma bir bak. – javanna

cevap

16

Yapmanız gereken, bağımlı sunucuda bulunan solr örneğini kopyalamak ve çoğaltma işleyicisini solrconfig.xml üzerinde yapılandırmaktır. Her çekirdeğin kendi schema.xml ve solrconfig.xml olduğu için her çekirdek için farklı bir instanceDir dizinine sahip olmak en iyi uygulamadır. Şu anda birden fazla varsa

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

Bu durum olmalıdır: Yine de siz de solrconfig.xml içinde dataDir olarak yapılandırmak aynı instanceDir ancak farklı dataDir, işaret etmek sadece solr.xml yapılandırılması aynı conf kullanabilirsiniz çekirdekler, ancak tek bir solrconfig.xml. Köleler üzerindekikopyalama bölümlerinin, her bir çekirdek için elbette farklı olan çekirdek adı da dahil olmak üzere, ana ünitenin url'sini içermesi gerekir.. Ama böyle tutucu $ {solr.core.name} kullanabilirsiniz:

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

Aslında solr.core.name gibi bazı özellikler otomatik core scope eklenir ve size yapılandırmada onlara başvurabilir. Sonuç olarak, çekirdek özel ayarlarınız yoksa çoğaltma bölümü her çekirdek için aynı olabilir.

Ayrıca, aşağıdaki yapılandırma ile master and slave için aynı yapılandırma kullanabilir ve sadece size ne yapmak istediğinize bağlı olarak ortam değişkenleri enable.master ve enable.slave atamak (doğru veya yanlış) değerini değiştirin. Yani aynı dosyayı kullanabilirsin, ama elbette farklı makinelerde olacak, çünkü aynı makinede usta ve köle sahibi olmak çok mantıklı olmayacaktı.

<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

Çok teşekkürler, her iki makinede enable.master ve enable.slave içeren solrcore.properties dosyasını kullanarak çalıştım. – DionS

+0

Cevabım yardım etti, rica ederim! – javanna

+0

Verdiğiniz örnek için teşekkür ederim, bana gerçekten yardımcı oluyor. Sym link çoklu homojen çekirdekli kullanıyorum (dun nedenini sor, müvekkilimin TALEPİ). Ve çözümünüzü bulucu yumruk! – ajreal

1

Evet, size canlandırıyorduk çekirdeğin her kopyasında dosyaların aynı kopyası olması gerekir.

Solr örneklerinizi daha da boşaltmak için, yalnızca mastering için kullanılan bir master'a ve belgelerinizi sorgulamak için kullanılan master'dan çoğaltılan 2 slave sahip olmanızı öneririm.

+0

Teşekkürler, çoğaltma hala yeterli değilse de bu seçeneği dikkate alacağım. – DionS

İlgili konular