文档章节

SolrCloud5.0路由 Collection建与数据迁移

zcl111
 zcl111
发布于 2016/07/14 15:38
字数 1042
阅读 15
收藏 0

SolrCloud的设计是为了提供高可用、容错,在分布式环境中进行内容索引和查询请求。

SolrCloud 5.0,对自带的SolrCloud的启动脚本进行了改进,启动SolrCloud变的异常简单,执行

view source print ? 1. $ bin/solr –e cloud 根据提示输入一些参数,即可启动完成SolrCloud,部署启动完成,如下图

SolrCloud相关概念

SolrCloud中有四个关键名词:core、collection、shard、node。

core:在Solr单机环境中,core本质上就是单个index。若需有多个index,那必须创建多个core。在SolrCloud环境中,单个index可以横跨多个Solr实例,这意味着单个index是由不同机器上的多个cores组成。

collection:由core组成的逻辑index叫做collection,一个collection是跨越多个cores的index,这使index可扩展并冗余备份。

shard:在SolrCloud中可以有多个collections。Collections可被分片,每个分片可有多个副本(Replica),同一副本下的相同分片称为shards。每个shards下的有一个分片为leader,该leader通过选举策略产生。

node:SolrCloud中,node是运行Solr的Java虚拟机实例,也就是Server(例如Tomcat、Jetty)。 理解core和collection的区别非常重要。在传统的单node solr中,core和collection的概念等同,都代表一个逻辑index。在SolrCloud中,多个nodes下的cores形成一个collection。 SolrCloud路由

SolrCloud中,提供了两种路由算法: compositeIdimplicit 在创建Collection时,需要通过router.name指定路由策略,默认为compositeId路由。

compositeId

该路由为一致性哈希路由,shards的哈希范围从80000000~7fffffff。初始创建collection是必须指定numShards,compositeId路由算法根据numShards的个数,计算出每个shard的哈希范围,因此路由策略不可以扩展shard。 implicit

该路由方式指定索引具体落在路由到哪个Shard,这与compositeId路由方式索引可均匀分布在每个shard上不同。同时只有在implicit路由策略下才可创建shard。

利用solrJ新建索引时,需要在代码中指定索引具体落在哪个shard上,添加代码:

view source print ? 1. doc.addField("route", "shard_X"); 同时在schema.xml添加字段

view source print ? 1. <field name="_route_" type="string"/> 利用URL创建implicit路由方式collection:

http://10.21.17.200:9580/solr-5.0.0-web/admin/collections?action=CREATE&name=testimplicit&router.name=implicit&shards=shard1,shard2,shard3 SolrRouter源码

在Solr源码中,可以看到,Solr路由的基类为DocRouter抽象类,HashBasedRouter和ImplicitDouter继承自DocRouter,同时CompositeIdRouter又继承HashBasedRouter抽象类,通过一个工具Hash类实现Document的路由策略。

创建Collection

Solr创建Collection的两种方式:

通过前台界面Add Core创建collection

由于在tomcat,setenv.sh,设置-DnumShards=7,所以该collection有7个shards。 需要注意的是:使用compositeId路由创建collection,指定numShards后,不可扩展Shard,即使勉强增加Shard,新建索引也不会落在该Shard上。查看clusterstate.json,可看到新建shard的"range":null

URL创建collection 通过URL创建collection需要满足条件:num of (shards + replications)< num of live nodes

测试环境中3台solr机器,创建collection URL为:

http://10.21.17.200:9580/solr-4.10.0/admin/collections?action=CREATE&name=collection1&router.name=compositeId&numShards=5&replicationFactor=1

执行结果报错

<str name="Operation createcollection caused exception:">

org.apache.solr.common.SolrException:org.apache.solr.common.SolrException:Cannot create collection collection1. Value of maxShardsPerNode is 1, and thenumber of live nodes is 3. This allows a maximum of 3 to be created. Value ofnumShards is 5 and value of replicationFactor is 1. This requires 5 shards tobe created (higher than the allowed number)

</str> 报错原因不满足 5 + 1 < 3 数据迁移

在某些场景中,需要对SolrCloud进行扩容或数据迁移。

根据以上讨论的两种路由算法,implicit实现该需求比较简单,只要创建Shard即可,新建索引时,将索引建到新建Shard上,查询操作,指定collection名称,得到的仍是整个集群返回的结果。

compositeId路由实现上述需求稍微麻烦一下,通过分裂(SPLITSHARD)操作实现。如下图,对Shard1进行分裂,分裂URL为:

http://10.21.17.200:9580/solr-4.10.0-web/admin/collections?action=SPLITSHARD&collection=log4j201503&shard=shard1

此时Shard1的数据会平均分布到shard1_0和shard1_1上,在利用DELETESHARD API删除Shard1,即可保证数据不冗余。

本文转载自:http://www.it165.net/pro/html/201506/45483.html

共有 人打赏支持
zcl111
粉丝 3
博文 92
码字总数 11552
作品 0
六安
程序员
SolrCloud集群Collection进行手动二次Sharding--solr分片相关

SolrCloud集群Collection进行手动二次Sharding http://blog.csdn.net/shirdrn/article/details/9770829 一致性hash和solr千万级数据分布式搜索引擎中的应用 http://www.lanceyan.com/tech/a......

毛朱
2015/08/30
1K
0
Mongos与集群均衡

版权声明:本文由孔德雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/190 来源:腾云阁 https://www.qcloud.com/community mongodb 可以以单复制集的...

偶素浅小浅
2016/11/10
3
0
Laravel Artisan

Laravel Artisan 感谢以下网站提供的帮助 Laravel China https://laravel.com/ Laravel 5.5 中文文档 Laravel 5.4 文档 Laravel 5.1 LTS 速查表 Laravel 5.5 中文文档 Google 翻译 版本:5.5......

xiaobing1024
01/07
0
0
Laravel5.2之Demo1——URL生成和存储

引言: 本文基于框架做的一个URL生成和存储demo,主要目的是学习使用框架。内容基于英文书籍第一章节,似乎没有中文版。书籍基于的,学习时使用框架开发。 学习主题 该demo主要涉及如下几个知...

botkenni
2016/10/10
67
0
MongoDB水平分片集群学习笔记

为何需要水平分片 1 减少单机请求数,将单机负载,提高总负载 2 减少单机的存储空间,提高总存空间。 下图一目了然: mongodb sharding 服务器架构 简单注解: 1 mongos 路由进程, 应用程序...

costaxu
2014/02/01
0
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部