您的位置:首页 > 其它

solr学习第四课------solr主从配置索引的主从复制

2013-11-19 12:20 471 查看
主题: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属性的取值。

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

Read_B 作为Slave,solrconfig.xml 找到<requestHandler name="/replication" ,配置如下:

<requestHandler name="/replication" class="solr.ReplicationHandler" >

<lst name="slave">

<!-- 主服务器的URL,core_1是配置了多核,如果不是多核,连接应该是 http://www.abc.com/solr/replication -->

<!-- <str name="masterUrl">http://www.abc.com/solr/core_1/replication</str> -->

<str name="masterUrl">http://192.168.204.135:9081/solr/replication</str>

<!-- 1分钟同步一次 -->

<str name="pollInterval">00:00:60</str>

<!-- 压缩机制,来传输索引,可选 internal|external,internal表示内网,external表示外网 -->

<str name="compression">internal</str>

<!-- 设置超时时间 -->

<str name="httpConnTimeout">5000</str>

<str name="httpReadTimeout">10000</str>

<!-- 设置验证信息,要和master 服务器配置一样 -->

<str name="httpBasicAuthUser">admin</str>

<str name="httpBasicAuthPassword">123456</str>

</lst>

</requestHandler>

3.复制的简单原理

master 有新索引时会保存索引文件名列表并已时间排序和标记上次复制时文件的位置,那么再次复制时就从这个位置之后进行复制。(不是太明白,想当然这么理解,如有谁比较熟悉,请留言,不胜感激)

4. 参考URL http://wiki.apache.org/solr/SolrReplication http://qnalist.com/questions/562975/replication-problem-from-solr-3-6-to-solr-4-0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: