solr healthcheck为> 0文件

时间:2011-08-30 13:31:37

标签: solr amazon load-balancing

为负载均衡器运行状况检查提供的/ admin / ping solr的默认配置与Amazon elb负载均衡器运行状况检查很好地集成。

然而,由于我们在配置新节点时使用主从复制,因此solr启动并进行复制,但同时/ admin / ping在索引从主服务器复制之前返回成功并且存在文档。

我们希望节点只有在完成第一次复制并拥有文档后才能生效。我没有看到使用/ admin / ping PingRequestHandler执行此操作的任何方法 - 如果搜索成功,它总是返回成功,即使结果为零也是如此。

无论如何在响应中使用elb运行状况检查配置匹配/不匹配预期文本。

任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:6)

为了扩展问题的本质,PingRequestHandler将始终返回成功,除非....

  1. 其查询会导致抛出异常。
  2. 配置为使用运行状况检查文件,找不到该文件。
  3. 因此我建议您配置PingRequestHandler处理程序以使用运行状况检查文件。然后,您可以在Solr系统上使用cron作业,其作业是检查文档是否存在,并相应地创建(或删除)运行状况检查文件。如果健康检查文件不存在,PingRequestHandler将抛出一个足够ELB的HTTP 503。

    我使用的粗略算法......

    • 每分钟,查询http://localhost:8983/solr/select?q=*:*
    • 如果numDocs > 0touch /path/to/solr-enabled
    • 其他rm /path/to/solr-enabled(可选,视您的严格程度而定)

    可以配置运行状况检查文件in the <admin> block,并且可以使用绝对路径或相对于已启动Solr的目录的文件名。

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

    让我知道这是怎么回事!我很想在Websolr处为读取奴隶实现类似的东西。

答案 1 :(得分:0)

我在这里遇到了一个有趣的解决方案:https://jobs.zalando.com/tech/blog/zookeeper-less-solr-architecture-aws/?gh_src=4n3gxh1

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

我正在尝试一个更复杂的解决方案,但尚未对其进行测试/没有取得太大进展:https://gist.github.com/er1c/e261939629d2a279a6d74231ce2969cf

我喜欢这种方法(理论上)是能够检查多个内核的复制状态/成功的能力。如果有人发现这种方法的实际实现,请告诉我!