为负载平衡器健康检查提供的solr of /admin/ping的默认配置与Amazon ELB负载平衡器健康检查集成良好。
但是,由于我们在调配新节点时使用的是主从复制,Solr启动,复制发生,但同时/admin/ping在索引从主节点复制到另一个节点并存在文档之前返回成功。
我们希望节点只有在完成第一次复制并拥有文档后才能被激活。我看不出有任何方法可以通过/admin/ping PingRequestHandler实现这一点--如果搜索成功,它总是返回成功,即使没有结果。
响应中的预期文本与ELB运行状况检查配置也不匹配/不匹配。
我们如何才能做到这一点?
2条答案
按热度按时间wlzqhblo1#
为了详细说明问题的本质,PingRequestHandler将始终返回成功,除非......
1.它的查询将导致引发异常。
1.它配置为使用运行状况检查文件,但找不到该文件。
因此,我的建议是配置PingRequestHandler处理程序以使用healthcheck文件,然后在Solr系统上使用cron作业,该作业的任务是检查文档是否存在,并相应地创建(或删除)healthcheck文件,如果healthcheck文件不存在,
PingRequestHandler
将抛出HTTP 503,这对于ELB应该足够了。我使用的粗略算法是...
http://localhost:8983/solr/select?q=*:*
numDocs > 0
,则touch /path/to/solr-enabled
rm /path/to/solr-enabled
(可选,取决于您的严格程度)healthcheck文件可以在
<admin>
块中配置,您可以使用绝对路径,也可以使用相对于启动Solr的目录的文件名。让我知道它是如何工作的!我很想在Websolr上为读从实现类似的东西。
9gm1akwq2#
我遇到了一个有趣的解决方案:https://jobs.zalando.com/tech/blog/zookeeper-less-solr-architecture-aws/?gh_src=4n3gxh1
它基本上是一个servlet,您可以将其添加到Solr
webapp
中,然后检查所有核心以确保它们具有文档。我正在考虑一个更复杂的解决方案,但还没有测试/取得很大进展:https://gist.github.com/er1c/e261939629d2a279a6d74231ce2969cf
我喜欢这种方法(理论上)是能够检查多核复制状态/成功。如果有人发现这种方法的实际实现,请告诉我!