为负载均衡器运行状况检查提供的/ admin / ping solr的默认配置与Amazon elb负载均衡器运行状况检查很好地集成。
然而,由于我们在配置新节点时使用主从复制,因此solr启动并进行复制,但同时/ admin / ping在索引从主服务器复制之前返回成功并且存在文档。
我们希望节点只有在完成第一次复制并拥有文档后才能生效。我没有看到使用/ admin / ping PingRequestHandler执行此操作的任何方法 - 如果搜索成功,它总是返回成功,即使结果为零也是如此。
无论如何在响应中使用elb运行状况检查配置匹配/不匹配预期文本。
任何想法如何实现这一目标?
答案 0 :(得分:6)
为了扩展问题的本质,PingRequestHandler将始终返回成功,除非....
因此我建议您配置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
(可选,视您的严格程度而定)可以配置运行状况检查文件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
我喜欢这种方法(理论上)是能够检查多个内核的复制状态/成功的能力。如果有人发现这种方法的实际实现,请告诉我!