solr的主从复制实现原理

换公司了,因为历史遗留原因,新公司不用solrcloud,他们使用的是主从复制模式,所以趁没有任务就看了下主从复制的原理,记个笔记。

先说下solrcloud下复制的原理吧,solrcloud中每个doc是要添加到对应的shard中,并且添加的一定是leader,然后由leader写到自己的索引后再转发到其他的replica中,也就是采用的push的方式,并且是每个doc都会进行这样的操作。leader和replica的区别仅仅是doc的来源的区别,leader由solrj添加,而非leader由leader转发。其他的操作,比如commit、softCommit都是独立的,也就是leader和非leader的这些操作没有任何关系。但是在主从模式下,并不是采用的push,而是由slave进行的pull,并且它的实现原理是在leader进行了commit之后,才会被slave pull到本地,slave是把leader的这次commit产生的所有的文件都复制过来,也就是直接复制的索引文件,而不是复制的日志。等slave pull完了之后,然后会自己进行commit。在整个过程中,leader完全不知道slave的存在,而是slave不停的(间隔一定的时间)去访问leader,如果leader有了新的commit,则slave触发一次pull的请求。

 

这种模式下,如果我们控制master的commit的状态(比如我们通过控制内存和doc的数量实现很长时间才进行commit),那么slave在短时间内就不会有任何的改变,那么会提供强大的读的能力,所以主从模式还是有他的用武之地的。

https://wiki.apache.org/solr/SolrReplication 这个是solr的主从的文档,方便以后查看。

猜你喜欢

转载自suichangkele.iteye.com/blog/2407263