文档章节

Solr分布式索引SolrCloud原理总结

低调的糊涂虫
 低调的糊涂虫
发布于 2015/12/21 15:38
字数 1034
阅读 235
收藏 0

[原]Solr分布式索引SolrCloud原理总结


概要

Solr从4.0开始支持solrcloud模式,主要特性有:

  • 配置文件集中式存储,集群中的配置文件存储在zookeeper中,仅保存一份,而过去是每个core一份配置文件,非常容易导致不一致

  • 负载均衡和故障恢复,自动将流量分配到各台机器上,不再需要nginx或haproxy的支持,自动剔除故障机器

在solr4-10.2源码和官方wiki中多次出现collection、shard、replica,collection指一个完整的索 引,当索引数据量太大时,需要拆分成多个shard,shard代表子索引,为了增加并发请求能力和保证数据完整性,一个shard可以存在多份完全一致 的副本,这些副本便是replica。


在solrcloud的众多solr服务中,solr分两种角 色,leader和非leader,当solr实例数量发生变化时会重新进行选举leader。在使用solrcloud时,其中的shard和 replica对于我们是透明的,且任何一台机器都可以接受查询、修改、删除请求,创建collection、shard、replica,更新索引等数 据修改操作只能由leader进行,避免产生并发修改问题,当非leader节点收到修改操作请求时,要将请求信息存储在zookeeper中相应节点 上,leader节点对该zookeeper信息进行监听,近实时进行处理。


创建索引

  1. 任意节点(leader节点或者非leader节点)接收创建索引请求后,将请求参数转化成json格式存储至zookeeper的/overseer/collection-queue-work的children节点上

  2. leader 节点的OverseerCollectionProcessor线程一直在监控/overseer/collection-queue-work节点,检 测到变化后,根据请求参数计算出需要创建的shard, replica,将创建具体replica的请求转向各对应节点。

  3. 各节点创建完具体的replica后,将该节点的状态(创建成功与否等)更新到/overseer/queue的children节点上。

  4. leader节点的ClusterStateUpdater线程监控/overseer/queue节点,将overseer/queue的children节点的状态更新至/clusterstate.json。

  5. 各节点同步/clusterstate.json,整个集群状态得到更新,新索引创建成功。


更新索引数据

  1. solr根据add doc数据创建出AddUpdateCommand,由DistrubutedUpdateProcessor.processAdd处理。

  2. 根据router规则计算出该doc所属shard并找出该shard对应的leader replica。

  3. 如果当前replica(接收add doc命令的replica)不是(所属shard且leader replica),将请求转出至对应leader replica。

  4. 如果当前replica是对应shard且是leader,首先更新本地索引,再将add doc转向该shard的其余replica。

  5. 所有replica得到更新。


检索流程

  1. 搜索流程中,solr实例不区分是否为leader状态。任意replica接收搜索请求时,从zookeeper中获取改replica对应的collection及所有的shard和replica。

  2. 将请求同时发送向该collection的所有shard上,对同一shard下的多replica进行负载均衡,在LBHttpSolrServer 中实现。

增加、减少solr实例


在创建索引时,会指定索引分成几个shard,每个shard生成多少replica,且每个solr实例上最多允许创建的replica数目。只有在所有solr实例允许创建的replica总数大于需要的replica数时才会创建成功。


当索引创建成功后,停掉某台solr,若该solr含有所创建的 索引的replica,则某个shard的replica会减少,更新集群状态/clusterstate.json。此时增加一台新solr实例并连接 上相同的zookeeper,会自动在该solr上创建失去的replica并从leader处复制来完整的数据。




主要类介绍

  • CollectionsHandler 操作collection、replica、alias、shard创建、删除的入口

  • OverseerCollectionProcessor 仅在Leader节点上起作用,负责监控zookeeper,处理和collection相关的任务

  • ClusterStateUpdater 仅在leader节点上起作用,负责监控/overseer/queue和/overseer/queue-work

  • LBHttpSolrServer solr实现的负载均衡类,在某shard存在多个replica时使用


参考


本文转载自:http://m.blog.csdn.net/blog/threeidiots/41317743

共有 人打赏支持
低调的糊涂虫
粉丝 1
博文 44
码字总数 9521
作品 0
程序员
Spring Boot 中使用 SolrCloud

Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库; Solr是以Lucene为基础实现的文本检索应用服务。Solr部署方式有单机方式、多机Master-Slaver方式、Cloud方式。 SolrCloud是基于...

PengLei
2017/10/19
0
0
SolrCloud Wiki翻译(3)Shards & Indexing Data

When your data is too large for one node, you can break it up and store it in sections by creating one or more shards. Each is a portion of the logical index, or core, and it's ......

曾杰
2014/02/12
0
1
分布式全文检索系统SolrCloud简介

前言 本文简单描述SolrCloud的特性,基本结构和入门,基于Solr4.5版本。 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库。Solr是以Lucene为基础实现的文本检索应用服务。 SolrCl...

张升强
2013/11/12
0
3
solr cloud的sql引擎--solr-sql

solr-sql是针对solrcloud封装的sql编程接口,主要支持SELECT...FROM...WHERE查询语句。 SolrCloud是基于ZooKeeper和Solr的分布式解决方案,为Solr添加分布式功能,用于建立高可用,高伸缩,自...

白乔
2016/09/27
595
2
solr集群solrCloud搭建

SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。 当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜...

黄信程
2017/07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部