Czy zastanawialiście się kiedyś jak wykonać kopię bezpieczeństwa indeksu w Solr korzystając z dostępnych narzędzi ? Na przykład tak, aby po każdej operacji commit lub optimize otrzymywać kopię bezpieczeństwa ? A może chcielibyście wykonywać kopię własnoręcznie z wykorzystaniem wywołać API HTTP oferowanego przez Solr. Zobaczmy zatem jakie mamy możliwości.
Na początek
Zdecydowaliśmy się opisać te zagadnienie pomimo tego, iż jest bardzo proste. Zauważyliśmy jednak, iż dużo ludzi zapomina o oczywistych funkcjonalnościach, nie tylko w przypadku Apache Solr. Mamy nadzieję, że ten wpis przypomni użytkownikom o tej funkcjonalności, przynajmniej tym, którzy będą jej potrzebować. Zacznijmy od stanu początkowego – zawartość katalogu, w której znajduje się indeks, przed rozpoczęciem testów wyglądała następująco:
drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 20:17 index drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 20:16 spellchecker
Ręczna Kopia Bezpieczeństwa
Aby wykonać ręczną kopię bezpieczeństwa indeksu, przy pomocy wywołania API HTTP, należy mieć skonfigurowany handler odpowiadający za replikację. Jeżeli handler ten jest obecny, wysyłamy do niego (na serwerze master) parametr command z wartością backup, na przykład:
curl 'http://localhost:8983/solr/replication?command=backup'
Spowoduje to utworzenie kopii bezpieczeństwa naszego indeksu. Tak wygląda katalog w którym znajduje się indeks po wykonaniu powyższego polecenia:
drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 20:18 index drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 20:19 snapshot.20120812201917 drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 20:16 spellchecker
Jak widać kopia zapasowa indeksu została utworzona w katalogu snapshot.20120812201917.
Automatyczna Kopia Bezpieczeństwa
Oprócz ręcznego tworzenia kopii bezpieczeństwa mamy także możliwość wykonania kopii indeksu po każdej operacji commit, bądź optimize. Jeżeli twój indeks zmienia się bardzo często sugerujemy nie korzystania z tej funkcjonalności, ewentualnie skorzystania z tworzenia kopii bezpieczeństwa po otrzymaniu komendy optimize.
Na początek, dodajemy następujący wpis do konfiguracji handler’a replikacji:
<str name="backupAfter">commit</str>
Zatem pełna konfiguracja serwera master mogłaby wyglądać następująco:
<requestHandler name="/replication" > <lst name="master"> <str name="replicateAfter">commit</str> <str name="replicateAfter">startup</str> <str name="confFiles">schema.xml,stopwords.txt</str> <str name="backupAfter">commit</str> </lst> </requestHandler>
Po wysłaniu dwóch poleceń commit katalog z indeksem wyglądał następująco:
drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 21:12 index drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 21:12 snapshot.20120812211203 drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 21:12 snapshot.20120812211216 drwxrwxr-x 2 gr0 gr0 4096 2012-08-12 20:16 spellchecker
Tutaj także można zobaczyć, że Solr wykonał to co chcieliśmy, czyli stworzył dwa katalogi z kopią indeksu.
Utrzymywanie porządku
Możliwa jest kontrola tego, jak dużo kopii bezpieczeństwa naszego indeksu będziemy przechowywać. W celu określenia tej ilości należy dodać następujący wpis do konfiguracji handler’a replikacji:
<str name="maxNumberOfBackups">10</str>
Powyższy wpis mówi Solr, aby nie przechowywał więcej, niż 10 kopi bezpieczeństwa. Oczywiście możliwe jest także ręczne usuwanie stworzonych przez Solr kopii, jeżeli nie są już nam potrzebne.