solr healthcheck为> 0个文档

bee*_*bee 3 amazon solr load-balancing

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

但是,由于我们在配置新节点时使用主从复制,因此solr启动并进行复制,但同时/ admin/ping返回成功,然后索引从master复制并且有文档.

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

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

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

Nic*_*zny 6

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

  1. 它的查询导致抛出异常.
  2. 它配置为使用运行状况检查文件,但找不到该文件.

因此,我的建议是您配置PingRequestHandler处理程序以使用运行状况检查文件.然后,您可以在Solr系统上使用cron作业,其作业是检查文档是否存在,并相应地创建(或删除)运行状况检查文件.如果不存在运行状况检查文件,PingRequestHandler则将抛出一个足够用于ELB的HTTP 503.

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

  • 每一分钟,查询 http://localhost:8983/solr/select?q=*:*
  • 如果numDocs > 0那么touch /path/to/solr-enabled
  • 否则rm /path/to/solr-enabled(可选,取决于您的严格程度)

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

<admin>
  <defaultQuery>solr</defaultQuery>
  <pingQuery>q=*:*</pingQuery>
  <healthcheck type="file">/path/to/solr-enabled</healthcheck>
</admin>
Run Code Online (Sandbox Code Playgroud)

让我知道这是如何工作的!我很想在Websolr上为read slave实现类似的东西.