设为首页 收藏本站
查看: 1033|回复: 0

[经验分享] solr索引分发

[复制链接]

尚未签到

发表于 2016-12-15 06:30:51 | 显示全部楼层 |阅读模式
  从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停止对它的查询分发,避免仆机高负载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314288-1-1.html 上篇帖子: tomcat 集成solr+paoding or Ikanalyer 下篇帖子: solr facet是个好东东
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表