http://www.cnblogs.com/guozk/p/3498844.html

SolrCloud阶段总结

开发类型

全文检索相关开发

Solr版本

4.2

文件内容

本文介绍SolrCloud的功能使用及相关注意事项

在代码文本框中如有显示不全的,请在文本框中按Ctrl+A再复制.

版本

作者/修改人

日期

V1.0

gzk

2013-06-04

SolrCloud是基于Solr和Zookeeper的分布式搜索方案,是Solr4.X的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。

基本可以用上面这幅图来概述,这是一个拥有4个Solr节点的集群,索引分布在两个Shard里面,每个Shard包含两个Solr节点,一个是Leader节点,一个是Replica节点,此外集群中有一个负责维护集群状态信息的Overseer节点,它是一个总控制器。集群的所有状态信息都放在Zookeeper集群中统一维护。从图中还可以看到,任何一个节点都可以接收索引更新的请求,然后再将这个请求转发到文档所应该属于的那个Shard的Leader节点,Leader节点更新同时把文档转发给同属于一个Shard的所有replicas节点。

SolrCloud有几个特色功能:

1)集中配置

2)自动容错

3)负载均衡 。

SolrCloud的配置过程

这里为了方便建了4个bat文件并分别命名为对应的角色,先说一下配置的参数:

参数名

说明

-Dbootstrap_confdir

是上传本地的配置文件上传到zookeeper中去,作为整个集群共用的配置文件

-Dcollection.configName

是上传的Solr配置在集群中的名了,如不指定默认为collection1

-DzkRun

启动一个嵌入式的Zookeeper服务器,它会作为solr服务器的一部分

-DnumShards

指定了集群的逻辑分组数目

-DzkHost

是指明了Zookeeper集群所在位置

  1. SolrCloudServer-Master-Zookeeper-Host.bat

java     -Dbootstrap_confdir=./solr/skyCore/conf -Dcollection.configName=myconf     -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2     -jar start.jar

上面的意思是启动一个主SolrCloud服务同时启动内嵌的Zookeeper服务,并上传本地的Solr配置文件到Zookeeper集群中,其中还配置了3个Zookeeper服务器组成一个集群,确保Solr集群信息的高可用性和容错性。当Zookeeper服务为3个以上时,能够更好的实现容灾问题,当为3个Zookeeper服务时挂掉其中一个Zookeeper集群服务还会正常运行,当为5个Zookeeper服务时挂掉两个还是可以正常运行,就像盘阵的Raid机制一样.只有当所有配置的Zookeeper服务都启动后整个服务才会继续运行下去.

  1. SolrCloudServer-Slave-Zookeeper-Host-7574.bat

java -Djetty.port=7574 -DzkRun     -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar

上面的意思是启动一个主SolrCloud服务同时启动内嵌的Zookeeper服务,其中还配置了3个Zookeeper服务器地址.

  1. SolrCloudServer-Slave-Zookeeper-Host-8900.bat

java -Djetty.port=8900 -DzkRun     -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar

上面的意思是启动一个主SolrCloud服务同时启动内嵌的Zookeeper服务,其中还配置了3个Zookeeper服务器地址.

  1. SolrCloudServer.bat

java -Djetty.port=7500     -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar

上面的意思是启动一个主SolrCloud服务.并配置了Zookeeper服务器所在.       当服务启动成功后可以在管理界面中SolrCloud情况,通过Cloud->Tree可以查看当前详细的服务情况,如图:

通过上面的图我们可以看到当前有两个shard,每个shard下面有两个节点,还可以看到刚才配置中指定的myconf名称,点开后就可以看到上传的配置文件了,点击下面第一个节点都可以看到

集群状态json:

{"skyCore":{

"shards":{

"shard1":{

"range":"80000000-ffffffff",

"state":"active",

"replicas":{

"10.0.4.84:8983_solr_skyCore":{

"shard":"shard1",

"state":"active",

"core":"skyCore",

"collection":"skyCore",

"node_name":"10.0.4.84:8983_solr",

"base_url":"http://10.0.4.84:8983/solr"},

"10.0.4.84:7500_solr_skyCore":{

"shard":"shard1",

"state":"active",

"core":"skyCore",

"collection":"skyCore",

"node_name":"10.0.4.84:7500_solr",

"base_url":"http://10.0.4.84:7500/solr",

"leader":"true"}}},

"shard2":{

"range":"0-7fffffff",

"state":"active",

"replicas":{

"10.0.4.84:7574_solr_skyCore":{

"shard":"shard2",

"state":"active",

"core":"skyCore",

"collection":"skyCore",

"node_name":"10.0.4.84:7574_solr",

"base_url":"http://10.0.4.84:7574/solr"},

"10.0.4.84:8900_solr_skyCore":{

"shard":"shard2",

"state":"active",

"core":"skyCore",

"collection":"skyCore",

"node_name":"10.0.4.84:8900_solr",

"base_url":"http://10.0.4.84:8900/solr",

"leader":"true"}}}},

"router":"compositeId"}}

SolrCloud集中式的配置信息

SolrCloud集群的所有的配置存储在ZooKeeper. 一旦SolrCloud节点启动时配置了Dbootstrap_confdir参数, 该节点的配置信息将发送到ZooKeeper上存储. 基它节点启动时会应用ZooKeeper上的配置信息,这样当我们改动配置时就不用一个个机子去更改了.

SolrCloud容灾备份

Shard Replica除了作为容灾备份存在, 另外一个作用就是分散查询请求, 提高整个集群对查询的负载能力.

SolrCloud索引处理

索引文档的更新在Shard和Replica之间是自动和实时的.把一个doc可以发送到任何一个SolrCloud, 然后由SolrCloud完成剩下的事情. SolrCloud会自动选择一个Shard进行分发任务,当一个Shard的leader收到文档后同时也会把doc分发给当前Shard所有的副本.

SolrCloud检索方式

有三种不同的检索方式:

  1. 在所有Shared上进行检索一个Core的数据

http://localhost:8983/solr/skyCore/select?q=*%3A*

  1. 在指定的Shared上进行检索一个Core的数据

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=shard1,shard2

  1. 也可以使用shard的地址作为参数

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=     localhost:8983/solr,localhost:7574/solr

  1. 在指定地址的Shared上进行检索,并支持负载一个Core的数据

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=localhost:8983/solr|localhost:8900/solr,localhost:7574/solr|localhost:7500/solr

  1. 在所有Shared上进行检索指定的Core,并合并结果

http://localhost:8983/solr/skyCore/select?q=*%3A*&collection=TestCore,skyCore

  1. 当有shard没有启动时查询是会报错的.为了让查询能正常进行,在查询时加入参数shards.tolerant=true就可以正常查询了.

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards.tolerant=true

SolrCloud的集合(SolrCores)管理API

  1. 添加集合

http://localhost:8983/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=4

参数名

说明

Name

要创建的集合名称

numShards

指定集合Shard的数量

replicationFactor

指定每个Shard副本数量

maxShardsPerNode

每个Solr服务器节点上最大Shard数量

createNodeSet

还不明白什么用

collection.configName

配置的名称(必须已存储在ZooKeeper)使用这个新的集合。如果没有提供创建操作将默认配置名称的集合名称。

  1. 删除集合

http://localhost:8983/solr/admin/collections?action=DELETE&name=mycollection

  1. 重新加载

http://localhost:8983/solr/admin/collections?action=RELOAD&name=mycollection

动态添加SolrCore示例

在服务运行时新添加的MyCore分布在3个Shared上面每个两个节点

http://localhost:8983/solr/admin/collections?action=CREATE&name=MyCore&numShards=3&replicationFactor=2

SolrCloud阶段总结的更多相关文章

  1. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  2. 你真的会玩SQL吗?之逻辑查询处理阶段

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  3. Openfire阶段实践总结

    从3月开始研究Openfire,其实就是要做一套IM系统,也正是这个原因才了解到Openfire.之前还真没想过有这么多的开源产品可以做IM,而且也没想到XMPP这个协议竟然如何强大.看来还是标准为先 ...

  4. 【Win 10应用开发】分阶段进行数据绑定

    使用x:Bind扩展标记进行数据绑定,是在编译阶段完成,至于说性能优化方面,大概主要是优化CPU资源的使用,因为免去了运行阶段进行绑定的过程.当然,使用这个标记仅仅是绑定上的优化,并不包括数据源.数据 ...

  5. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  6. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  7. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇四:关于OneNote入库处理以及审核

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  8. 阶段一:用Handler和Message实现计时效果及其中一些疑问

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 本来是打算继续做天气预报的优化的,但因为某些原因,我要先把之前做的小应用优化一下.所以今天就插播一下用Handle ...

  9. 阶段一:为View设置阴影和弹出动画(天气应用)

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 上一篇阶段一:通过网络请求,获得并解析JSON数据(天气应用)完成了应用的核心功能,接下来就要对它进行优化.今天我 ...

随机推荐

  1. careercup-链表 2.6

    2.6 给定一个有环链表,实现一个算法返回环路的开头结点. 类似leetcode中 Linked List Cycle II C++实现代码: #include<iostream> #in ...

  2. Java基础知识强化之IO流笔记33:转换流之InputStreamReader的使用

    1. InputStreamReader的使用 InputStreamReader(InputStream is):用默认的编码读取数据 InputStreamReader(InputStream i ...

  3. jwplayer 源代码重新编译

    由于原来下载的jwplaery播放器中带有官方的播放统计信息,需要从官方加载统计js脚本,影响播放器加载速度,因此从官方github站点上下载播放器进行重新编译操作,现记录过程如下. 下载最新的jwp ...

  4. C#选择文件、选择文件夹、打开文件(或者文件夹)

    1.选择文件用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以 ...

  5. IE浏览器div错乱问题

    这个问题属于各浏览器的兼容问题,有时候在其他浏览器中,html页面布局都是正常显示,唯独IE浏览器的div块布局错乱了,可能是html文件上面的报头标准出现错误. 就是一段报头,告诉浏览器,你的文档以 ...

  6. 数据库ACID、隔离级别与MVCC

    首先需要明确事务的概念:一组原子性的SQL查询,如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组语句,否则所有语句都不执行. 事务有ACID四个特性,即: 原子性:一个事务是一个 ...

  7. .net单元测试——解除依赖

    最近在看.net单元测试艺术,我也喜欢单元测试,这里写一下如何在测试中解除对象间的依赖. 假如有这样的一个需求,当用户登陆时,我需要对用户名和密码进行验证,然后再将用户名写入日志中. public c ...

  8. arcgis engine - 鹰眼在栅格图无法显示.

    一般,如果是矢量图,则不会出现这样的情况,鹰眼图无法显示,这时,只要在主控件的OnMapReplaced中显示指定鹰眼控制的空间参照,即可,如:在map_Big_OnMapReplaced方法中,添加 ...

  9. C#调用ActiveX控件

    背景:最近项目中需要用到ActiveX控件,项目是在.Net平台下开发的.因此就直接在项目中添加了对ActiveX控件的引用,添加引用成功.在代码中实例化类的实例也没有问题,但在调用其方法或属性时总是 ...

  10. IMPDP hangs, session wait “wait for unread message on broadcast channel”

    昨晚有个朋友说加班在IMPDP数据, 在导入中途突然没有了进展,挂在那里不动了,impdp 窗口也没有报错, 一直等了1个多小时,说是impdp使用了parallel,怀疑是parallel参数出了问 ...