索引复制这种分布式方式,是由一个主索引和多个从索引构成,从索引从主索引复制索引。主索引负责更新索引,从索引复制同步索引和查询。一个主索引可以复制索引到多个多个从索引库
在主服务中配置索引复制请求处理类
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
<!--在 'optimize(合并索引)'后进行同步,其他可选的值还有'commit', 'startup',该值可以填多个-->
<str name="replicateAfter">optimize</str>
<!--在 'optimize(合并索引)'后备份索引,其他可选的值还有'commit', 'startup',该值可以填多个-->
<!-- <str name="backupAfter">optimize</str> -->
<!--指定备份多少份文件,默认值为 MAX_VALUE-->
<!-- <int name="numberToKeep">2</int> -->
<!--指定需要同步的配置文件,多份文件以逗号分隔 -->
<str name="confFiles">schema.xml,stopwords.txt,elevate.xml</str>
<!--The default value of reservation is 10 secs. Normally , you should not need to specify this -->
<str name="commitReserveDuration">00:00:10</str>
</lst>
</requestHandler>
在从服务器中配置索引复制请求处理
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="slave">
<!--主索引的url,该从索引将从这个主索引地址同步索引-->
<str name="masterUrl">http://remote_host:port/solr/corename/replication</str>;
<!--拉取间隔,达到这个时间,从索引将从主索引同步索引.格式为 is HH:mm:ss .
如果该设置为空从索引将不会主动从主索引同步索引.
另外拉取索引的请求也可以通过 admin 页面或者 http api 来触发 -->
<str name="pollInterval">00:00:20</str>
<!-- 以下参数不常用,非必填参数-->
<!--在索引传输过程中使用压缩,可选的值有两个 internal 和 external
如果值是 'external' 请确保主索引的solr已经设置了accept-encoding header。
如果值是 'internal' 索引数据将被自动压缩?,这个主要在低带宽情况下使用,
局域网中请不要使用,局域网中使用会降低复制效率-->
<str name="compression">internal</str>
<!-以下是配置连接和读取超时时间,这个跟 http 中的概念一样,单位为毫秒-->
<str name="httpConnTimeout">5000</str>
<str name="httpReadTimeout">10000</str>
<!-- 如果主服务中的 http base 的鉴权可用的话,从服务就需要配置这个用户名和密码 -->
<str name="httpBasicAuthUser">username</str>
<str name="httpBasicAuthPassword">password</str>
</lst>
</requestHandler>
利用Replication Handler 备份索引
http://localhost:81/apache-solr-3.5.0/replication?command=backup
该请求成功的话,会得到:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">42</int>
</lst>
<str name="status">OK</str>
</response>
此时在 solr/home 的 data 目录下,会发现类似