Solr索引数据同步

solr查询量增加后,单服务器承受不了搜索压力是,需要多服务来支撑,Solr1.4后自己提供了复制机制ReplicationHandler。

ReplicationHandler是个RequestHandler,在solrconfig.xml配置ReplicationHandler即可使用。

Master配置

Xml代码 复制代码 收藏代码
  1. <requestHandlername="/replication"class="solr.ReplicationHandler">
  2. <lstname="master">
  3. <!--什么时候出发同步,参数名replicateAfter,取值可以是startup commit optimize -->
  4. <strname="replicateAfter">startup</str>
  5. <strname="replicateAfter">commit</str>
  6. <!--数据备份 参数名backupAfter 同样可以似乎startup commit optimize -->
  7. <!-- <str name="backupAfter">optimize</str> -->
  8. <!--配置要同步的配置文件 -->
  9. <strname="confFiles">schema.xml,stopwords.txt,elevate.xml</str>
  10. <!--提交同步时间间隔,默认是10秒,一般不用改动 -->
  11. <strname="commitReserveDuration">00:00:10</str>
  12. </lst>
  13. </requestHandler>
<requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="master">
        <!--什么时候出发同步,参数名replicateAfter,取值可以是startup commit optimize  -->
        <str name="replicateAfter">startup</str>
        <str name="replicateAfter">commit</str>
 
        <!--数据备份 参数名backupAfter 同样可以似乎startup commit optimize -->
        <!-- <str name="backupAfter">optimize</str> -->
 
        <!--配置要同步的配置文件 -->
        <str name="confFiles">schema.xml,stopwords.txt,elevate.xml</str>
        <!--提交同步时间间隔,默认是10秒,一般不用改动 -->
        <str name="commitReserveDuration">00:00:10</str>
    </lst>
</requestHandler>

Slave配置

Xml代码 复制代码 收藏代码
  1. <requestHandlername="/replication"class="solr.ReplicationHandler">
  2. <lstname="slave">
  3. <!--主服务的同步地址-->
  4. <strname="masterUrl">http://master_host:port/corename/replication</str>
  5. <!--同步轮询的时间间隔,是应用还击而定 -->
  6. <strname="pollInterval">00:00:20</str>
  7. <strname="compression">internal</str>
  8. <!--Http相关参数设置-->
  9. <strname="httpConnTimeout">5000</str>
  10. <strname="httpReadTimeout">10000</str>
  11. <!-- 如果主服务设置认证,在此设置登录用户名密码 -->
  12. <strname="httpBasicAuthUser">username</str>
  13. <strname="httpBasicAuthPassword">password</str>
  14. </lst>
  15. </requestHandler>
<requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="slave">
 
        <!--主服务的同步地址-->
        <str name="masterUrl">http://master_host:port/corename/replication</str>  
 
        <!--同步轮询的时间间隔,是应用还击而定 -->
        <str name="pollInterval">00:00:20</str>  
        <str name="compression">internal</str>
        <!--Http相关参数设置-->
        <str name="httpConnTimeout">5000</str>
        <str name="httpReadTimeout">10000</str>
 
        <!-- 如果主服务设置认证,在此设置登录用户名密码 -->
        <str name="httpBasicAuthUser">username</str>
        <str name="httpBasicAuthPassword">password</str>
     </lst>
</requestHandler>
Solr同步是通过 Slave周期性轮询来检查Ma ster的版本,如果Ma ster有新版本,那么就开始同步复制。

1. Slave发出一个filelist命令来收集文件列表。这个命令将返回一系列元数据(size,lastmodified,alias等等)

2. Slave查看它本地是否有这些文件,然后它会开始下载缺失的文件(使用命令filecontent)。如果连接失败,则下载终止。它将重试5次,如果仍然失败则放弃。

3. 文件被下载到了一个临时目录。因此,下载中途出错不会影响到slave。

4. 一个commit命令被ReplicationHandler执行,然后新的索引被加载进来

solr同步复制就那么简单。

猜你喜欢

转载自wanxiaotao12-126-com.iteye.com/blog/1937850