solr4.x OverSeer (一):创建、删除 collection 的消息流
----------shard1 leader
----------shard1 replica
collection----{
---------shard2 leader
---------shard2 replica
简单架构如上,该集群有4台服务器,每台服务器上运行一个solr实例(instance)。配置为:整个集群 只有一个collection为collection1,该collection有两个shard(shard1、shard2),每个shard各有一 个replica。其中假设shard2-leader被选为Overseer。
1.create/delete collection时消息(命令)走向
当用户打算create/delete一个collection时,将向上面4台solr节点中任一节点调用collection API,例如创建一个“collection2”(假设其中一台solr节点为192.168.1.11),那么可以发 送:http://192.168.1.11:8983/solr/admin/collections?action=CREATE&name=collection2&numShards=2&numReplicas=2&collection.configName=myconf. (这里如果你绑定了再加这个参数就会报错)该请求到达192.168.1.11节点上之后,由collectionshandler处理。collectionshandler将待创建的collection的基本信息(传入的参数)组装成一个zookeeper节点对象,并将该节点信息写入zookeeper的队 列。当写入zookeeper成功后,该创建或删除collection的请求将返回请求者“成功”的消息。
2.zookeeper 上消息的存储情况
这节我们将分析下zookeeper上关于队列消息的存储情况,我们先看一下admin工具上看到的zookeeper先overseer节点下的路径结构:
OverSeer由solr集群中一台普通的节点担任。我们上面的图例中是第3个节点。至于由哪个节点担任OverSeer则由一套选举算法决定 (该算法同时用于选举shard leader)。如上图OverSeer在zookeeper上有一个/overseer节点,下面存放的是overseer会处理相关的一 些消息队列。
具体如下:
Queue:该队列存放新的处理消息,即所有的集群配置状态更新的消息都是先写入该队列,比如上面的collection创建的消息,就是首先写入该队列。还包括节点的状态(down、active、recovering)更新消息。
Collection-queue-work:该队列存放所有正在处理的与collection相关的消息。以 上面collection创建消息为例,首先该消息写入queue队列,overseer上的OverseerCollectionProcessor线 程(由overseer创建)定期访问queue队列取出与collection先关的消息,并将消息移到collection-queue-work队 列,之后对该消息进行处理。如果该消息成功处理,则将该消息从collection-queue-work队列中删除。则该消息的整个生命周期结束。
Queue-work:该队列类似于collection-queue-work队列,唯一区别为处理的消息为除collection相关外的其他所有消息,由ClusterStateUpdater线程负责
上面创建collection的例子中,最后创建collection的过程将由OverseerCollectionProcessor线程负 责,目前对于该线程能否成功创建collection,还没有有效的途径能通知请求者。请求者所得到的“成功”消息,只表示请求消息已经成功放入 zookeeper队列中。
除了collection的创建删除外,其他collection的操作流程也遵循同样的处理过程。
solr4.x OverSeer (二):ClusterState update 消息
此主要介绍OverSeer中除collection外的另一类重要消息:ClusterState Update message。这类消息的典型样子:
{"shard":"shard1", "roles":null, "state":"active", "core":"core4", "collection":"collection4", "node_name":"x.x.x.253:8983_solr", "base_url":"http://x.x.x.253:8983/solr"}
该消息的意思是一个更新solr 节点状态的消息。OverSeer在读取该消息后修改zookeeper上clusterstate.json文件collection4的shard1 的replica状态信息。该信息表明节点“x.x.x.253:8983_solr”的“state”为“active”。这个active是该消息中 最重要的信息。 下面一几个问题来描述这些消息。
1.谁什么时候会向zookeeper发送这类消息?
各个solr node都会向zookeeper发送该类消息。solr节点中的每个core都会发送消息。发送消息的时间主要是该core的状态发生变化的时候。调用 ZkCotroller.publish()函数向zookeeper发送状态消息,本文中以publish(“active”)表示发送状态为 “active”的core状态更新消息。
几个主要core状态有:
active //core状态正常,正常服务中处于该状态
down //core当前不可用,不能正常服务
recovering //core正在做recovering,该状态将影响updateLog
recavery_failed //core尝试recoverey失败
leader消息是在上面core的状态消息的基础上加上“leader”项:
{"shard":"shard1", "roles":null, "state":"active", "core":"collectionp0", "collection":"collectionp0", "node_name":"x.x.x.253:8983_solr", "base_url":"http://x.x.x.253:8983/solr", "leader":"true"}
2.消息保存在哪里?
消息同样保存在zookeeper的/overseer/queue队列里。正在处理中的消息将被移动到/overseer/queue-work队列中,处理完后消息将从/overseer/queue-work中删除
3.谁来处理,怎么处理?
OverSeer有两个线程,分别为OverSeerCollectionProcessor和ClusterStateUpdatater。前者 为处理Collection相关的消息,如创建、删除和Unload Collection的消息。后者即为处理clusterstate的线程。 ClusterStateUpdatater对消息的处理主要就是修改zookeeper上的clusterstate.json文件。将queue中的消息移到queue-work中,根据消息修改clusterstate.json,修改成功则删除queue-work中的对应消息。
------------------------------------------------------------------------------------
Solrcloud 中 shard leader的选举
1。每个shard进入集群后,会在zookeeper上注册一个序列号类似,n_0000000001 or n_0000000003,最先进的序列号最小
2。leader挂掉后,首先调用setup方法保证选举初始化,主要是保证写在zookeeper上的信息节点存在
3。选取最小序号的作为新leader
4。挂掉的leader重启后,序号为最大,当然其不能恢复原leader位置,而是作为follower
相关推荐
《IK Analyzer在Solr 7.x中的应用与配置详解》 IK Analyzer,全称为"Intelligent Keyword Analyzer",是一款基于Java实现的、广泛应用于搜索引擎和NLP(自然语言处理)领域的中文分词器。它以其高效、灵活和高度可...
综上所述,《Mastering Apache Solr 7.x》不仅是一本针对Apache Solr 7.x版本的深度指南,也是广大技术人员提升自身技能、优化企业级搜索解决方案的重要参考资料。通过对本书内容的学习与实践,读者可以更加熟练地...
在描述中提到的"ik-analyzer-solr7.zip"是一个专门为Apache Solr 7.x版本定制的IKAnalyzer分词器插件。Solr是Apache软件基金会的一个项目,它是一款强大的全文搜索服务器,提供了诸如索引、搜索、高亮显示、拼写检查...
solr 6.x.x , ik 分词器, 可以实现对一段汉字进行分词处理, 支持配置扩展词语, 在分词时, 对特定词语不进行分词
Solr 是一个强大的开源搜索引擎,广泛应用于各类信息检索系统中。在处理中文文档时,一个优秀的中文分词工具是至关重要的。"IK中文分词工具"(Intelligent Chinese Word Segmentation,简称IK)就是专门为Solr设计的...
Solr4.X是Apache Lucene项目的一个开源搜索引擎服务器,它提供了全文检索、命中高亮、 faceted search(分面搜索)等多种高级功能。在处理中文文档时,由于中文的复杂性,如词语边界不明显,需要使用特定的中文分词...
Solr 数据导入调度器(solr-dataimport-scheduler.jar)是一个专门为Apache Solr 7.x版本设计的组件,用于实现数据的定期索引更新。在理解这个知识点之前,我们需要先了解Solr的基本概念以及数据导入处理...
solr更新到6.x的版本了,ik-analyzer-5.x.jar又不好使了。 无意间从"随-忆"的博客中看到了如何去修改源代码,从而让分词器能够适应6.x的版本,亲自尝试了一下,果然可以,于是奉上了自己重新编译的jar包。 6.x的版本...
这是属于Solr7.X版本的全量、增量更新jar包,有很多版本的这个jar包是没有更新过的,因为这个jar包是爱好者开发的,并不是官方维护,所以很难找到,我是用了两天才找到。
Solr是Apache Lucene项目的一个子项目,是一个高性能、全文本搜索服务器,广泛应用于企业级搜索引擎搭建。在Solr 5.x和6.x版本中,中文分词器扮演着至关重要的角色,它负责将中文文本拆分成有意义的词汇,便于索引和...
- **Collection**: 在SolrCloud中,一个Collection是一个逻辑意义上的完整索引结构,它通常会被划分为一个或多个Shard(分片)。 - **Shard**: Collection的逻辑分片,每个Shard可以由一个或多个副本组成,这些副本...
网上有很多关于IKAnalyzer分词器的jar,但当我们使用solr 6.x进行配置的时候,就发现会各种各样的报错,最常出现的问题就是抽象方法错误,其实就是因为我们使用的IKAnalyzer版本和solr版本不匹配导致系统无法根据...
基于solr5.x版本,在此之上,已经配置了相应的jar包,IKAnalyzer中文分词器,和一个简单的solrHome.下载之后可以直接放到tomcat的webapps路径下启动tomcat就能运行看到效果了。
标题 "solr5.5.x的中文分词IKAnalyzer" 指的是在Apache Solr 5.5.x版本中使用IKAnalyzer进行中文文本的分词处理。Solr是一款流行的开源搜索服务器,它允许对大量数据进行高效、复杂的全文检索。而中文分词是中文文本...
Solr是中国最流行的开源搜索引擎平台Apache Lucene的一个扩展,它提供了全文检索、高亮显示、分布式搜索、热备份等一系列高级功能。在这个特定的情境中,我们关注的是Solr6.x版本中的中文分词支持,以及与ikanalyzer...
Solr7.x版本是Apache Solr的一个稳定版本,包含了多项改进和增强,包括: 1. **性能提升**:优化了搜索性能,处理大量数据时速度更快。 2. **Cloud支持**:支持SolrCloud模式,可以实现分布式部署,提高系统的扩展...
"apache-solr-dataimportscheduler-1.0.zip"是一个官方发布的54l版本,专门针对Solr 5.x的定时索引生成需求。 数据导入调度器(DataImportScheduler)是这个扩展的核心组件,它允许用户根据预设的时间间隔自动执行...
**ikanalyzer5.5-solr6.5.zip** 是一个包含中文分词器IKAnalyzer的压缩包,专为Solr 6.5版本设计。IKAnalyzer是一个在Java平台上广泛使用的开源中文分词库,其目标是为Java开发人员提供简单、高效的中文处理工具。在...