Solr 4.1: SolrCloud – wiele części kolekcji na tej samej instancji Solr

Pomijając dziwnie brzmiący tytuł tego wpisu, chcielibyśmy podzielić się kolejną nowością jaką będzie można znaleźć w nadchodzącym Solr 4.1, a mianowicie możliwość umieszczenia więcej, niż pojedynczej części kolekcji na pojedynczej instancji Solr w ramach klastra. Tak, do tej pory nie było to możliwe. Spójrzmy więc, jak zmienia się Solr 4.1 w stosunku do obecnej wersji 4.0.

Aby zilustrować różnicę postanowiłem zobaczyć, jak wygląda proces tworzenia kolekcji składającej się z dwóch części (shard’ów) i działającej na pojedynczej maszynie.

Solr 4.0

Solr.xml

Spójrzmy, jak wygląda proces tworzenia kolekcji w przypadku Solr 4.0. Czyścimy plik solr.xml, tak aby nie było w nim żadnych wpisów dotyczących rdzeni, czyli żeby wyglądał następująco:

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
 <cores adminPath="/admin/cores" defaultCoreName="collection1" host="${host:}" hostPort="${jetty.port:}" hostContext="${hostContext:}" zkClientTimeout="${zkClientTimeout:15000}">
 </cores>
</solr>

Uruchamiamy Solr

Następnie uruchamiamy pojedynczą instancję Solr, a wraz z nią ZooKeepera za pomocą następującej komendy:

java -DzkRun -jar start.jar

Przygotowanie konfiguracji

Przed stworzeniem kolekcji musimy przesłać konfigurację, którą zamierzamy użyć do jej stworzenia. Zakładając, że zainstalowałem Solr w katalogu /home/solrpl/solr/ oraz, że pliki konfiguracyjne umieściłem w katalogu /home/solrpl/configs/collection1/conf uruchamiam następujący skrypt dostępny wraz z Solr 4.0:

/home/solrpl/solr/cloud-scripts/zkcli.sh -cmd upconfig -zkhost localhost:9983 -confdir /home/solrpl/configs/collection1/conf/ -confname collection1

Stworzenie kolekcji

Jako, że mamy już konfigurację z ZooKeeperze możemy stworzyć nową kolekcję korzystając z API kolekcji. W tym celu wysyłamy zapytanie do /solr/admin/collections z parametrem action=CREATE mówiącym, że chcemy stworzyć kolekcję. Dodatkowo podajemy jej nazwę (parametr name=collection1). Oprócz tego informujemy Solr, że chcemy podzielić kolekcję na dwie części (parametr numShard=2) oraz, że w tym momencie nie chcemy replik (replicationFactor=0). Zatem pełne zapytanie wygląda następująco:

curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=0'

Widok panelu administracyjnego

Widok chmury w panelu administracyjnym, po uruchomieniu powyższego polecenia, wygląda następująco:
Solr 4.0 Cloud View

Kilka słów komentarza

Jak widać, Solr 4.0 nie pozwolił nam na umieszczenie dwóch części tej samej kolekcji na jednej instancji Solr. Część oznaczona jako shard1 została umieszczona na maszynie xubuntu-virtual, ale już część shard2 nie została umieszczona na tej maszynie, co oznacza, że nie mamy dostępnej pełnej kolekcji. Oczywiście, jeżeli mielibyśmy więcej, niż jedną instancję Solr sytuacja uległaby zmianie, ale nie o tym mowa w niniejszym wpisie.

Solr 4.1

Solr.xml

Podobnie jak w przypadku Solr 4.0 zaczynamy od czyszczenia pliku solr.xml, który powinien wyglądać tak samo, jak poprzednio, czyli następująco:

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
 <cores adminPath="/admin/cores" defaultCoreName="collection1" host="${host:}" hostPort="${jetty.port:}" hostContext="${hostContext:}" zkClientTimeout="${zkClientTimeout:15000}">
 </cores>
</solr>

Uruchamiamy Solr

Następnie uruchamiamy pojedynczą instancję Solr, a wraz z nią ZooKeepera za pomocą dokładnie tej samej komendy co poprzednio:

java -DzkRun -jar start.jar

Przygotowanie konfiguracji

Podobnie jak w przypadku Solr 4.0, do wrzucenia konfiguracji do ZooKeepera korzystamy z tego samego polecenia:

/home/solrpl/solr/cloud-scripts/zkcli.sh -cmd upconfig -zkhost localhost:9983 -confdir /home/solrpl/configs/collection1/conf/ -confname collection1

Stworzenie kolekcji

Podobnie, jak w przypadku Solr 4.0 musimy teraz stworzyć kolekcję. Parametry actioncollection i numShards nie ulegają zmianie. Dochodzi nowy parametr – maxShardsPerNode, określający maksymalną ilość części z jednej kolekcji, jaką Solr może umieścić na tej samej instancji Solr (domyślnie ustawiony na wartość 1). W naszym wypadku, ze względu na to, że chcemy mieć maksymalnie dwie części kolekcji umieszczone w ramach jednej instancji, ustawiamy ten parametr na wartość 2. Dodatkowo Solr wymusza na nas stworzenie przynajmniej jednej repliki i dlatego ustawiliśmy parametr replicationFactor na 1. Całe zapytanie wygląda następująco:

curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=1&maxShardsPerNode=2'

Widok panelu administracyjnego

Widok chmury w panelu administracyjnym, po uruchomieniu powyższego polecenia, wygląda następująco:
solr_4.1_cloud

Kilka słów komentarza

Jak widać w przypadku Solr 4.1 byliśmy w stanie stworzyć kolekcję podzieloną na dwie części, które to części umieszczone są w ramach tej samej instancji Solr. Zatem jeżeli ogranicza Was obecna funkcjonalność Solr 4.0, która na to nie pozwala, można ze spokojem oczekiwać Solr 4.1.

This entry was posted on poniedziałek, Styczeń 7th, 2013 at 08:12 and is filed under Solr. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.