04、solr学习-solr主从配置索引的主从复制

主题:Solr中索引的主从复制,采用Master/Slave结构

solr的主从复制可以实现像Mysql复制那样,一个服务器负责写服务,其余多个服务器负责读服务,这样可以避免索引并发读写对索引性能的影响,再一个可以构建大规模的搜索系统,用多个服器来分担系统的读服务。Slave的复制是通过http协议访问Master完成的,就像用浏览器访问一个web页面一样。

要实现复制功能,需要一个写索引的服务器和读索引的服务器,分别为Write_A,Read_B
第一步:测试环境

服务器1(Master)
操作系统: Linux5.2
IP:192.168.204.135:9081
JDK: Sun JDK 1.6
Web服务器: Apache Tomcat6
Solr版本: Solr3.6.2

服务器2(Slave)
操作系统: Linux5.2
IP:192.168.204.135:9080
JDK: Sun JDK 1.6
Web服务器: Apache Tomcat6
Solr版本: Solr4.4.0,这里建议使用和Master相同的版本,否则会出现莫名的错误。

第二步: 准备工作
在2台服务器上建立如下目录

/home/admin/solr/solr4server  
/home/admin/solr/solr4home

/home/admin/solr/solr3server  
/home/admin/solr/solr3home

/home/admin/solr/solr3server\_slave  
/home/admin/solr/solr3home\_slave

第三步:配置solr (windows) 并配中文分词 IKAnalyzer

1、 修改主(采用solr3.6.2版本):

solrconfig.xml文件(目前设置的同步周期为一分钟,具体可视生产环境的具体环境而定);
在Master的配置文件中添加一个RequestHandler,RequestHandler是复制在Master端的主要手段,Slave会定期向这个RequestHandler发送请求,并完成索引文件的同步;
Master负责写数据(Write_A)到从服务器中;
replicateAfter说明什么时候进行复制,取值可以是startup, commit, optimize分别是创建索引、提交索引、优化索引之后。每当这些动作执行结束后,Slave就可以从Master上进行复制了;

Write_A 作为Master,solrconfig.xml 找到<requestHandler name="/replication" ,配置如下


<requestHandler name="/replication" class="solr.ReplicationHandler" >  
<lst name="master">
<!-- 当有新的索引被提交,标记新的索引和保存新索引的文件名 -->  
<str name="replicateAfter">commit</str>
<!-- 当系统启动时,标记新的索引和保存新索引的文件名 -->  
<str name="replicateAfter">startup</str>
<!-- 当索引优化时,标记新的索引和保存新索引的文件名,因为 commit,optimize 基本上是同时存在的,所以一般不用设置 optimize-->  
<!-- <str name="replicateAfter">optimize</str>-->  
<!-- 索引优化后创建一份备份索引,这个在复制过程中不需要设置 -->  
<!--<str name="backupAfter">optimize</str>-->  
<!-- 索引复制时,也同步从服务器的配置文件 solrconfig\_slave.xml:solrconfig.xml 表示复制时,在slave端以solrconfig.xml进行保存,这样slave才能认识这个文件-->  
<str name="confFiles">solrconfig\_slave.xml:solrconfig.xml,schema.xml,stopwords.txt,elevate.xml</str>
<!-- 设置验证信息 -->  
<str name="httpBasicAuthUser">admin</str>  
<str name="httpBasicAuthPassword">123456</str>  
</lst>  
</requestHandler>

2、 从solr文件(采用solr4.4.0版本);

Slave负责读数据(Read_B)到从服务器内容。
属性值是一个url,指向了Master服务器上的提供复制功能的requestHandler,
master_host:master服务器的IP或主机名
port:master服务器上部署solr应用的tomcat端口
solr:solr的web应用名称
corename: solr中的core,关于core的概念请参考相关文档。由于本案例中不涉及多个core,所以此处的url中可以去掉这项,也不对core进行过多的说明。
replaction: Master上提供复制的requestHandler名称,也就是requestHandler的name属性的取值。

00:00:20是Slave定期检测Master的时间,格式是HH:mm:ss。这里配置的时间是20秒,因此Slave每个20秒会主动请求一次Master服务器,获得Master服务器上索引文件的状态,比如最后修改时间,文件尺寸等,如果与本机的索引文件不同就进行复制,实现同步。

Read\_B 作为Slave,solrconfig.xml 找到