读书人

Solr学习札记(四)Solr索引复制-示例

发布时间: 2012-10-19 16:53:37 作者: rapoo

Solr学习笔记(四)Solr索引复制-示例说明

?准备:

为什么要进行索引复制呢?当有很多个客户并发访问某Solr服务器,这可能会导致Solr服务器崩溃(Solr服务器性能达不到这些客户并发访问的需求),这时就可以考虑通过索引复制,将索引复制到多个服务器上,这就是Solr的索引复制,如下图所示:

Solr学习札记(四)Solr索引复制-示例说明如图:Master Solr 为性能达不到很多客户并发访问的服务器,是需要被索引复制的服务器,Slave instances 为复制了Master Solr上索引的服务器,这样客户端可以访问Master Solr 和 Slave instances中的任意一个,以便降低了服务器性能的要求;

?

开始:

同时开启三台Tomcat服务器,端口号分别为:8080,8888,8983,8080代表Master Solr,8888和8983代表Slave instances ;

用前面学习笔记(三)中SolrjClient提供的借口向Master Solr(8080)添加数据,然后在Slave instances上测试;

说明:

要进行索引复制测试需要做一下配置:

Master Solr(8080),在solrconfig.xml中添加如下配置:

<requestHandler name="/replication" >    <lst name="master">      <str name="replicateAfter">commit</str>      <str name="replicateAfter">optimize</str>      <str name="replicateAfter">startup</str>      <str name="confFiles">schema.xml,stopwords.txt</str>    </lst></requestHandler>

?

?

Slave instances(8888,8983)solrconfig.xml中添加如下配置:

?

<requestHandler name="/replication" >   <lst name="slave">      <str name="masterUrl">http://localhost:8080/solr/replication</str>      <str name="pollInterval">00:00:60</str>    </lst></requestHandler>

?

配置完后启动三台服务器;

可在控制台点击Replication查看复制页面后台控制页面,如下截图:

Master Solr(8080):Solr学习札记(四)Solr索引复制-示例说明

Slave instances(8888,8983):

Solr学习札记(四)Solr索引复制-示例说明

?

如上图,可以通过上面所示Button控制索引的复制,如点击Replicate Now马上开始把Master上的索引复制到自己上,如果Disable Poll 值为disable时开启了自动复制功能,即当你Master上添加索引后马上复制到Slave上,可以单击该Button设他的值为enable;

向Master Solr(8080)上添加数据(SolrJClient):代码如下

List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();for (int i = 0; i < 10; i++) {SolrInputDocument doc = new SolrInputDocument();doc.addField("id", i);doc.addField("severity",i);doc.addField("sLocation","Beijing_" + i);doc.addField("msg", "kobe bryant" + i);doc.addField("name", "kylin soong" + i);docs.add(doc);}client.addDocs(docs);

?

然后在他的Slave instances(8888,8983)任意一个上查询,你都会查询到上面添加到Master Solr上的数据,以8888为例,查询代码如下:

String url = "http://localhost:8888/solr";SolrjClient client = new SolrjClient();client.startSolrServer(url);List<SolrDocument> lists = client.query("kobe");System.out.println(lists.size());for(SolrDocument doc : lists) {for(Iterator iterator = doc.iterator();iterator.hasNext();) {Map.Entry<String, Object> entry = (Entry<String, Object>) iterator.next();System.out.print(entry.getKey() + "=" + entry.getValue() + " ");//System.out.print(iterator.next() + "   ");}System.out.println();}

?

?

结果:

10id=0 severity=0 sLocation=Beijing_0 msg=kobe bryant0 name=kylin soong0 id=1 severity=1 sLocation=Beijing_1 msg=kobe bryant1 name=kylin soong1 id=2 severity=2 sLocation=Beijing_2 msg=kobe bryant2 name=kylin soong2 id=3 severity=3 sLocation=Beijing_3 msg=kobe bryant3 name=kylin soong3 id=4 severity=4 sLocation=Beijing_4 msg=kobe bryant4 name=kylin soong4 id=5 severity=5 sLocation=Beijing_5 msg=kobe bryant5 name=kylin soong5 id=6 severity=6 sLocation=Beijing_6 msg=kobe bryant6 name=kylin soong6 id=7 severity=7 sLocation=Beijing_7 msg=kobe bryant7 name=kylin soong7 id=8 severity=8 sLocation=Beijing_8 msg=kobe bryant8 name=kylin soong8 id=9 severity=9 sLocation=Beijing_9 msg=kobe bryant9 name=kylin soong9 

?

结束!

?

?

读书人网 >软件架构设计

热点推荐