Wozu brauch man eigentlich den Solr PingRequestHandler? Diese Frage wird oft gestellt, denn um den Status eines SolrCore zu ermitteln kann man auch eine „normale“ Suchanfrage absetzen und das Ergebnis auswerten. Der PingRequestHandler wird im Allgemeinen unterschätzt. In diesem Blog werde ich auf PingRequestHandler und seinen Einsatz genauer eingehen.
Der PingRequestHandler
JA, der PingRequestHandler prüft den Status eines SolrCores. JA, dies tut der PingRequestHandler, in dem er eine Suche absetzt.
Aber, das ist, wie bereits erwähnt, noch nicht alles. PingRequestHandler kann eingesetzt werden, um einen SolrCore zu deaktivieren, ohne dabei den Solr herunterzufahren oder gar ein Core mit dem UNLOAD Befehl zu löschen. Wird der SolrCore auf diese Weise deaktiviert, ist er weiterhin im Speicher enthalten und verbraucht Ressourcen. Trotz des inaktiven Status kann man weiterhin Suchen, Indexieren etc. Der Vorteil dieser Variante ist, dass man diesen Core ebenso schnell wieder aktivieren kann, um beispielsweise ein Hot-Standby umzusetzen.
Die Konfiguration
Neben den üblichen Parametern, wie beispielsweise q, gibt es für den PingRequestHandler den Parameter „healthcheckFile“. Dieser spezifiziert eine Datei, die bei der Statusabfrage von einem SolrCore ebenfalls berücksichtigt wird. Existiert diese Datei, ist der SolrCore verfügbar; existiert die Datei nicht, ist er wiederrum nicht verfügbar. Die nachfolgende Konfiguration des PingRequestHandler zeigt ein Beispiel mit dem Parameter „healthcheckFile“:
<!-- ping/healthcheck --> <requesthandler name="/admin/ping" class="solr.PingRequestHandler"> <lst name="defaults"> <str name="q">solrpingquery</str> <str name="echoParams">all</str> <str name="healthcheckFile">corer-enabled.txt</str> </lst> </requesthandler>
Der PingRequestHandler bietet zusätzlich die Funktionalität zwischen den Stati enabled und disbaled umzuschalten. Folgende Befehle ändern den Status des SolrCore, in dem die „healthcheckFile“ angelegt oder gelöscht wird.
- aktiv: https://localhost:8983/solr/admin/ping?action=enable – erstellt die Datei für die Statusabfrage, wenn sie noch nicht existiert
- inaktiv: https://localhost:8983/solr/admin/ping?action=disable – löscht die Datei für die Statusabfrage, wenn die Datei vorhanden ist.
Hot Standby
Mit den gegeben Möglichkeiten kann man sich nun folgendes Szenario vorstellen. Es existieren zwei Solr Server; beide laufen, aber einer wurde über den oben beschriebenen Mechanismus als inaktiv gekennzeichnet. Ein Suchportal spricht einen Load Balancer an, der den Status vom Solr Server mit folgendem Befehl prüft:
- https://localhost:8983/solr/SOLRCORE/admin/ping?action=status
Vom Load Balancer werden nur aktive Solr Instanzen für die Suche eingebunden, d.h. der Inaktive Server bekommt keine Requests. Wenn nun das Query-Volumen steigt, kann man den zweiten Server aktivieren und somit kann der Load Balancer die Anfragen auf mehr Server verteilen.
Da man auch bei „inaktiven“ Servern weiterhin indexieren kann bzw. die Replikation funktioniert, gibt es auch kein Problem mit der Datenaktualität.
Fazit
Der PingRequestHandler ist weit mehr als nur ein Handler zum Prüfen vom Status eines SolrCore. Er kann genutzt werden um SolrCores zu aktivieren bzw. zu deaktivieren. Dies erfordert jedoch noch etwas manuellen Aufwand außerhalb des Solr, wie zum Beispiel in einem Load Balancer.