solr配置主从同步配置及同步机制

solr主从配置:

主从配置是实现主从服务器之间的数据同步,为了实现的是读写分离,为了方便,我在一台服务器上模拟实现的,我用了一个tomcat服务器,tomcat上面部署了两个war包,一个master和一个slave,具体的solr服务搭建我就不写了,单写如何实现主从配置。

       我使用的solr是多核的,我拿一个作为例子啊(用户),主从配置过程中,主服务的索引中配置文件是不需要做任何变化的,但是为了与从的比较,我也贴下配置,主配置文件solrConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<config>
  <luceneMatchVersion>LUCENE_36</luceneMatchVersion>
  <requestDispatcher handleSelect="true" >
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
  </requestDispatcher>
  
  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
  <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
  
  
  <requestHandler name="/replication" class="solr.ReplicationHandler" >  
    <lst name="master">  
     <str name="replicateAfter">startup</str>  
     <str name="replicateAfter">commit</str>    
     <str name="confFiles">schema.xml</str>
    </lst>  
  </requestHandler>
  
  <requestHandler name="/analysis/field" class="solr.FieldAnalysisRequestHandler" />   
  <admin>
    <defaultQuery>solr</defaultQuery>
  </admin>

</config>

 
 从配置文件的solrConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>

<config>
  <luceneMatchVersion>LUCENE_36</luceneMatchVersion>
  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
  <updateHandler class="solr.DirectUpdateHandler2" />
  <requestDispatcher handleSelect="true" >
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
  </requestDispatcher>
  
  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
  <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
  <requestHandler name="/replication" class="solr.ReplicationHandler">    
     <lst name="slave">  
       <str name="masterUrl">http://127.0.0.1:8983/master/user</str>  
       <str name="pollInterval">00:00:20</str>  
       <str name="compression">internal|external</str>  
       <str name="httpConnTimeout">50000</str>     
       <str name="httpReadTimeout">500000</str>       
     </lst>  
  </requestHandler> 
  
  <requestHandler name="/analysis/field" class="solr.FieldAnalysisRequestHandler" />   
   
  <!-- config for the admin interface --> 
  <admin>
    <defaultQuery>solr</defaultQuery>
  </admin>

</config>

 以上配置表示,当主索引进行提交,更新和启动服务的时候,服务进行主从同步,从主索引http://127.0.0.1:8983/master/user上读取索引文件

配置好配置文件后,启动服务器,在solr管理界面可以验证同步情况,输入

http://127.0.0.1:8983/master/#/user/replication

如果配置成功的话会出现如下界面:

 
solr配置主从同步配置及同步机制
 

该时间为动态的,每20s会执行同步索引一次,也可以点击replicate now立即执行同步

另外,主从同步的机制如下:

1、主服务索引文件进行压缩

2、在从服务上面新建一个目录,将主索引压缩后的数据复制到新的目录上

3、同步结束后,删除老的目录(老的索引)

注意:在同步过程中访问的是老的索引

我在测试环境上面做了测试,1700多万的数据(2.79G)

其中优化索引时间比同步时间长

优化索引大约使用了10分钟

但是同步索引只用了3分钟左右

相关推荐