`
wbj0110
  • 浏览: 1603895 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

solr索引分发

    博客分类:
  • Solr
阅读更多

从solr1.4开始支持基于java的以http方式分发索引
优点:
1.不再使用脚本,可以跨平台
2.不仅索引,还可以分发配置文件

配置
Master主机
<requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="master">
        <!--在'startup'和'commit'后分发,也可用'optimize'-->
        <str name="replicateAfter">startup</str>
        <str name="replicateAfter">commit</str>
        <!--这里写需要分发的配置文件,使用逗号分隔-->
        <str name="confFiles">schema.xml,stopwords.txt,elevate.xml</str>
    </lst>
</requestHandler>

注意:
1.如果你用了startup,最好也设置commit/optimize.否则分发只在solr startup时分发.
2.<str name="confFiles">solrconfig_slave.xml:solrconfig.xml,x.xml,y.xml</str>
 这个配置要求在主机本地文件solrconfig_slave.xml分发到仆机上时命名为solrconfig.xml
 没有指定的使用原名

Slave仆机
<requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="slave">
        <str name="masterUrl">http://localhost:port/solr/replication</str>
        <!--仆机查询主机索引是否可以分发的时间间隔.格式是HH:mm:ss.如果没有设置,仆机不会主动询问主机.
         但fetchindex还是可以从控制台或者http请求触发-->
        <str name="pollInterval">00:00:20</str>
        <!--是否压缩传输. 可选的值是internal|external。除非你的带宽慢,否则不要使用此项,实际上在局域网内这个会减慢速度-->
        <str name="compression">internal</str>
        <!--仆机连主机的超时设置,默认值分别是5000ms和10000ms.用户一般也不需要配置-->
        <str name="httpConnTimeout">5000</str>
        <str name="httpReadTimeout">10000</str>
        <!--http基于权限验证时需要的设置,一般不用配置-->
        <str name="httpBasicAuthUser">username</str>
        <str name="httpBasicAuthPassword">password</str>
     </lst>
</requestHandler>
配置连发
连发其实就是既做主机也做仆机,以1分2,2分4,4分8这样的方式分发索引.
一定要有replicateAfter为'commit'的设置,即便在主机里replicateAfter设置为optimize。
这是因为连发器在索引下载完后,只会调用一个commit.在仆机上Optimize根本就不会被调用

<requestHandler name="/replication" class="solr.ReplicationHandler">
    <lst name="master">
      <str name="replicateAfter">commit</str>
      <str name="confFiles">schema.xml,stopwords.txt,synonyms.txt</str>
    </lst>
    <lst name="slave">
      <str name="masterUrl">http://master.solr.company.com:8080/solr/replication</str>
      <str name="pollInterval">00:00:60</str>
    </lst>
  </requestHandler>
 
 
工作原理?
这个特性依赖于Lucene的IndexDeletionPolicy.在这个API中, Lucene把IndexCommits作为每次提交或优化的回调.
IndexCommit能提供和commit相关联的文件. 这样我们就能够识别那些文件需要分发.

仆机如何复制?
其实主机不知道仆机. 仆机持续的检测主机看当前主机的索引版本. 如果有更新的.就执行下面的步骤,
1.仆机确认相关文件列表. 然后下载文件.如果连接中断, 下载可以从出错的断点恢复.出错时会尝试重连5次.
2.文件先下载到临时目录. 所以主机或者仆机崩溃也不会带来什么影响.
3.下载完后,所有最新的文件被移到index目录并且保持文件的更新时间和主机相同.
4.最后在仆机上提交一个'commit'命令,然后新索引就被加载了

配置文件如何分发?
只有在solr实例的conf目录中的文件可以分发.
配置文件只能和新索引一同分发.
配置文件会通过校验和比较在主机和仆机是否相同.
配置文件也是先下载到临时目录然后移到conf目录. 旧的文件会被重命名并保存在同目录下. ReplicationHandler不能自动的清除旧文件.
下载结束,最少1个配置文件通过core重载,而不是通过commit命令.
If a replication involved downloading of at least one conf file a core reload is issued instead of a 'commit' command.

我在仆机加了文档或者仆机索引文件损坏了会如何?
如添加了文档,那么仆机就不再和主机同步.而且它也不会设法和主机同步,直到主机有更新的索引.
主机提交索引后,主仆机的索引版本就不同了.仆机获取文件列表找到那些文件(same name)和本地在大小/时间戳伤是不同的.
当主仆机不兼容时,仆机拷贝所有主机来的文件到一个新的索引目录然后要求core加载此新目录中的索引。

HTTP API
这些命令可以通过http的方式调用
得到索引版本. http://host:port/solr/replication?command=indexversion
停止分发: http://slave_host:port/solr/replication?command=abortfetch
对提交的索引数据创建备份,没有提交的索引的话什么都不做: http://master_host:port/solr/replication?command=backup
在仆机上强制fetchindex,这个命令可以使用扩展的属性 例如:'masterUrl'  'compression': http://slave_host:port/solr/replication?command=fetchindex
设置仆机不允许轮询: http://slave_host:port/solr/replication?command=disablepoll
设置仆机允许轮询: http://slave_host:port/solr/replication?command=enablepoll
得到配置和状态的详细信息: http://slave_host:port/solr/replication?command=details
得到指定索引中的lucene文件列表: http://host:port/solr/replication?command=filelist&indexversion=<index-version-number>
设置主机不允许分发: http://master_host:port/solr/replication?command=disablereplication
设置主机允许分发: http://master_host:port/solr/replication?command=enablereplication

 

在我们的具体使用中,不配置轮询,而是在主机做完索引后,使用http api方式通知仆机来取索引。这种方式更灵活,可以控制同时取索引的仆机的数量,避免主机高负载。而且可以通知对fetchindex的仆机,可以先通知nginx停止对它的查询分发,避免仆机高负载。

分享到:
评论

相关推荐

    Solr项目源码及solr资源包

    10. **实战演练**:通过这个项目,你可以学习如何创建Solr索引,如何编写Solr查询,如何使用Spring Data Solr进行数据的增删改查,以及如何优化搜索性能。 通过深入研究和实践这个“Solr项目源码及solr资源包”,...

    solr-4.10.3.rar

    6. **性能优化**:Solr提供了多种优化策略,如利用NRT(Near Real Time)机制实现快速搜索更新,通过Shard路由策略分发查询负载,以及通过缓存机制提高响应速度。 7. **扩展性**:Solr支持多种插件机制,可以扩展其...

    apache solr guide 4.7

    - **索引**: Solr 如何构建和维护索引的过程。 - **基本数据操作**: 包括文档的添加、删除、更新等基本操作。 - **索引优化**: 提高索引性能的技术手段。 #### 八、总结 Apache Solr 4.7 是一个强大的全文检索系统...

    solr教材-PDF版

    - 描述了Solr如何通过主从架构实现数据的复制和分发,从而提高系统的可用性和容错性。 #### 二、Solr的安装与配置 **2.1 在Tomcat下Solr安装** - **2.1.1 安装准备**:介绍安装前需要准备的软件环境和硬件要求。 ...

    solr文档.docx

    - 将配置好的Solr文件夹打包并分发到其他三台Solr服务器上。 **5. 启动Solr服务** - 启动Solr服务后,可以通过以下URL访问Solr: ``` http://192.168.172.130:8983/solr/index.html ``` **6. 配置Solr Core** ...

    Solr6.2官方版参考手册

    - **数据组织**: Solr 如何组织其用于索引的数据,重点介绍文档、字段以及模式设计的概念。 - **模式定义**: 深入解析 Solr 模式文件,它定义了用于组织数据的字段及其类型,这对于理解 Solr 如何存储和检索数据至关...

    lucene简单介绍及solr搭建使用

    5. **导入数据**:使用Solr的Update API或SolrCloud的索引分发机制,将数据导入到Solr中进行索引。 6. **配置和优化**:根据业务需求调整Solr的配置,例如设置缓存策略、优化查询性能等。 **全文搜索** 全文搜索是...

    solr-4.10.3.tgz.tgz

    "精选简历" 和 "海量简历" 这两个文件名可能是示例数据或者模板,可能用于演示如何向Solr索引和查询简历类的文档,这对于人力资源管理系统或招聘网站来说是一个常见的应用场景。 "【额外赠送】" 这个文件名看起来像...

    solr技术文solr技术文

    6. **复制和故障转移**:Solr有实时复制功能,可以将一个索引副本分发到其他节点,确保数据安全。当主节点故障时,可以无缝切换到备份节点,保证服务连续性。 7. ** faceting(分面)搜索**:分面搜索是Solr的一个...

    solr-4.10.3.zip

    通常,一个完整的Solr分发版会包含以下部分: 1. **bin**:包含启动和停止Solr服务器的脚本,以及与Solr交互的命令行工具。 2. **dist**:包含Solr的JAR文件和其他依赖库,用于运行Solr实例。 3. **example**:提供...

    solr-4.5源码包

    3. `dist`:包含了Solr的可执行jar包和其他分发文件,供部署使用。 4. `src`:源代码目录,包含了所有Java源码,是研究和定制Solr功能的关键部分。 5. `contrib`:这里包含了各种社区贡献的模块,例如数据分析器、...

    solr新版参考手册(apache-solr-ref-guide-4.4)

    Solr可以处理各种类型的数据,并且支持全文搜索、高亮、实时索引以及自动故障恢复等多种功能,它被广泛用于企业级搜索解决方案中。本篇参考手册是针对Apache Solr 4.4版本的详细介绍,包含了从安装、配置到使用的...

    一键安装伪分布式zk集群-solr集群脚本

    9. 分发和启动Solr实例:将Solr核心分发到多个“节点”,并在每个节点上启动。 这个自动化脚本极大地简化了安装过程,但用户仍需要对Zookeeper和Solr的基本概念有一定了解,以便于理解和调试可能出现的问题。在实际...

    solr-8.6.3.zip

    - **dist**:存放Solr的JAR文件和其他分发文件。 - **example**:是一个预配置的示例,帮助新手快速上手Solr。 要运行Solr,你需要在命令行中导航到`bin`目录,并运行启动脚本。然后,你可以通过浏览器访问`...

    solr6.6.2的完整的包

    7. **配置管理**: 在Solr 6.6.2中,可以通过Zookeeper集中管理和分发配置,方便集群中的配置更新和一致性维护。 8. **API支持**: 提供HTTP RESTful API接口,支持XML、JSON、CSV等多种格式,方便与其他系统集成。 ...

    zookeeper-solr集群

    - 在SolrCloud环境中,你可以通过Zookeeper管理索引的创建和分发。创建一个新的索引集合,定义Shards和Replication Factor,SolrCloud会自动处理索引的分布和复制。 6. **监控和管理**: - 通过Solr的Admin UI...

    solr全部jar包

    这些jar包是Solr功能实现的基础,涵盖了从索引建立、查询处理到结果排序等多个关键环节。 首先,我们要理解什么是JAR(Java Archive)文件。JAR文件是Java平台特有的归档格式,用于集合多个类文件、资源文件以及元...

    solr7.4集群安装

    通过Zookeeper,这个configset会被分发到集群中的所有节点。 然后,启动Zookeeper集群,确保所有节点都正常运行并且可以互相通信。在每个Solr服务器上启动Solr进程,并指定Zookeeper集群的位置。Solr会连接到...

Global site tag (gtag.js) - Google Analytics