solr replication原理探究

CDH6.2使用solr构建Hbase二级索引 需要用到key-value store indexer key-value store indexer 是一个基于hbase的replication特性而实现的能够动态的将hbase的二级索引同步给solr的组件,并且可以批量导入索引,增量同步索引,同步时延比较小,几乎近实时,好东西 Hbase表需要开启REPLICATION复制功能实现集群间的相互复制 创建表 create ‘test’... 阅读详情

【转载至http://sbp810050504.blog.51cto.com/2799422/1423199】


无论是垂直搜索,还是通用搜索引擎,对外提供搜索服务其压力都比较大,经常有垂直电商在做活动的时候服务器宕机。对面访问压力比较大的情况,一般的应对方法就是【集群】+【负载均衡】。Solr提供了两种解决方案来对应访问压力。其一是Replication,其一是SolrCloud。


Replication采用了master/slave  模式,用读写分离的思想来提高对外服务能力。但本质上还是单兵作战。Master/slave模式在数据库领域应用广泛,像MySQL,Redis等主流的数据库都实现这一功能。Replication的另一个功能就是数据备份。


SolrCloud采用Zookeeper作为配置中心,对索引数据进行分片(shard),实现了真正的分布式搜索。像Hadoop,HBase,Storm等分布式系统都是建立在Zookeeper基础之上的。


 

个人认为二者没有谁优谁劣,应用场景不同而已。


 

本文主要探究Replication的实现原理。


1. Replication的配置


Replication在solrconfig.xml中默认是关闭的,要打开很简单。对于Replication,首先需要确定Solr服务的角色。Solr服务的角色有三种[master],[slave],[repeater]。这三种角色的配置如下:


Master配置:



Slave配置:



Repeater配置:



Repeater就是一个solr服务器既是master,又是slave。为什么需要Repeater角色呢?我们试想,如果一个master服务器同时带上10个slave甚至100个slave,会出现什么情况?Master很容易就被累死了。就算不累死,网络带宽也会很容易被占用干净。假如我们需要4台的集群,但是每个master又只能带2台slave,通过repeater就很容易实现。



2. replication的工作原理


通过配置我们知道replication的功能是通过ReplicationHandler来实现的。通过以ReplicationHandler为切入口,应该能很容易地追溯到replication的运行过程。


2.1 slave端的运行过程


Solr在启动的过程中会通过ReplicationHandler.inform()方法,按照slave的配置启动一个定时任务,定时向master端发起同步请求。任务的代码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void startExecutorService() {
    Runnable task = new Runnable() {
      @Override
      public void run() {
        if (pollDisabled.get()) {
          LOG.info("Poll disabled");
          return;
        }
        try {
          executorStartTime = System.currentTimeMillis();
          replicationHandler.doFetch(null, false);
        } catch (Exception e) {
          LOG.error("Exception in fetching index", e);
        }
      }
    };
    executorService = Executors.newSingleThreadScheduledExecutor(
        new DefaultSolrThreadFactory("snapPuller"));
    long initialDelay = pollInterval - (System.currentTimeMillis() % pollInterval);
    executorService.scheduleAtFixedRate(task, initialDelay, pollInterval, TimeUnit.MILLISECONDS);
    LOG.info("Poll Scheduled at an interval of " + pollInterval + "ms");
  }



   定时任务的时间间隔是



slave端对master而言是透明的。换句话说,master与slave之间的通信是无状态的http连接。Slave端通过发送不同的command从Server端取得数据,即在数据同步的过程中,slave端是占主导作用的。这也是为什么最好先从slave端入手。


一次replicate操作关键步骤如下:



当然还会有细节的处理,比如系统缓存同步、数据校验,日志记录等等……处理全过程都是以SnapPuller.fetchLatestIndex()方法为主线进行的,如果跟踪源码,则重点关注该方法。

 

 

2.2 master端的运行过程


由于master端是被动的(即master接收slave端传递过来的命令,然后依照命令执行),所以master端的工作过程相对比较简单。值得注意的是,通过master端可以更好的理解solr索引更新的过程。


1.CMD_INDEX_VERSION 命令


通过该命令可以得到索引的latestVersion和latestGeneration。其中lastestVersion其实就是索引的更新时间点,而latestGeneration就是存储在SegmentInfos中的generation信息。通过这两个信息的对比,就可以判断出slave端的索引是否需要更新。


2. CMD_GET_FILE_LIST命令


通过该命令可以得到需要同步的索引文件信息。


3. CMD_GET_FILE 命令


通过该命令可以下载文件。该命令执行次数由文件大小和CMD_GET_FILE_LIST得到的文件数量决定。下载文件每次最多下载1M,如果文件大于1M,则分多次下载。数据正确性的校验由Adler32 算法来完成。关于Adler32算法,这里不细说。关于详细代码,可以参看DirectoryFileStream.write()方法。


综上,一次replication操作在master端的运行过程就是执行这三种命令的过程。






Apollo和autoware规划算法代码ros移植-路径规划可跑工程分享 Apollo6.0规划核心代码移植到Ros工程,可编译移植分享 阅读详情

相关推荐

阿里巴巴达摩院人工智能训练师(高级)

阿里巴巴达摩院人工智能训练师(高级)

huang0612123的博客 1万+

Scaling Solr(Solr的扩展)

关于Solr可以参考之前的博客或者百度一下。这里主要讲Solr的扩展,包括横向,纵向,以及深度扩展。   Javaeye的排版有问题,将就看吧 Solr的扩展(Scaling)   当你的索引数量越来越大,你会发现你的搜索响应时间变得更慢,索引新内容的时间也会越来越长,那么,到了做出一些改变的时候了,幸运的是,solr很好的考虑到了这些情况,你只需要改变你的配置...

chenyun1的专栏 272

告别城市峡谷定位漂移:手把手教你用PSINS仿真INS/NHC/ODO组合导航(附代码获取)

本文详细解析了INS/NHC/ODO组合导航系统在城市峡谷环境中的应用,通过PSINS平台实现精准定位。文章涵盖核心原理、环境搭建、算法实现及性能优化,帮助开发者解决GNSS信号中断时的定位漂移问题,提升自动驾驶系统在复杂环境中的可靠性。

weixin_30329623的博客 429

Solr Replication (Wiki)

Solr Replication 此文档描述Java实现的索引复制(备份),其基于HTTP工作并且包含在Solr1.4中。关于自Solr1.1以来基于ssh/rsync的备份功能的信息请参考CollectionDistribution. 注意对于Solr4.0中的SolrCloud,复制将以推送模式(push-style)完成,这种索引复制将不再需要。   特性 备份无需外部脚本; 只在

lzx1104的专栏 1086

[Unity_Plastic SCM小技巧] 使用 UnityYAMLMerge 工具合并场景和预制件文件

首先YAMLMerge工具其实并不局限于PlasticSCM,git也可以,它是内置在Editor内的一个更加智能的版本控制工具,只不过正常不会启用,他的目录在C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe(Unity Editor安装目录),MAC上:/Applications/Unity/Unity.app/Content...

unityofficial的博客 1142

基于PyTorch的BP神经网络PID控制器动态调参实战

本文详细介绍了基于PyTorch的BP神经网络PID控制器动态调参实战,结合BP神经网络的自适应能力和PID控制算法的经典优势,实现工业控制中的高效参数调整。通过PyTorch实现BP-PID融合架构,包括网络设计、损失函数优化及动态调参技巧,显著提升控制性能,适用于温度控制、电机控制等场景。

weixin_29094775的博客 520

Solr Replication命令

http://it.chinawin.net/softwaredev/article-c2bb.html   命令格式:http://[host]:[port]/solr/[core]/replication?command=[command  name] 1。details:显示当前实例Replication详细信息,包括:indexSize、indexPath、commits(index

woxiaoheia的专栏 1375

【Neo4j × Python】基于知识图谱的电影问答系统(含问题记录与解决)附:源代码(含Bug解决)

此前,曾介绍过Neo4j的一些基础知识,本篇将在PyCharm中与Neo4j建立关联,从0到1实现一个基于知识图谱的电影问答系统,实现过程中,没有一帆风顺,而是遇到了一些问题,因此也包含问题的记录与解决。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 3165

Solr集群Replication配置与实践

转自:http://blog.youkuaiyun.com/shirdrn/article/details/7055355 Solr作为一个搜索服务器,在并发搜索请求的场景下,可能一台服务器很容易就垮掉,这是我们可以通过使用集群技术,设置多台Solr搜索服务器同时对外提供搜索服务,在前端使用类似Nginx的负载均衡软件,可以通过配置使得并发到达的搜索请求均匀地反向代理到Solr集群中的每一台服务器上

ystyaoshengting的专栏 1057

4、Vitis_HLS、Vivado 和 Vitis IDE 工具的设置与使用

本文详细介绍了使用Vitis_HLS、Vivado和Vitis IDE进行FPGA开发的完整流程,涵盖开发板选择、软件安装、IP设计与模拟、综合、导出以及在FPGA上的实现与验证。以Xilinx Artix-7和Zynq系列开发板为例,指导用户从环境搭建到最终硬件验证,完成一个32位加法器IP的开发,适用于嵌入式系统和硬件加速项目的学习与实践。

fff88的博客 181

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

solr mysql原理_solr replication原理探究

无论是垂直搜索,还是通用搜索引擎,对外提供搜索服务其压力都比较大,经常有垂直电商在做活动的时候服务器宕机。对面访问压力比较大的情况,一般的应对方法就是【集群】+【负载均衡】。Solr提供了两种解决方案来对应访问压力。其一是Replication,其一是SolrCloud。Replication采用了master/slave模式,用读写分离的思想来提高对外服务能力。但本质上还是单兵作战。Master...

weixin_42535703的博客 227

OpenClaw实战系列04:Jira/Confluence深度集成实战指南

汇总 Confluence 空间 TEAM 下所有关于“性能优化”的文档,输出要点自然语言创建和查询 Jira 任务,无需离开聊天工具基于 Confluence 的私有知识库问答,让 AI 真正理解团队文档Jira 与 Confluence 联动,打通项目管理与知识管理定时同步与通知,自动化团队信息流转至此,你的 OpenClaw AI 助理已经不仅是一个聊天机器人,而是真正融入团队工作流的“智能项目管理助手”。下一期我们将带来OpenClaw 自定义技能开发实战。

PeterPan的博客 572

Solr Replication (复制) 索引和文件的工作机制

  Solr Replication (复制) 索引和文件的工作机制  (2011-11-02 17:40:23) 转载▼ 标签:  solr   replication   索引   文件   机制   it 分类: 架构与开发 1 Solr Replication(复制)是怎样工作的              luenc...

rongdmmap的博客 227

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

solr(8)Solr Index Replication

solr(8)Solr Index Replication 1. Introduction Index Replication The master will handle updates to the index, all querying is handled by the slaves. Master — Slave1, Slave2, Slave3. A Solr index...

快马扬鞭须努力! 791

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Solr集群Replication配置与实践(四)

Solr作为一个搜索服务器,在并发搜索请求的场景下,可能一台服务器很容易就垮掉,这是我们可以通过使用集群技术,设置多台Solr搜索服务器同时对外提供搜索服务,在前端使用类似Nginx的负载均衡软件,可以通过配置使得并发到达的搜索请求均匀地反向代理到Solr集群中的每一台服务器上,这样每台Solr搜索服务器搜索请求的压力可以大大减小,增强了每台服务器能够持续提供服务器的能力。 然而,这时我们面临的...

Super_man54188的博客 373

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

solr的replication设置

配置solr的主从replication,slave机器一定要设置masterUrl这个参数,但项目是做好索引后,发送命令给从机到master上拉索引,而不是slave定时检查master索引。索引有个取巧的方法,就是虽然设置了masterUrl参数,但不指定其值 [code="java"] [/code] 这样solr的slave启动时不会报错,而且能正...

BlackWing 459

Solr replication 使用EmbeddedSolrServer生成的索引

日前接到一个任务,就是在搜索服务器中使用solr replication功能, 这个功能是solr 3.1新加的,只需要在solrconfig.xml进行配置就可以进行replication,而我们原来的搜索服务器使用的是solr1.4, 它的replication功能是通过编写linux脚本来实现的。      按照replication的要求进行配置(这个可以在网上查到),重启两台服务器后,

663

Solr Replication 使用

Master配置 ------------ solrconfig.xml ----------              To enable simple master/slavereplication, uncomment one of the        sections below, depending on whetherthis solr instance should

lzx1104的专栏 811

solr的两种安装方式

安装模式 StandaloneSolrCloud 安装 yuminstall lucidworks-hdpsearchwget https://issues.apache.org/jira/secure/attachment/12761323/solr_for_audit_setup_v3.tgz-O /usr/local/solr_for_audit_s

smarthhl的专栏 2597
上一篇: openCMS学习资料
下一篇: 理解js中的原型链,prototype与__proto__的关系
「已注销」
博客等级 码龄12年 7粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值