solrJe mehr Daten man sammelt, umso aufwändiger wird auch das Indexieren. Eine gute Möglichkeit das Problem anzugehen ist das Open Source Projekt Solr von Apache. Solr ist in Java geschrieben und läuft in einem servlet container wie zum Beispiel Jetty. Mit einer API die stark an REST angelehnt ist wird es einem sehr einfach gemacht, Daten abzufragen oder einzufügen. Die Ergebnisse bekommt man entweder als XML oder JSON. Wer seine relationale Datenbank weiterhin behalten will, kann seine Daten auch einfach in Solr importieren, denn die nötigen Handler sind dafür bereits vorgesehen. Solr ist also besonders interessant für Online-Shops mit vielen Produkten, zudem die Volltextsuche auch sehr gut und schnell funktioniert. Ein zusätzliches “Killer-Feature” ist die SolrCloud Funktion. In Zusammenarbeit mit Zookeeper lässt sich damit eine Umgebung aufbauen, die linear skaliert. Durch die Möglichkeit Collections und Shards zu benutzen lässt sich die Umgebung auch in einzelne Teile trennen.
Installation
Die Installation von einer einzelnen Solr Instanz ist sehr einfach gehalten. Nach dem Download steht ein  Verzeichnis example zur Verfügung, in dem sich alles für einen ersten Start findet. Im Handumdrehen läuft also so schon der erste Server:

root@localhost:/example# java -jar start.jar

Erreicht werden kann der Server über das mitgelieferte Webinterface http://localhost:8983/solr. Über dieses Interface bekommt man Infos über den aktuellen Status des Servers, der Solr-Cloud, dem Replikationsstatus und vielen anderen Fuktionen . Abfragen lassen sich ebenfalls hier machen, was sich besonders in Testszenarien bewährt.
Weil so ein Solr-Server ohne Daten nicht viel Nutzen bringt, werden auch passende Scripte mitgeliefert mit denen man Daten importieren kann.

root@localhost:/example/exampledocs# ./post.sh monitor.xml

Für die Queries wird ein Subset der Lucene Query Syntax benutzt. Eine Abfrage die nur den Preis für Produkte anzeigt die den Namen “monitor” beinhalten, könnte dann zum Beispiel so aussehen: http://localhost:8983/solr/collection1/select?name=monitor&wt=json&fl=price
Zookeeper
zookeeperZookeeper ist auch ein Tool aus dem Hause Apache. Es kümmert sich darum Konfigurationen auf einezlne Nodes zu verteilen. Bevor es das aber tun kann muss man erst mal Konfigurationen hochladen. Zookeeper lässt sich als Standalone oder im Cluster betreiben. Will man zweiteres, muss man beachten das dazu mindestens 3 Server benötigt werden. Andernfalls würde kein Quorum gebildet werden können, was Zookeeper dazu veranlasst nicht zu laufen. Die Installation ist prinzipiell relativ simpel, da alles mitgeliefert wird was man braucht. Es muss nur noch eine Konfiguration angelegt werden, die zum Beispiel so aussehen kann:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=192.168.1.10:2888:3888
server.2=192.168.1.11:2888:3888
server.3=192.168.1.13:2888:3888

Diese Konfiguration ist auf allen Servern gleich. Damit aber jeder Server weis welcher er von den dreien ist, wird in der Datei /var/lib/zookeeper/myid einfach die jeweilige ID festgelegt. Mit dem mitgelieferten zkServer.sh-Skript lässt sich der Prozess dann überall starten. Solr beherrscht von Haus aus die Kommunikation mit Zookeeper und muss daher nur noch mit den richtigen Parametern gestartet werden:

java -Dbootstrap_confdir=/opt/solr/collection1/conf -Dcollection.configName=myconf -DnumShards=1 -DzkHost=192.168.1.10:2181,192.168.1.11:2181,192.168.1.12:2181 -jar start.jar

Und fertig ist die erste eigene Solr Cloud. Wer sich mit Jetty nicht ganz anfreunden kann, kann natürlich auch einen anderen servlet container wie Tomcat benutzen.

Blerim Sheqa
Blerim Sheqa
Product Manager

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als Product Manager für Icinga tätig und kümmert sich dort auch um die Partner.