Solr4:索引的复制

1. 需求

用一台创建索引的主服务器,不停的查询数据,解析数据,然后提交索引;这样导致主服务器的CPU、内存、硬盘IO占用都很高,如果再用它去做查询的话,用户多时肯定影响效率。

所以用到了Solr的索引复制功能。就是利用复制的索引去满足查询需求。如果查询用户非常多,那么建立更多的复制即可以满足需求。

同时顺便把用户自定义词典也复制过去,这样只需要在主服务器维护词典,它会自动同步到各从服务器,从而保持创建索引与查询时中文分词的一致性。

2. 环境

硬件:linux服务器两台,IP分别为:192.168.2.91/192.168.2.92

软件:Solr 4.1,Tomcat 7

模块:两种中文分词器,自己的web查询项目,一个创建索引的后台程序。

3. 实现

假设已经构建好两台服务器,配置好Tomcat与Solr及中文分词。具体参考前面的文章。

我这里的Solr用到多核(Multi Core),配置了两个core,一个是news用于处理新闻信息;一个是wb,用于处理微博信息。它们的数据结构是不一样的。这两个core都配置了复制,这样索引的提交接口应该是:http://192.168.2.91/solr/newshttp://192.168.2.91/solr/wb;而索引的查询接口则是:http://192.168.2.92/solr/newshttp://192.168.2.92/solr/wb

1). 创建索引的后台程序运行于主服务器192.168.2.91,向索引的提交接口提交数据。

2). 自己的web查询项目布署于192.168.2.92(当然192.168.2.91你也可以布署一下),向索引的查询接口查询数据。

Solr主服务器192.168.2.91,$SOLR_HOME/news/conf/solrconfig.xml中相关配置如下: 

  <requestHandler name="/replication" class="solr.ReplicationHandler" >
    <!--
       To enable simple master/slave replication, uncomment one of the 
       sections below, depending on wether this solr instance should be 
       the "master" or a "slave".  If this instance is a "slave" you will 
       also need to fill in the masterUrl to point to a real machine.
    -->
    <lst name="master">
      <!--何时合并,分别有:optimize(合并索引),commit(提交), startup(启动),可以填多个-->
      <str name="replicateAfter">startup</str>
      <str name="replicateAfter">commit</str>
      <str name="replicateAfter">optimize</str>
      <!--同时需要同步的配置文件,如词典等 -->
      <str name="confFiles">schema.xml,negative.dic,words-my.dic</str>
    </lst>
  </requestHandler>

 Solr从服务器192.168.2.92,$SOLR_HOME/news/conf/solrconfig.xml中相关配置如下:

  <requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="slave">
        <!--主索引的url,该从索引将从这个主索引地址同步索引-->
        <str name="masterUrl">http://192.168.2.92/solr/news/replication</str>;
        <!--间隔时间;如果此值为空从索引将不会主动从主索引同步索引;也可以通过solr的管理控制台来触发;-->
        <str name="pollInterval">00:00:30</str>
    </lst>
  </requestHandler>

上面是Solr的一个core(news)的配置,另外一个core(wb)也做同样的配置即可。

4. 结果

经过上述配置后,重新启动各Tomcat,然后在主服务器运行创建索引的线程时,从服务器会自动更新:可以在Tomcat后台查看到自动同步的信息,也可以在从服务器的Solr管理控制台的复制模块中看到当前的状态。  

原文地址:https://www.cnblogs.com/nayitian/p/2938085.html