Solr分布式索引SolrCloud原理总结

概要

Solr从4.0开始支持solrcloud模式,主要特性有:
  • 配置文件集中式存储,集群中的配置文件存储在zookeeper中,仅保存一份,而过去是每个core一份配置文件,非常容易导致不一致
  • 负载均衡和故障恢复,自动将流量分配到各台机器上,不再需要nginx或haproxy的支持,自动剔除故障机器
在solr4-10.2源码和官方wiki中多次出现collection、shard、replica,collection指一个完整的索引,当索引数据量太大时,需要拆分成多个shard,shard代表子索引,为了增加并发请求能力和保证数据完整性,一个shard可以存在多份完全一致的副本,这些副本便是replica。

在solrcloud的众多solr服务中,solr分两种角色,leader和非leader,当solr实例数量发生变化时会重新进行选举leader。在使用solrcloud时,其中的shard和replica对于我们是透明的,且任何一台机器都可以接受查询、修改、删除请求,创建collection、shard、replica,更新索引等数据修改操作只能由leader进行,避免产生并发修改问题,当非leader节点收到修改操作请求时,要将请求信息存储在zookeeper中相应节点上,leader节点对该zookeeper信息进行监听,近实时进行处理。

创建索引

  1. 任意节点(leader节点或者非leader节点)接收创建索引请求后,将请求参数转化成json格式存储至zookeeper的/overseer/collection-queue-work的children节点上
  2. leader节点的OverseerCollectionProcessor线程一直在监控/overseer/collection-queue-work节点,检测到变化后,根据请求参数计算出需要创建的shard, replica,将创建具体replica的请求转向各对应节点。
  3. 各节点创建完具体的replica后,将该节点的状态(创建成功与否等)更新到/overseer/queue的children节点上。
  4. leader节点的ClusterStateUpdater线程监控/overseer/queue节点,将overseer/queue的children节点的状态更新至/clusterstate.json。
  5. 各节点同步/clusterstate.json,整个集群状态得到更新,新索引创建成功。

更新索引数据

  1. solr根据add doc数据创建出AddUpdateCommand,由DistrubutedUpdateProcessor.processAdd处理。
  2. 根据router规则计算出该doc所属shard并找出该shard对应的leader replica。
  3. 如果当前replica(接收add doc命令的replica)不是(所属shard且leader replica),将请求转出至对应leader replica。
  4. 如果当前replica是对应shard且是leader,首先更新本地索引,再将add doc转向该shard的其余replica。
  5. 所有replica得到更新。

检索流程

  1. 搜索流程中,solr实例不区分是否为leader状态。任意replica接收搜索请求时,从zookeeper中获取改replica对应的collection及所有的shard和replica。
  2. 将请求同时发送向该collection的所有shard上,对同一shard下的多replica进行负载均衡,在LBHttpSolrServer 中实现。

增加、减少solr实例


在创建索引时,会指定索引分成几个shard,每个shard生成多少replica,且每个solr实例上最多允许创建的replica数目。只有在所有solr实例允许创建的replica总数大于需要的replica数时才会创建成功。

当索引创建成功后,停掉某台solr,若该solr含有所创建的索引的replica,则某个shard的replica会减少,更新集群状态/clusterstate.json。此时增加一台新solr实例并连接上相同的zookeeper,会自动在该solr上创建失去的replica并从leader处复制来完整的数据。



主要类介绍

  • CollectionsHandler 操作collection、replica、alias、shard创建、删除的入口
  • OverseerCollectionProcessor 仅在Leader节点上起作用,负责监控zookeeper,处理和collection相关的任务
  • ClusterStateUpdater 仅在leader节点上起作用,负责监控/overseer/queue和/overseer/queue-work
  • LBHttpSolrServer solr实现的负载均衡类,在某shard存在多个replica时使用

参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值