SolrCloud auf Docker

SolrCloud auf Docker Dies ist ein Folgeartikel zu meinem Beitrag Solr auf Docker. Diesmal verwenden wir einen eigenständigen ZooKeeper-Knoten und…

SolrCloud auf Docker

Dies ist ein Folgeartikel zu meinem Beitrag Solr auf Docker. Diesmal verwenden wir einen eigenständigen ZooKeeper-Knoten und drei SolrCloud-Knoten, alle in ihren eigenen Docker-Containern.

Docker Version 0.7, Build 0d078b6, auf Ubuntu 13.04.

ZooKeeper

Die aktuelle Version von ZooKeeper ist 3.4.5, und es gibt ein docker-zookeeper-Projekt, das diese Version in einer Einzelknoten-Konfiguration ausführt.
Wenn wir das in einer Instanz namens „zookeeper“ erstellen und ausführen:

cd ~
mkdir zookeeper-docker
cd zookeeper-docker
wget https://raw.github.com/jplock/docker-zookeeper/master/Dockerfile
docker build -t makuk66/zookeeper:3.4.5 .
...
Successfully built 26871fd90d0c

docker run -name zookeeper -p 2181 -p 2888 -p 3888 makuk66/zookeeper:3.4.5

Wir sehen, dass ZooKeeper gestartet wird, und nach ein paar Sekunden können wir überprüfen, ob er zufrieden ist:

$ echo ruok | nc -q 2 localhost `docker port zookeeper 2181|sed 's/.*://'`; echo
imok

SolrCloud: Verteiltes Solr

Die aktuelle Version von Solr ist 4.6.0, also laden wir diese herunter:

cd ~
mkdir solr-docker
cd solr-docker
wget http://www.mirrorservice.org/sites/ftp.apache.org/lucene/solr/4.6.0/solr-4.6.0.tgz

Diese lokal zwischengespeicherte Kopie wird dem Docker-Container zur Erstellungszeit hinzugefügt.

Erstellen Sie eine Docker-Datei:

cat > Dockerfile <<'EOM'
#
# VERSION 0.2

FROM    ubuntu
MAINTAINER  Martijn Koster "mak-docker@greenhills.co.uk"

ENV SOLR solr-4.6.0
RUN mkdir -p /opt
ADD $SOLR.tgz /opt/$SOLR.tgz
RUN tar -C /opt --extract --file /opt/$SOLR.tgz
RUN ln -s /opt/$SOLR /opt/solr

RUN apt-get update
RUN apt-get --yes install openjdk-6-jdk
EXPOSE 8983
CMD ["/bin/bash", "-c", "cd /opt/solr/example; java -jar start.jar"]
EOM

und bauen:

docker build -rm=true -t makuk66/solr4:4.6.0 .

wobei makuk66 mein Benutzername ist; ersetzen Sie Ihren eigenen.

Wenn Sie Ihr eigenes Image nicht erstellen möchten, können Sie makuk66/docker-solr ziehen und makuk66/docker-solr anstelle von makuk66/solr4:4.6.0 unten verwenden.

Jetzt führen wir dies manuell mit Docker im Vordergrund aus.
Der erste Knoten bootet die Sammlung (wie das SolrCloud Beispiel A):

docker run -link zookeeper:ZK -i -p 8983 -t makuk66/solr4:4.6.0
    /bin/bash -c 'cd /opt/solr/example; java -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkHost=$ZK_PORT_2181_TCP_ADDR:$ZK_PORT_2181_TCP_PORT -DnumShards=2 -jar start.jar'

Die -link zookeeper:ZK stellt die Netzwerkinformationen des Knotens namens „zookeeper“
als Umgebungsvariablen mit dem Präfix ZK_ zur Verfügung.

und dann fangen die anderen beiden so an:

docker run -link zookeeper:ZK -i -p 8983 -t makuk66/solr4:4.6.0
    /bin/bash -c 'cd /opt/solr/example; java -DzkHost=$ZK_PORT_2181_TCP_ADDR:$ZK_PORT_2181_TCP_PORT -jar start.jar'

Um alle laufenden Container anzuzeigen:

$ docker ps
CONTAINER ID        IMAGE                     COMMAND                CREATED              STATUS              PORTS                                                                       NAMES
1cac635ec128        makuk66/solr4:4.6.0       /bin/bash -c cd /opt   3 seconds ago        Up 2 seconds        0.0.0.0:49158->8983/tcp                                                     prickly_mccarthy
bd23d3891dd6        makuk66/solr4:4.6.0       /bin/bash -c cd /opt   5 seconds ago        Up 4 seconds        0.0.0.0:49157->8983/tcp                                                     high_albattani
365a17a69176        makuk66/solr4:4.6.0       /bin/bash -c cd /opt   About a minute ago   Up About a minute   0.0.0.0:49156->8983/tcp                                                     elegant_bardeen
13805a493a79        makuk66/zookeeper:3.4.5   /opt/zookeeper-3.4.5   25 minutes ago       Up 25 minutes       0.0.0.0:49153->2181/tcp, 0.0.0.0:49154->2888/tcp, 0.0.0.0:49155->3888/tcp   elegant_bardeen/ZK,high_albattani/ZK,prickly_mccarthy/ZK,zookeeper

Wir können nun einen der freigelegten Ports verwenden, um Solr zu betrachten: http://docker1:49159/solr/#/~cloud,
, der die 3 Solr-Knoten im Cluster zeigt, die auf ihren eigenen internen IP-Adressen laufen. Toll.

Natürlich werden wir nicht glauben, dass es echt ist, wenn wir die Suche nicht in Aktion sehen.
Lassen Sie also eine weitere Docker-Instanz laufen, um einige Daten zu laden, indem Sie den Docker-Host-Port für einen der oben genannten Knoten verwenden:

docker run -link zookeeper:ZK -i -t makuk66/solr4:4.6.0 /bin/bash
cd /opt/solr/example/exampledocs
java -Durl=http://192.168.0.221:49158/solr/update -jar post.jar *.xml

und suchen:

apt-get install wget
wget -O - 'http://192.168.0.221:49158/solr/collection1/select?q=solr&wt=xml'

können Sie das Gleiche direkt mit der internen Adresse tun, die Sie mit inspect finden können:

docker inspect prickly_mccarthy
wget -O - 'http://172.17.0.37:8983/solr/collection1/select?q=solr&wt=xml'

Sie können die Scherben in Aktion sehen, indem Sie vergleichen:

wget -O - 'http://192.168.0.221:49158/solr/collection1/select?q=*:*&wt=xml' | sed 's/.*numFound="//' | sed 's/".*//'
32
wget -O - 'http://192.168.0.221:49158/solr/collection1/select?q=*:*&wt=xml&shards=shard1' | sed 's/.*numFound="//' | sed 's/".*//'
14
wget -O - 'http://192.168.0.221:49158/solr/collection1/select?q=*:*&wt=xml&shards=shard2' | sed 's/.*numFound="//' | sed 's/".*//'
18

Auch interessant zu probieren ist:

docker diff prickly_mccarthy

um zu sehen, welche Änderungen am Dateisystem vorgenommen wurden.

Weitere Arbeiten

Wir können hier noch eine Menge nachbessern:

  • sollten wir in der Lage sein, Bilder zu erstellen, anstatt Befehlszeilen anzugeben
  • um die Koexistenz mehrerer Cluster auf einem einzigen Docker-Host zu ermöglichen, sollten wir etwas Dynamischeres als ein ‚ZK‘-Präfix verwenden
  • es wäre schön, wenn wir ein einziges Skript hätten, das einen ganzen Cluster bereitstellt
  • wir sollten wahrscheinlich Data Volumes für die Indexspeicherung verwenden
  • wir wollen vielleicht Supervisord/Upstart, um Java zu überwachen, damit es sich von Abstürzen erholt
  • es wäre schön, die neuesten Versionen von ZooKeeper und Solr automatisch zu erkennen und diese zu verwenden
  • wenn wir Container registrieren, könnten wir in Erwägung ziehen, die Solr .war vorab zu expandieren, um den Start zu beschleunigen und die Unterschiede zu verringern

aber das hängt alles ein wenig vom Anwendungsfall ab und ist ein Thema für einen anderen Tag.

Fazit

Ich kann den Wert dieses Ansatzes für bestimmte Anwendungsfälle wirklich erkennen.
Die Ressourceneffizienz, die Startgeschwindigkeit und die Sauberkeit machen es ideal für Proof-of-Concept-Einsätze, A/B-Tests,
und für Anwendungsentwickler, die es als lokale Sandbox verwenden.

Ich bin neugierig, wie diese Art von Einrichtung in der Produktion eingesetzt werden kann. Es ist offensichtlich für
mandantenfähige Bereitstellungen geeignet, und mich würde interessieren, wie Sie eine SolrCloud-Bereitstellung
über mehrere Docker-Hosts einrichten könnten.

You Might Also Like

Analytics Studio: Verwandeln Sie Ihre E-Commerce-Daten in verwertbare Einblicke

Entdecken Sie, wie Analytics Studio Teams in die Lage versetzt, datengestützte Entscheidungen...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links

Diese Site ist auf wpml.org als Entwicklungssite registriert. Wechseln Sie zu einer Produktionssite mit dem Schlüssel remove this banner.