当前位置: 首页 > solr, 搜索 > 正文

solr4:ClusterState update 消息

1 星2 星3 星4 星5 星 (1 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

前面介绍了OverSeer中Collections相关的消息 流程solr4.0 OverSeer (一):创建、删除 Collection 的消息流。本文则主要介绍OverSeer中除collection外的另一类重要消息:ClusterState Update message。这类消息的典型样子:

1
{"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状态有:

1
active //core状态正常,正常服务中处于该状态 down //core当前不可用,不能正常服务 recovering //core正在做recovering,该状态将影响updateLog recavery_failed //core尝试recoverey失败

当新的core创建过程中会产生的消息:
Picture1
选举操作有两个结果:
自己为leader,此时向zookeeper发送自己为leader的消息
自己非leader,产生选举节点的watcher。排队等待下一次选举
leader消息是在上面core的状态消息的基础上加上“leader”项:

1
{ "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"}

recovery操作:
Picture2
recovery过程中可能还会发送down消息以及recovery_failed消息
2.消息保存在哪里?

消息同样保存在zookeeper的/overseer/queue队列里。正在处理中的消息将被移动到/overseer/queue-work队列中,处理完后消息将从/overseer/queue-work中删除。

3.谁来处理,怎么处理?

OverSeer有两个线程,分别为OverSeerCollectionProcessor和ClusterStateUpdatater。前者为处理Collection相关的消息,如创建、删除和UnloadCollection的消息。后者即为处理clusterstate的线程。 ClusterStateUpdatater对消息的处理主要就是修改zookeeper上的clusterstate.json文件。将queue中的消息移到queue-work中,根据消息修改clusterstate.json,修改成功则删除queue-work中的对应消息。

本文固定链接: http://www.chepoo.com/solr4-cluster-state-update.html | IT技术精华网

solr4:ClusterState update 消息:等您坐沙发呢!

发表评论