SolrCloud的设计是为了提供高可用、容错,在分布式环境中进行内容索引和查询请求。
SolrCloud 5.0,对自带的SolrCloud的启动脚本进行了改进,启动SolrCloud变的异常简单,执行
- $ 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中,提供了两种路由算法:
- compositeId
- implicit
在创建Collection时,需要通过router.name指定路由策略,默认为compositeId路由。
compositeId
该路由为一致性哈希路由,shards的哈希范围从80000000~7fffffff。初始创建collection是必须指定numShards,compositeId路由算法根据numShards的个数,计算出每个shard的哈希范围,因此路由策略不可以扩展shard。
implicit
该路由方式指定索引具体落在路由到哪个Shard,这与compositeId路由方式索引可均匀分布在每个shard上不同。同时只有在implicit路由策略下才可创建shard。
利用solrJ新建索引时,需要在代码中指定索引具体落在哪个shard上,添加代码:
- doc.addField("_route_", "shard_X");
同时在schema.xml添加字段
- <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,即可保证数据不冗余。
相关推荐
- **路由**:路由是 ThinkPHP5.0 的一大亮点,支持各种路由模式,如正则路由、静态路由、动态路由等。 #### 七、控制器与请求 - **控制器**:控制器用于处理用户的请求并返回响应,ThinkPHP5.0 提供了多种控制器...
数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟...
《PetShop 5.0 数据库创建脚本详解》 PetShop 5.0 是一个经典的.NET示例应用,它展示了如何使用ASP.NET、ADO.NET和XML等技术来构建一个功能丰富的在线宠物商店。其中,数据库是系统的核心部分,存储着商品、客户、...
中关村网络安全与信息化产业联盟数据安全治理专业委员会、北京安华金和科技有限公司主编出品,94家产学研机构共同编撰的《数据安全治理白皮书5.0》于第六届中国数据安全治理高峰论坛上正式发布。
CCNA-5.0路由和交换:网络简介-第11章练习.docx
本教程“012集-android5.0模拟器的创建”旨在帮助初学者掌握如何在Android Studio中配置和使用Android 5.0(Lollipop)模拟器。以下是关于这个主题的详细知识: 1. **Android模拟器介绍**: Android模拟器是Google...
CCNA-5.0路由和交换:网络简介-第1章-探索网络(练习和答案).pdf
SDK15 蓝牙5.0笔记22:(蓝牙数据传输篇)蓝牙串口通信详解(改) SDK15 蓝牙5.0笔记23:(蓝牙数据传输篇)蓝牙遥控器 SDK15 蓝牙5.0笔记24:(蓝牙数据传输篇)蓝牙FLASH存储之fstorage SDK15 蓝牙5.0笔记25:...
【大数据】数仓5.0业务数据【大数据】数仓5.0业务数据【大数据】数仓5.0业务数据【大数据】数仓5.0业务数据【大数据】数仓5.0业务数据【大数据】数仓5.0业务数据【大数据】数仓5.0业务数据【大数据】数仓5.0业务数据...
网络渠道获取的白皮书扫描件整理成册。
8. zktime5.0考勤机的数据库集成:zktime5.0考勤机需要与sqlserver数据库集成,以便存储和读取考勤数据,该集成需要根据zktime5.0的需求进行相应的配置和开发。 9. zktime5.0考勤机的数据库设置:zktime5.0考勤机...
《梅特勒托利多电子称数据传输软件SPCT5.0详解》 梅特勒托利多,作为全球知名的精密仪器制造商,其在电子称领域有着深厚的底蕴和技术优势。SPCT5.0是一款专为梅特勒托利多电子称设计的数据传输软件,它极大地提升了...
《基于ThinkPHP5.0构建的数据管理系统详解》 在当今互联网时代,数据管理系统的构建对于企业和个人来说至关重要。本文将深入探讨如何利用PHP框架ThinkPHP5.0(简称tp5.0)来创建一个高效、稳定且易于维护的数据管理...
本项目着重讲解如何使用mqtt3.1.1和mqtt5.0版本在Android应用中实现数据的发送和接收,从而与服务端进行高效的数据交互。 首先,我们来看`mqtt3.1.1`版本。这是MQTT的早期版本,被广泛使用且兼容性良好。要集成mqtt...
数据结构和算法5.0.pdf
在PFC5.0这款先进的离散元数值模拟软件中,Geometry系统扮演着非常重要的角色,它允许用户创建、导入和输出各种类型的几何体数据。这些数据包括节点、边和多边形等,统称为几何体集合(geometry set)。这些几何体集合...
【标题】"mxy5.0数据更新至2019050"涉及的是一个名为mxy5.0的数据集或软件版本的更新。这个更新将数据推进到了2019年5月,可能是一个持续追踪、收集或分析特定领域信息的系统。 在IT行业中,数据更新通常意味着原有...
4. 向下兼容:PCIE5.0支持向下兼容PCIE3.0和PCIE2.0,确保了与旧版本的兼容性。 PCIE5.0协议标准的应用领域包括: 1. 服务器和数据中心:PCIE5.0可以用于服务器和数据中心的高速数据传输,提高计算机系统的性能和...
在"PyQt 5.0 GUI与数据可视化程序源码"中,我们可以探索如何将数据展示和交互式界面设计融合在一起,提升用户体验。 1. **PyQt 5.0 概述** PyQt 5.0 是一系列Python模块的集合,它提供了对Qt库的全面访问。Qt库...
VBUC 5.0是该工具的一个版本,旨在帮助开发者高效、平滑地进行从VB6到.NET平台的迁移过程。 VBUC 5.0的主要特点和功能包括: 1. **自动化迁移**:VBUC可以自动分析VB6项目,识别代码结构,并将其转换为.NET等效...