`

SolrCloud 5.0 路由、Collection创建与数据迁移

 
阅读更多

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

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

 

[plain] view plain copy
 
  1. $ bin/solr –e cloud  

        根据提示输入一些参数,即可启动完成SolrCloud,部署启动完成,如下图



 

 

 

SolrCloud相关概念

 

        SolrCloud中有四个关键名词:corecollectionshardnode

        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上,添加代码:

 

[java] view plain copy
 
  1. doc.addField("_route_""shard_X");  

        同时在schema.xml添加字段

 

 

[html] view plain copy
 
  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,即可保证数据不冗余。

  • 大小: 76.6 KB
  • 大小: 34.8 KB
  • 大小: 15.2 KB
  • 大小: 28.9 KB
  • 大小: 12.9 KB
  • 大小: 18.4 KB
  • 大小: 28.9 KB
分享到:
评论

相关推荐

    ThinkPHP5.0完全开发手册

    - **路由**:路由是 ThinkPHP5.0 的一大亮点,支持各种路由模式,如正则路由、静态路由、动态路由等。 #### 七、控制器与请求 - **控制器**:控制器用于处理用户的请求并返回响应,ThinkPHP5.0 提供了多种控制器...

    数仓5.0模拟加业务数据

    数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟加业务数据数仓5.0模拟...

    PetShop 5.0 数据库 Database 创建 脚本

    《PetShop 5.0 数据库创建脚本详解》 PetShop 5.0 是一个经典的.NET示例应用,它展示了如何使用ASP.NET、ADO.NET和XML等技术来构建一个功能丰富的在线宠物商店。其中,数据库是系统的核心部分,存储着商品、客户、...

    数据安全治理白皮书 5.0

    中关村网络安全与信息化产业联盟数据安全治理专业委员会、北京安华金和科技有限公司主编出品,94家产学研机构共同编撰的《数据安全治理白皮书5.0》于第六届中国数据安全治理高峰论坛上正式发布。

    CCNA-5.0路由和交换:网络简介-第11章练习.docx

    CCNA-5.0路由和交换:网络简介-第11章练习.docx

    012集-android5.0模拟器的创建

    本教程“012集-android5.0模拟器的创建”旨在帮助初学者掌握如何在Android Studio中配置和使用Android 5.0(Lollipop)模拟器。以下是关于这个主题的详细知识: 1. **Android模拟器介绍**: Android模拟器是Google...

    CCNA-5.0路由和交换:网络简介-第1章-探索网络(练习和答案).pdf

    CCNA-5.0路由和交换:网络简介-第1章-探索网络(练习和答案).pdf

    SDK15 蓝牙5.0笔记21:蓝牙数据传输篇

    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业务数据【大数据】数仓5.0业务数据...

    数据安全治理白皮书5.0-医疗数据安全治理实践(2023)

    网络渠道获取的白皮书扫描件整理成册。

    zktime5.0考勤机连接sqlserver数据库,创建及连接方法.pdf

    8. zktime5.0考勤机的数据库集成:zktime5.0考勤机需要与sqlserver数据库集成,以便存储和读取考勤数据,该集成需要根据zktime5.0的需求进行相应的配置和开发。 9. zktime5.0考勤机的数据库设置:zktime5.0考勤机...

    spct5.0梅特勒托利多电子称数据传输软件

    《梅特勒托利多电子称数据传输软件SPCT5.0详解》 梅特勒托利多,作为全球知名的精密仪器制造商,其在电子称领域有着深厚的底蕴和技术优势。SPCT5.0是一款专为梅特勒托利多电子称设计的数据传输软件,它极大地提升了...

    基础thinkPHP5.0开发的数据管理系统

    《基于ThinkPHP5.0构建的数据管理系统详解》 在当今互联网时代,数据管理系统的构建对于企业和个人来说至关重要。本文将深入探讨如何利用PHP框架ThinkPHP5.0(简称tp5.0)来创建一个高效、稳定且易于维护的数据管理...

    Android开发,通过使用mqtt3.1.1版本和mqtt5.0版本进行mqtt数据的发送和接收,实现和服务端数据的交互

    本项目着重讲解如何使用mqtt3.1.1和mqtt5.0版本在Android应用中实现数据的发送和接收,从而与服务端进行高效的数据交互。 首先,我们来看`mqtt3.1.1`版本。这是MQTT的早期版本,被广泛使用且兼容性良好。要集成mqtt...

    数据结构和算法5.0.pdf

    数据结构和算法5.0.pdf

    PFC5.0几何体的创建、输入和导出.docx

    在PFC5.0这款先进的离散元数值模拟软件中,Geometry系统扮演着非常重要的角色,它允许用户创建、导入和输出各种类型的几何体数据。这些数据包括节点、边和多边形等,统称为几何体集合(geometry set)。这些几何体集合...

    mxy5.0数据更新至2019050

    【标题】"mxy5.0数据更新至2019050"涉及的是一个名为mxy5.0的数据集或软件版本的更新。这个更新将数据推进到了2019年5月,可能是一个持续追踪、收集或分析特定领域信息的系统。 在IT行业中,数据更新通常意味着原有...

    PCIE5.0协议标准

    4. 向下兼容:PCIE5.0支持向下兼容PCIE3.0和PCIE2.0,确保了与旧版本的兼容性。 PCIE5.0协议标准的应用领域包括: 1. 服务器和数据中心:PCIE5.0可以用于服务器和数据中心的高速数据传输,提高计算机系统的性能和...

    PyQt 5.0 GUI与数据可视化程序

    在"PyQt 5.0 GUI与数据可视化程序源码"中,我们可以探索如何将数据展示和交互式界面设计融合在一起,提升用户体验。 1. **PyQt 5.0 概述** PyQt 5.0 是一系列Python模块的集合,它提供了对Qt库的全面访问。Qt库...

    VBUC 5.0 VBUC 5.0 VBUC 5.0 VBUC 5.0

    VBUC 5.0是该工具的一个版本,旨在帮助开发者高效、平滑地进行从VB6到.NET平台的迁移过程。 VBUC 5.0的主要特点和功能包括: 1. **自动化迁移**:VBUC可以自动分析VB6项目,识别代码结构,并将其转换为.NET等效...

Global site tag (gtag.js) - Google Analytics