• 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管理控制台的复制模块中看到当前的状态。  

  • 相关阅读:
    C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法
    C# LINQ查询表达式用法对应Lambda表达式
    C# WPF 通过委托实现多窗口间的传值
    C# WPF 父控件通过使用可视化树找到子控件
    OpenCV打开摄像头闪退问题
    C#调用pyd
    微信支付(JSAPI、小程序)开发流程记录
    在安装pymysql遇到的问题
    个人理解的python的面向对象
    关于python3.4 MD5
  • 原文地址:https://www.cnblogs.com/nayitian/p/2938085.html
Copyright © 2020-2023  润新知