rails sunspot solr如何使用主从模式Master/Slave

Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎.
随着solr索引数量量的增大,更新时间以及索引时间,都会增加。
关于solr的集群主要分为主从和SolrCloud两种。这里主要介绍一下主从的配置。它主要实现:在master节点进行数据写操作,在slave节点进行读操作。当并发量大些,可以通过扩展slave节点数来应对,多个slave做一个反向代理和负载均衡。
主节点配置:solr/conf/solrconfig.xml

1
2
3
4
5
6
7
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
<str name="replicateAfter">commit</str>
<str name="replicateAfter">startup</str>
<str name="confFiles">schema.xml,stopwords.txt,spellings.txt,synonyms.txt</str>
</lst>
</requestHandler>

master 标志该core 为主节点。复制的行为发生在commit、startup之后。cofFiles表示,向从节点复制的配置文件(记住,主从的solrconfig.xml配置不一样,不要把solrconfig.xml也复制到从节点了)。  
再看下slave从节点的配置:solr/conf/solrconfig.xml

1
2
3
4
5
6
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="slave">
<str name="masterUrl">http://192.168.1.100:8983/solr/default</str>
<str name="pollInterval">00:00:20</str>
</lst>
</requestHandler>

pollInterval 表示多久向master同步一次数据,数据格式{时}:{分}:{秒}。这个要根据你的业务场景。如果更新比较频繁,就把这个值调小点,反之,就调大些。在同步数据时,根据网络和机器配置等不同,slave之间的数据会存在不同步的情况。如果,你对此有要求,需要注意了。总之,任何一种集群方案都不是万能的。

在rails里,sunspot.yml配置如下:

1
2
3
4
5
6
7
8
9
10
11
production:
solr:
hostname: slave-solr-server
port: 8983
master_hostname: master-solr-server
master_port: 8983
log_level: WARNING
master_solr:
hostname: master-solr-server
port: 8983
log_level: WARNING