文档章节

Solr分布式索引SolrCloud原理总结

低调的糊涂虫
 低调的糊涂虫
发布于 2015/12/21 15:38
字数 1034
阅读 257
收藏 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】——SolrCloud集群介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fjj15732621696/article/details/81056015 什么是solrcloud solrcloud(solr云)是solr提供的分布式搜索方案,...

DD_Davina
2018/07/15
0
0
分布式全文检索系统SolrCloud简介

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

张升强
2013/11/12
0
3
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
solr集群solrCloud搭建

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

黄信程
2017/07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的Table API及SQL Programs

序 本文主要研究一下flink的Table API及SQL Programs 实例 // for batch programs use ExecutionEnvironment instead of StreamExecutionEnvironmentStreamExecutionEnvironment env = Stre......

go4it
24分钟前
1
0
mysqldump应用

备份单个库/表数据或库/表结构 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 备份文件名 1、导出数据库为dbname的表结构(其中用戶名為root,密码为dbpasswd,生成的...

阿dai
32分钟前
1
0
shell脚本与Python的交互

1、Python针对shell获取传入,输出参数 传入:"$num" 例如: $0表示文件名,$1表示shell获取的第一个参数 输出:通过打印shell结果的方式,输出参数给Python。 例如: echo "{$iplist}",Python调...

一口今心
35分钟前
1
0
Euler 今日问世!国内首个工业级的图深度学习开源框架,阿里妈妈造

阿里妹导读:千呼万唤始出来!阿里妈妈正式公布重磅开源项目——图深度学习框架Euler。这是国内首个在核心业务大规模应用后开源的图深度学习框架。此次开源,Euler内置了大量的算法供用户直接...

阿里云官方博客
42分钟前
1
0
TiDB 3.0 Beta Release Notes

2019 年 1 月 19 日,TiDB 发布 3.0 Beta 版,对应 master branch 的 TiDB-Ansible。相比 2.1 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。 TiDB 新特性 支持 Vi...

TiDB
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部