solr healthcheck for>;0文档

solr healthcheck for>;0文档,solr,amazon,load-balancing,Solr,Amazon,Load Balancing,为负载平衡器健康检查提供的solr的默认配置/admin/ping与Amazon elb负载平衡器健康检查很好地集成 但是,由于我们在提供新节点时使用主从复制,所以solr启动并进行复制,但同时/admin/ping会在索引从主节点复制到有文档之前返回成功 我们希望节点只在完成第一次复制并拥有文档后才可以使用。我看不到任何使用/admin/ping PingRequestHandler的方法——如果搜索成功,它总是返回成功,即使结果为零 响应中也没有与elb健康检查配置匹配/不匹配的预期文本 如

为负载平衡器健康检查提供的solr的默认配置/admin/ping与Amazon elb负载平衡器健康检查很好地集成

但是,由于我们在提供新节点时使用主从复制,所以solr启动并进行复制,但同时/admin/ping会在索引从主节点复制到有文档之前返回成功

我们希望节点只在完成第一次复制并拥有文档后才可以使用。我看不到任何使用/admin/ping PingRequestHandler的方法——如果搜索成功,它总是返回成功,即使结果为零

响应中也没有与elb健康检查配置匹配/不匹配的预期文本


如何实现这一点,您有什么想法吗?

要进一步说明问题的本质,PingRequestHandler将始终返回成功,除非

  • 其查询导致引发异常
  • 它配置为使用healthcheck文件,但找不到该文件
  • 因此,我的建议是将PingRequestHandler处理程序配置为使用healthcheck文件。然后,您可以在Solr系统上使用cron作业,其任务是检查文档是否存在,并相应地创建(或删除)healthcheck文件。如果healthcheck文件不存在,那么
    PingRequestHandler
    将抛出一个HTTP 503,它应该足以支持ELB

    我会使用的粗略算法

    • 每分钟,查询
      http://localhost:8983/solr/select?q=*:*
    • 如果
      numDocs>0
      触摸/路径/到/solr启用
    • Else
      rm/path/to/solr已启用(可选,取决于您的严格程度)
    可以配置healthcheck文件,并且您可以使用绝对路径,或者相对于启动Solr的目录的文件名

    <admin>
      <defaultQuery>solr</defaultQuery>
      <pingQuery>q=*:*</pingQuery>
      <healthcheck type="file">/path/to/solr-enabled</healthcheck>
    </admin>
    

    我在这里遇到了一个有趣的解决方案:

    它基本上是一个servlet,您可以将它添加到Solr
    webapp
    ,然后检查所有核心,确保它们都有文档

    我正在玩弄一个更复杂的解决方案,但尚未对其进行测试/取得很大进展:


    我喜欢这种方法(理论上)的地方是能够检查多个核心的复制状态/成功。如果有人发现这种方法的实际实现,请让我知道

    非常感谢,这看起来像是一张罚单。我找到了另一个选项-使用SolrCloud,shard size==1,其余的都是复制品。对复制副本的任何索引请求都将代理给先导,任何读取都将由复制副本处理