码迷,mamicode.com
首页 > 其他好文 > 详细

Solr In Action 笔记(4) 之 SolrCloud分布式索引基础

时间:2014-11-08 00:47:40      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   使用   sp   

Solr In Action 笔记(4) 之 SolrCloud Index 基础

     SolrCloud Index流程研究了两天,还是没有完全搞懂,先简单记下基础的知识,过几天再写个深入点的。先补充上前文来不及写的内容。

1. Solr.xml的重要配置

     Solr.xml的内容如下:

 1 <solr>
 2   <solrcloud>
 3     <str name="host">${host:}</str>
 4     <int name="hostPort">${jetty.port:8983}</int>
 5     <str name="hostContext">${hostContext:solr}</str>
 6     <int name="zkClientTimeout">${zkClientTimeout:15000}</int>
 7     <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
 8   </solrcloud>
 9   <shardHandlerFactory name="shardHandlerFactory"
10     class="HttpShardHandlerFactory">
11     <int name="socketTimeout">${socketTimeout:0}</int>
12     <int name="connTimeout">${connTimeout:0}</int>
13   </shardHandlerFactory>
14 </solr>
  • host , host 指的是Solr节点的IP地址,当Solr节点上线时候,它会向Zookeeper进行注册,注册信息如IP地址就会存储在/clusterstate.json中。这里不但可以直接使用host IP地址如192.168.1.0,也可以使用机器的hostname比如bigdata01。
  • port , port 指的时Solr用来监听的端口,默认是8983,同样它会存储在/clusterstate.json中。
  • Solr Host Context, 指的是Solr.war部署的环境路径,多数情况下不用修改。
  • zookeeper client timeout,上一节讲到过,zookeeper Znode节点变化最大反应时间。
  • core node name, 该节点控制Solr core的命名策略,如果genericCoreNodeNames为true,那么Solr会给core取普通的名字比如,core_node1 ;如果设为true,则会给core取容易辨别的名字,比如带上host信息,比如10.0.1.7:8983_solr_logmill
  • Leader Vote Wait Period:

     该参数并未直接在solr.xml中列出来,SolrCloud的leader和其他replica下线只剩最后一个replica的时候,这个Replica并不会立马选举leader,他会等待一段时间,查看leader是否上线,如果上线了,那么leader仍然还是leader,replica仍然还是replica,如果在这个时间段外leader没有上线,那么replica就变为leader了。这个时间就是Leader Vote Wait Period,它的存在防止了当leader和其他replica下线时候,具有旧的数据的node选为leader。

     比如以下一个例子,一个shard有两个node,X为leader,Y为replica,如果X在线,Y下线,那么X仍然可以接受update请求,SolrCloud仍然继续正常运行,只不过leader X不需要再把数据分发给Y了,Y上线后X只需要简单将数据同步给Y就行(Peer sync 策略)。如果X下线,Y在线,那么这个时候因为没有leader接受update请求以及没有leader转发数据,Y是不会接收到update请求的,所以这个时候的SolrCloud的所以建立是无法进行的,所以一旦X挂了SolrCloud就会进行leader选举,但是我们不能立马让Y变为leader,因为Y的数据相比较X来说是旧的数据。如果Y选举为Leader了,那么后续的update他就会接受,过段时间X上线了,由于Y已经是leader了所以X只能是replica,数据的流向变成了Y转发到X,这个时候就发现了奇怪的现象就是X中有部分数据新于Y(Y当选为leader前的数据),Y中有部分数据也新于X(Y当选为leader后的数据),这个时候就需要启动Snapshot replication 策略进行数据复原了,比较麻烦。如果设置了leaderVoteWait 那么X下线后,Y会等待leaderVoteWait时间,这个时间内update操作都是失败的,如果在这时间内X上线了,那么X立马恢复leader状态继续工作,否则就会Y就会变成leader。

     要改善这种情况,可以增加shard和replica的数量,较少leader和replica同时挂掉的可能性。

  • zkHost,同样没有出现在上面的solr.xml上,它可以在solr.xml的zkHost配置中设置zookeepr集群信息比如192.168.0.1:2181,192.168.0.2:2181表示两个zookeeper组成一个zookeeper集群。

2. SolrCloud的分布式建索引

2.1 Document的Hash

          建好的SolrCloud集群每一个shard都会有一个Hash区间,当Document进行update的时候,SolrCloud就会计算这个Document的Hash值,然后根据该值和shard的hash区间来判断这个document应该发往哪个shard,所以首先让我们先来学习下SolrCloud的hash算法。

 明天继续,重点介绍下SolrCloud的hash

Solr In Action 笔记(4) 之 SolrCloud分布式索引基础

标签:style   blog   http   io   color   ar   os   使用   sp   

原文地址:http://www.cnblogs.com/rcfeng/p/4082568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!