`

SolrCloud【转】

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

         它有几个特色功能:

         1)集中式的配置信息

         2)自动容错

         3)近实时搜索

         4)查询时自动负载均衡



       基本可以用上面这幅图来概述,这是一个拥有4个Solr节点的集群,索引分布在两个Shard里面,每个Shard包含两个Solr节点,一个是Leader节点,一个是Replica节点,此外集群中有一个负责维护集群状态信息的Overseer节点,它是一个总控制器。集群的所有状态信息都放在Zookeeper集群中统一维护。从图中还可以看到,任何一个节点都可以接收索引更新的请求,然后再将这个请求转发到文档所应该属于的那个Shard的Leader节点,Leader节点更新结束完成,最后将版本号和文档转发给同属于一个Shard的replicas节点。
下面我们来看一个简单的SolrCloud集群的配置过程。
首先去https://builds.apache.org/job/Solr-trunk/lastSuccessfulBuild/artifact/artifacts/下载Solr4.0的源码和二进制包,注意Solr4.0现在还在开发中,因此这里是Nightly Build版本。
示例1,简单的包含2个Shard的集群

这个示例中,我们把一个collection的索引数据分布到两个shard上去,步骤如下:
为了弄2个solr服务器,我们拷贝一份example目录
cp -r example example2
然后启动第一个solr服务器,并初始化一个新的solr集群,
cd example
java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
-DzkRun参数是启动一个嵌入式的Zookeeper服务器,它会作为solr服务器的一部分,-Dbootstrap_confdir参数是上传本地的配置文件上传到zookeeper中去,作为整个集群共用的配置文件,-DnumShards指定了集群的逻辑分组数目。
然后启动第二个solr服务器,并将其引向集群所在位置
cd example2
java -Djetty.port=7574 -DzkHost=localhost:9983 -jar start.jar
复制代码
-DzkHost=localhost:9983就是指明了Zookeeper集群所在位置
我们可以打开http://localhost:8983/solr/collection1/admin/zookeeper.jsp 或者http://localhost:8983/solr/#/cloud看看目前集群的状态,

现在,我们可以试试索引一些文档,
cd exampledocs
java -Durl=http://localhost:8983/solr/collection1/update -jar post.jar ipod_video.xml
java -Durl=http://localhost:8983/solr/collection1/update -jar post.jar monitor.xml
java -Durl=http://localhost:8983/solr/collection1/update -jar post.jar mem.xml
最后,来试试分布式搜索吧:
http://localhost:8983/solr/collection1/select?q
Zookeeper维护的集群状态数据是存放在solr/zoo_data目录下的。
现在我们来剖析下这样一个简单的集群构建的基本流程:
先从第一台solr服务器说起:
1)       它首先启动一个嵌入式的Zookeeper服务器,作为集群状态信息的管理者,
2) 将自己这个节点注册到/node_states/目录下
3) 同时将自己注册到/live_nodes/目录下
4)创建/overseer_elect/leader,为后续Overseer节点的选举做准备,新建一个Overseer,
5) 更新/clusterstate.json目录下json格式的集群状态信息
6) 本机从Zookeeper中更新集群状态信息,维持与Zookeeper上的集群信息一致
7)上传本地配置文件到Zookeeper中,供集群中其他solr节点使用
8) 启动本地的Solr服务器,
9) Solr启动完成后,Overseer会得知shard中有第一个节点进来,更新shard状态信息,并将本机所在节点设置为shard1的leader节点,并向整个集群发布最新的集群状态信息。
10)本机从Zookeeper中再次更新集群状态信息,第一台solr服务器启动完毕。
然后来看第二台solr服务器的启动过程:
1) 本机连接到集群所在的Zookeeper,
2) 将自己这个节点注册到/node_states/目录下
3)  同时将自己注册到/live_nodes/目录下
4) 本机从Zookeeper中更新集群状态信息,维持与Zookeeper上的集群信息一致
5) 从集群中保存的配置文件加载Solr所需要的配置信息
6) 启动本地solr服务器,
7) solr启动完成后,将本节点注册为集群中的shard,并将本机设置为shard2的Leader节点,
8) 本机从Zookeeper中再次更新集群状态信息,第二台solr服务器启动完毕。
示例2,包含2个shard的集群,每个shard中有replica节点

如图所示,集群包含2个shard,每个shard中有两个solr节点,一个是leader,一个是replica节点,
cp -r example exampleB
cp -r example2 example2B
cd exampleB
java -Djetty.port=8900 -DzkHost=localhost:9983 -jar start.jar
cd example2B
java -Djetty.port=7500 -DzkHost=localhost:9983 -jar start.jar
复制代码
我们可以打开http://localhost:8983/solr/collection1/admin/zookeeper.jsp  看看包含4个节点的集群的状态,


这个集群现在就具备容错性了,你可以试着干掉一个Solr服务器,然后再发送查询请求。背后的实质是集群的ov erseer会监测各个shard的leader节点,如果leader节点挂了,则会启动自动的容错机制,会从同一个shard中的其他replica节点集中重新选举出一个leader节点,甚至如果overseer节点自己也挂了,同样会自动在其他节点上启用新的overseer节点,这样就确保了集群的高可用性。
示例3 包含2个shard的集群,带shard备份和zookeeper集群机制


上一个示例中存在的问题是:尽管solr服务器可以容忍挂掉,但集群中只有一个zookeeper服务器来维护集群的状态信息,单点的存在即是不稳定的根源。如果这个zookeeper服务器挂了,那么分布式查询还是可以工作的,因为每个solr服务器都会在内存中维护最近一次由zookeeper维护的集群状态信息,但新的节点无法加入集群,集群的状态变化也不可知了。因此,为了解决这个问题,需要对Zookeeper服务器也设置一个集群,让其也具备高可用性和容错性。
有两种方式可选,一种是提供一个外部独立的Zookeeper集群,另一种是每个solr服务器都启动一个内嵌的Zookeeper服务器,再将这些Zookeeper服务器组成一个集群。 我们这里用后一种做示例:
cd example
java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2 -jar start.jar
cd example2
java -Djetty.port=7574 -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar
cd exampleB
java -Djetty.port=8900 -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar
cd example2B
java -Djetty.port=7500 -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar
我们可以打开http://localhost:8983/solr/collection1/admin/zookeeper.jsp  看看包含4个节点的集群的状态,可以发现其实和上一个没有任何区别。
后续的文章将从实现层面对SolrCloud这个分布式搜索解决方案进行进一步的深入剖析。
分享到:
评论

相关推荐

    solr in action 完整版

    SolrCloud是Solr的一个分布式搜索服务架构。它提供了可扩展性、高可用性和容错性。SolrCloud支持自动负载均衡、故障转移以及动态集群扩展。它允许用户部署大规模、高性能的Solr集群,以处理TB级别的数据和提供高并发...

    solr4.5版本

    - **分布式搜索**:Solr 4.5引入了SolrCloud模式,允许在分布式环境中部署和管理Solr,实现了数据的自动分片、复制和故障恢复。 - **Zookeeper协调**:SolrCloud依赖Zookeeper来管理集群配置和服务发现,确保数据...

    solr7.5官方文档doc加pdf格式

    - 分布式搜索与SolrCloud:学习如何设置和管理SolrCloud集群,以及处理故障转移和恢复。 - 插件开发:如果需要定制Solr行为,可以了解如何编写和使用插件。 总的来说,Apache Solr 7.5官方文档是开发人员、系统管理...

    solr 的使用及安装

    5. **分布式搜索**:通过 SolrCloud 模式,可以实现跨多个节点的分布式搜索和处理,提高性能和可用性。 二、Solr 安装 1. **下载 Solr**:访问 Apache 官网(http://lucene.apache.org/solr/)下载最新版本的 Solr ...

    人工智能-项目实践-搜索引擎-solr构建景点搜索引擎

    8. **SolrCloud**:如果数据量非常大或者需要分布式部署,可以使用SolrCloud,它提供了分布式索引、搜索和复制的功能,保证了数据的一致性和可用性。 9. **Java API与Solr交互**:使用SolrJ库,我们可以用Java代码...

    solr-6.4.1 安装包.zip

    6. **分布式搜索**:通过SolrCloud支持多节点集群,实现数据的分布和冗余。 三、Solr 6.4.1新特性 1. **Distributed Search Enhancements**:优化了分布式搜索的性能和稳定性。 2. **New Query Parsers and ...

    apache solr 7.7.0

    - **Cloud模式**:Solr 7.7.0支持SolrCloud,这是一个分布式搜索和处理框架,能够自动处理数据分区、复制和故障恢复,确保高可用性和数据一致性。 - **Sharding**:SolrCloud允许将大型数据集划分为多个较小的分片...

    solr6.6.0源码

    在Solr 6.6.0中,SolrCloud提供了分布式搜索和管理能力。它依赖于ZooKeeper进行集群管理和数据分配。ZooKeeper负责节点的注册、状态监控、分片分配和领导者选举等任务。 五、优化与性能 1. **缓存机制**:Solr包含...

    solr 7 官方文档

    - **自动故障转移**:当节点失败时,SolrCloud能自动重新分配片和恢复服务。 7. **性能优化** - **Caching**:Solr使用缓存机制提升查询速度,包括查询结果缓存、文档ID缓存等。 - **索引压缩**:索引的压缩可以...

    Solr权威指南 下卷

    - **副本与分片**: SolrCloud中的每个索引可以分为多个分片,并为每个分片创建多个副本,以实现数据冗余和负载均衡。 - **自动故障转移**: 当节点出现故障时,系统能够自动检测并重新分配任务,确保服务不中断。 ##...

    Solr操作说明文档

    SolrCloud 是 Solr 的分布式搜索解决方案,能够提供高可用性和可扩展性的搜索服务。下面是 Solr 操作说明文档的详细知识点: Solr 目录结构说明 Solr 的目录结构主要包括 conf、collection1、lib、logs 和 solr-...

    solr讲解,案例分析

    4. **高级功能**:可能包括实时索引更新、分布式搜索(通过SolrCloud)和多核心管理。SolrCloud使得Solr可以在集群环境中运行,提供高可用性和故障恢复能力。 5. **定制化开发**:可能涵盖自定义查询解析器、过滤器...

    毕业设计-旅游系统源码-trip-search:solr构建景点搜索引擎

    编写的系列开发文章发布在Gitbook,当然也希望大家去我的博客转转 本repository中的代码主要是爬虫模块、网页抽取模块、搜索服务、客户端的代码。 . ├── ExtractHtml ├── README.md ├── SearchApp ├── ...

    solr 4-10.3 工具包 包含工程jar包

    3. **Cloud模式**:Solr 4引入了SolrCloud,这是一个分布式管理服务,允许在多台机器上部署和管理Solr实例,实现自动故障转移和负载均衡。 4. **ZooKeeper集成**:SolrCloud依赖ZooKeeper来协调集群状态,管理和...

    solr导航搜索工具+文档+配置代码

    压缩包中的“导航搜索工具”可能是用于简化Solr操作的GUI工具,如SolrAdmin或SolrCloud Dashboard,它们可以帮助用户更直观地管理SolrCore、查看和编辑Schema、导入导出数据、执行查询等。 五、Solr的进一步学习与...

    基于微博数据检测的Solr5.5实战开发视频教程

    除了基本的搜索功能,课程可能还会涵盖SolrCloud,这是Solr的分布式版本,支持多节点集群,提供高可用性和水平扩展能力。了解如何配置ZooKeeper以协调集群状态,以及如何进行数据分割和复制,对于大型微博数据集的...

    APACHE.SOLR.ESSENTIALS.2015

    7. **使用SolrCloud进行管理**:熟悉SolrCloud的管理和监控工具,确保系统的稳定运行。 8. **进行性能调优**:掌握各种技巧和策略,优化Solr服务器的性能和响应时间。 9. **集成Solr到Web应用中**:学习如何将...

Global site tag (gtag.js) - Google Analytics