2012-10-25 22 views
8

Tôi có Solr đang chạy với nhiều lõi. Do tải nặng, tôi muốn thiết lập một nô lệ chứa các chỉ mục giống hệt nhau.Làm cách nào để định cấu hình sao chép Solr với nhiều lõi

Tài liệu http://wiki.apache.org/solr/SolrReplication nói "Thêm trình xử lý yêu cầu nhân bản vào solrconfig.xml cho mỗi lõi", nhưng tôi chỉ có một tệp solrconfig.xml.

cấu hình của tôi:
Config: file/dữ liệu/Solr/web/Solr/conf/config
dữ liệu:/data/Solr/data/Solr/lõi dữ liệu dirs

Là nó thực sự cần thiết để sao chép solrconfig.xml cho mỗi lõi?
Và tôi nên đặt những tệp solrconfig này ở đâu?

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

Bạn có thể đăng 'solr.xml' nơi bạn định cấu hình lõi của mình không? – javanna

+0

Tôi đã thêm solr.xml – DionS

+0

Cảm ơn, chính xác những gì tôi nghĩ. Hãy xem câu trả lời của tôi. – javanna

Trả lời

16

Những gì bạn cần làm là sao chép trường hợp solr mà bạn có trên máy chủ phụ và cấu hình trình xử lý nhân bản trên solrconfig.xml. Thực tiễn tốt nhất là có một thư mục instanceDir khác nhau cho mỗi lõi vì thường mỗi lõi có schema.xmlsolrconfig.xml riêng. Dù sao bạn có thể sử dụng conf cùng chỉ cấu hình solr.xml của bạn để trỏ đến cùng instanceDir nhưng một khác nhau dataDir, mà bạn cấu hình như dataDir trong solrconfig.xml của bạn cũng như:

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

này nên tình hình của bạn nếu bạn đang có nhiều lõi nhưng một đơn solrconfig.xml.

Phần sao chép solrconfig.xml trên các nô lệ cần chứa url của tên chính, bao gồm tên lõi, tất nhiên là khác nhau cho mỗi lõi. Nhưng bạn có thể sử dụng các placeholder $ {} solr.core.name như thế này:

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

Trong thực tế, một số đặc tính như solr.core.name sẽ được tự động thêm vào core scope và bạn có thể tham khảo chúng trong cấu hình của bạn. Kết quả là, phần nhân rộng có thể giống nhau cho mỗi lõi nếu bạn không có bất kỳ cài đặt cụ thể nào.

Ngoài ra, bạn có thể sử dụng cùng cấu hình cho master and slave với cấu hình sau và chỉ thay đổi giá trị (đúng hoặc sai) mà bạn gán cho biến môi trường enable.masterenable.slave dựa trên những gì bạn muốn làm. Tôi có nghĩa là bạn có thể sử dụng cùng một tập tin, nhưng tất nhiên nó sẽ được trên các máy khác nhau vì nó sẽ không làm cho rất nhiều ý nghĩa để có chủ và nô lệ trên cùng một máy.

<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

Cảm ơn rất nhiều, tôi đã nhận nó làm việc bằng cách sử dụng tập tin solrcore.properties có chứa enable.master và enable.slave cho cả hai máy. – DionS

+0

Rất vui được tôi trả lời, bạn được chào đón! – javanna

+0

Cảm ơn bạn về ví dụ bạn đã đưa ra, thực sự hữu ích đối với tôi. Tôi đã sử dụng liên kết sym nhiều lõi đồng nhất (dun hỏi tại sao, là YÊU CẦU từ khách hàng của tôi). Và tìm ra giải pháp của bạn là cú đấm sát thủ! – ajreal

1

Có, bạn cần phải có bản sao chính xác cùng các tập tin trong mỗi bản sao của lõi bạn đang sao chép.

Để dỡ bỏ nhiều trường hợp solr của bạn hơn, tôi khuyên bạn nên chỉ sử dụng master để lập chỉ mục và 2 nô lệ, được sao chép từ chính, được sử dụng để truy vấn tài liệu của bạn.

+0

Cảm ơn, tôi cũng sẽ xem xét tùy chọn này nếu quá trình sao chép vẫn chưa đủ. – DionS

Các vấn đề liên quan