Je 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
Zookeeper 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.
0 Kommentare