zoukankan      html  css  js  c++  java
  • Solr4.0升级参考

    转载: http://wiki.fnil.net/index.php?title=Solr4.0%E5%8D%87%E7%BA%A7%E5%8F%82%E8%80%83

    声明

    • 本Wiki上的任何文字信息均在GNU自由文档许可证1.3或更高版本下发布,如果用于任何商业用途都需经本人同意。任何转载都请注明出处。
    • 本Wiki上的内容来自本人的学习笔记,来源可能包括原创、书籍、网页、链接等,如果侵犯了您的知识产权,请与本人联系,我将及时删除。
    • 我的联系方式 killme2008@gmail.com

    介绍

    最近负责solr集群的升级,从solr 3.x的一个shard集群升级到solr 4.0的cloud集群。

    Why

    Solr 4.0引入了SolrCloud功能,利用zookeeper做到全自动的分区、负载均衡,无需再人工做痛苦的shard切分,也不需要利用Haproxy或者Nginx做前端的负载均衡。索引添加和更新,会自动路由到正确的shard master做更新,并分布式同步到shard slave。查询会自动地从各个shard(shard内的master/slave也会做负载均衡)做查询并汇集结果。这是我们升级的主要动力。Solr 4.0还有一个NRT,近实时搜索的特性也是我们比较关注的。

    2shard4serverFull.jpg

    整个升级主要参考SolrCloud这篇文档。

    配置变更

    schema.xml

    schema.xml 必须加入_version_字段:

       <field name="_version_" type="long" indexed="true" stored="true" multiValued="false"/>
    

    solrconfig.xml

    • indexDefaults和mainIndex合并成indexConfig
    • 加入
       <luceneMatchVersion>LUCENE_CURRENT</luceneMatchVersion>
    

    选择你使用的lucene版本号。

    • 找到updateHandler,并加入updateLog,用于生成事务日志
         <updateLog>
         <str name="dir">${solr.data.dir:}</str>
         </updateLog>
    
    • 原来用于复制的replicationHandler可以简化成:
         <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
    
    • 添加/get handler:
         <requestHandler name="/get" class="solr.RealTimeGetHandler">
             <lst name="defaults">
               <str name="omitHeader">true</str>
             </lst>
          </requestHandler>
    
    • 如果没有添加admin handler,必须添加:
         <requestHandler name="/admin/" class="solr.admin.AdminHandlers" />
    

    solr.xml保持默认:

          <cores adminPath="/admin/cores"
    
       <updateRequestProcessorChain name="sample">
        <processor class="solr.LogUpdateProcessorFactory" />
        <processor class="solr.DistributedUpdateProcessorFactory"/>
        <processor class="my.package.UpdateFactory"/>
        <processor class="solr.RunUpdateProcessorFactory" />
       </updateRequestProcessorChain>
    
    • solr.DisMaxRequestHandler相关handler需要删除。
    • solr.AnalysisRequestHandler相关handler需要删除。

    启动

    1. 在第一次创建cloud集群的时候,第一个节点的启动必须特殊处理,启动参数类似(以多个core为例):

       #Startup the first node.
       export BASE_DIR=.
       export JVM_ARGS="-Xmx16G -Xms16G"
       export ZK_SERVERS="localhost:2181"
       export ZK_TIMEOUT=20000
       export SHARDS=2
       java $JVM_ARGS -Dbootstrap_conf=true -DzkHost=$ZK_SERVERS -DzkClientTimeout=$ZK_TIMEOUT -DnumShards=$SHARDS  -Dsolr.solr.home=$BASE_DIR -jar $BASE_DIR/start.jar 2>&1 >> $BASE_DIR/logs/solr.log &
    


    重要参数说明如下:

    • bootstrap_conf If you pass -Dbootstrap_conf=true on startup, each SolrCore you have configured will have it's configuration files automatically uploaded and linked to the collection that SolrCore is part of
    • zkHost 用到zookeeper集群服务器列表,逗号隔开
    • zkClientTimeout zookeeper client timeout
    • numShards 多少个分片,例如上面设置为两个分片
    • solr.solr.home solr目录,该目录下需有solr.xml,设定core(现在称为collection)列表,例如:
       <solr sharedLib="lib" persistent="true">
             <cores adminPath="/admin/cores" defaultCoreName="test1" host="${host:}" hostPort="${jetty.port:}" >
                   <core default="true" instanceDir="test1" name="test1"></core>
                   <core default="false" instanceDir="test2" name="test2"></core>
             </cores>
       </solr>
    

    设定了两个collection: test1和test2,他们的配置分别在$solr.solr.home/test1和$solr.solr.home/test2目录下。

    2. 当第一次创建集群的时候,第一个节点启动后会等待其他节点启动,因为要组成一个shard集群,必须至少有numShards个节点启动。

    3. 其他节点启动无需传入-Dbootstrap_conf=true和-DnumShards:

       java $JVM_ARGS -DzkHost=$ZK_SERVERS -DzkClientTimeout=$ZK_TIMEOUT -Dsolr.solr.home=$BASE_DIR -jar $BASE_DIR/start.jar 2>&1 >>$BASE_DIR/logs/solr.log &
    

    只需zookeeper相关参数就够了。

    4. 更健壮的启动脚本应该将solr作为daemon service开机启动。

  • 相关阅读:
    C++中的函数
    C++基本语句
    面向对象程序设计
    数据结构中的算法
    数据结构开篇
    条件编译
    文件包含
    简单的宏替换
    系统启动过程
    parted 命令学习
  • 原文地址:https://www.cnblogs.com/chenying99/p/2891273.html
Copyright © 2011-2022 走看看