Bild-Schulung-Solr-in-a-Nutshell

Tipp – Mehrere Collections in einer SolrCloud verwalten

Die meisten Konfigurationen und Beispiele zur SolrCloud, die man in der Literatur findet, gehen davon aus, dass man pro Solr Instanz nur einen Core hat und somit in der SolrCloud auch nur eine einzige Collection existiert. Dass dies nicht zwingend so sein muss, habe ich bereits in den vergangenen Artikeln angedeutet. Nun möchte ich aufzeigen, welche Möglichkeiten existieren, um mehrere Collections mit gleicher oder unterschiedlicher Konfiguration in der SolrCloud zu verwalten.

In der SolrCloud werden die Solr Konfigurationen vom ZooKeeper verwaltet. Ein Conf-Verzeichnis findet man daher nicht mehr im Home-Verzeichnis jedes Cores.
In der Solr Admin UI gibt es die Möglichkeit zu überwachen, welche Solr Konfigurationen existieren und wie diese den Collections zugeordnet sind. Im folgenden Bild sieht man den Ausschnitt der SolrCloud Admin UI mit nur einer Solr Konfiguration, die unter dem Namen „dummyConf“ im ZooKeeper abgelegt worden ist. Hierbei ist es unerheblich in welcher Solr Instanz eine Collection enthalten ist.

Szenario 1 – Ein Solr configs-Verzeichnis

Im ersten Szenario wird vom ZooKeeper nur eine einzelne Solr Konfiguration verwaltet; egal wie viele Collection in SolrCloud existieren. In diesem Fall werden alle Collections, die in der SolrCloud existieren, automatisch auf diese eine Konfiguration verlinkt. Im Admin UI sieht man dann eine einzige Default Konfiguration, wie im obigen Screenshot dargestellt ist.
Diese Variante eignet sich vor allem in einer Solr Architektur, bei der man viele gleiche Indizes hat, die man getrennt voneinander durchsuchen möchte; beispielsweise bei mehreren Mandanten. Der große Vorteil, der sich hierbei ergibt, ist zum einem der minimale Aufwand bei Änderungen der Konfiguration, denn man hat nur eine zentrale Stelle, die man ändern muss, und die Auswirkung ist global für alle Collections. Des Weiteren können neue Collections problemlos hinzugefügt werden, da sie automatisch mit der Default Konfiguration verlinkt werden.
Eine einzelne Konfiguration zum ZooKeeper zu bringen, ist am einfachsten mit dem Start der ersten Solr Instanz, die der SolrCloud hinzugefügt wird. Wie beispielsweise im Beitrag die-lokale-solrcloud-neuer-artikel-der-blogserie-solrcloud-tipps-tricks-und-pitfalls beschrieben wurde, können hierfür die Parameter bootstrap_confdir und collection.configName genutzt werden.
Hat man mehrere unterschiedliche Indizes in seiner SolrCloud, wird die Verwaltung der unterschiedlichen Konfigurationen etwas aufwändiger. In dieser Situation hat man folgende zwei Wege, um Konfiguration und Collection zusammenzubringen.

Szenario 2 – Solr Konfiguration-Name gleich Collection-Name

Ein automatisches Verlinken von Konfiguration zu Collection findet ebenfalls durch den ZooKeeper statt, wenn die im ZooKeeper verwaltete Konfiguration im configs-Verzeichnis genauso heißt wie die Collection. Im nachfolgenden Screenshot sind zwei Collections mit eigener SolrConfig zu sehen.

Die einfachste Möglichkeit für jede Collection eine Konfiguration im ZooKeeper abzulegen ist genau wie bei der Variante 1 die Konfigurationen beim Start einer Solr Instanz hochzuladen. Hierfür gibt es den Parameter bootstrap_conf=true,der dafür sorgt, dass für jede Collection der Instanz eine Konfiguration im ZooKeeper mit dem passenden Namen abgelegt wird.

Szenario 3 – Explizite Verlinkung von Solr Konfiguration zu Collection

Für Szenarien, in denen es sowohl Collections mit gleichen als auch unterschiedlichen Konfigurationen gibt, birgt die zweite Variante den Nachteil, dass zu viele Solr Konfigurationen verwaltet und entsprechend aktualisiert werden müssen. Bei Solr Architekturen mit N Collections und M unterschiedlichen Konfigurationen werden die Collections explizit mit einer Konfiguration verlinkt. Dies minimiert die Anzahl den Konfigurationen, die im ZooKeeper verwaltet werden müssen von N (für jede Collection eine eigene Konfiguration) auf M (die Anzahl der unterschiedlichen Konfigurationen).
Im nachfolgenden Screenshot wird eine Solr Konfiguration (dummyConf) vom ZooKeeper verwaltet und ist mit 3 Collections (_dummy, collectionOne, collectionTwo) verlinkt.

Das explizite Verlinken von Konfiguration zu Collection macht man über die im Solr integrierte ZooKeeper CLI und muss vor dem Start der Solr Collection durchgeführt werden. Mit folgendem Befehl wird die Collection collectionThree mit der bereits bestehenden Konfiguration verlinkt:

java org.apache.solr.cloud.ZkCLI -cmd linkconfig -zkhost mk_mobil:2181 -collection collectionThree -confname dummyConf

Auf weitere Möglichkeiten der ZooKeeper CLI im Solr werde ich in einem gesonderten Beitrag eingehen.
Eine weitere Möglichkeit eine weitere Collection in der SolrCloud zu starten, die eine bestehende Konfiguration nutzen soll, ist die Cores-API. Hier kann man beim der Action CREATE den Parameter collection.configName mit angeben, um das Linken zu bewirken.

Fazit

Für jeden denkbaren Use-Case gibt es eine passende Möglichkeit, um mit wenig manuellen Aufwand Konfigurationen in der SolrCloud zu verwalten.
Wichtig dabei ist, dass die Verwaltung der Konfigurationen parallel zum Betrieb der SolrCloud im ZooKeeper passiert. Optimaler Weise sind die Solr Konfigurationen vor dem Start der Solr Instanzen im ZooKeeper hinterlegt. Bei den Varianten 1 und 2 kann dies aber noch beim Start der ersten Solr Instanz realisiert werden.

Weiterführende Links

Johannes Brucher

Johannes Brucher