Solr 5.2 – szybkie spojrzenie na mechanizm kopii zapasowych

Wraz z niedawną premierą Solr w wersji 5.2 oraz 5.2.1 dostaliśmy możliwość skorzystania z mechanizmu wykonywania kopii zapasowych przy pomocy API. Ze względu na to, że była to funkcjonalność na którą część użytkowników czekała już dość długo postanowiliśmy się jej przyjrzeć.

W celu przetestowania funkcjonalności przeprowadzimy bardzo prosty test:

  1. uruchomimy Solr w trybie rozproszonym,
  2. zaindeksujemy kilka dokumentów,
  3. zrobimy kopię zapasową,
  4. ponownie zaindeksujemy kilka dokumentów,
  5. postaramy się przywrócić kopię zapasową, którą wykonaliśmy w kroku 3

Zacznijmy więc.

Uruchomienie Solr

Pierwsze krok to uruchomienie Solr. W tym celu wykorzystaliśmy skrypt bin/solr i następującą komendę:

bin/solr -e cloud

Potrzebujemy jednej instancji SolrCloud oraz pustej kolekcji (najlepiej gettingstarted). Do testów potrzebujemy pojedynczego shard’a.

Sama topologia stworzonego przez nas klastra wygląda następująco:

Zrzut ekranu 2015-06-21 o 11.13.31

Indeksowanie danych

Zaindeksowanie danych jest równie proste. Ze względu na wykorzystanie przykładowej kolekcji gettinstarted możemy wysłać dane o dowolnej strukturze, a Solr postara się odpowiednio zmodyfikować schema.xml. Zaindeksowaliśmy całe dwa dokumenty korzystając z następującego polecenia:

curl 'localhost:8983/solr/gettingstarted/update?commit=true' -H 'Content-type:application/xml' --data-binary '
<add>
 <doc>
  <field name="id">1</field>
  <field name="name">Test document 1</field>
 </doc>
 <doc>
  <field name="id">2</field>
  <field name="name">Test document 2</field>
 </doc>
</add>'

Kopia zapasowa

Wykonanie kopii zapasowej jest tak samo proste, jak czynności, które wykonywaliśmy do tej pory. Wystarczy, że uruchomimy następującą komendę:

curl 'http://localhost:8983/solr/gettingstarted/replication?command=backup&name=test&location=/Users/gro/backup/'

Powyższa komenda poinformowała Solr, że chcemy wykonać kopię zapasową, nazwać ją snapshot.test (Solr dodaje wartość parametru name do nazwy snapshot.)  Sama kopia zapasowa, w przypadku braku określonej lokalizacji, zostanie stworzona w katalogu z danymi. Oczywiście możemy podać inny katalog za pomocą parametru location (tak jak w powyższym przykładzie), który może być zarówno ścieżką względną (do katalogu z danymi Solr), jak i bezwzględną.

Odpowiedź Solr będzie szybka i podobna do następującej:

<?xml version="1.0" encoding="UTF-8"?>
<response>
 <lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst><str name="status">OK</str>
</response>

W przypadku, kiedy nasza kolekcja jest duża, czas tworzenia kopii zapasowej będzie oczywiście odpowiednio dłuższy. Jeżeli chcemy sprawdzać, jaki jest postęp wystarczy uruchomienie następującej komendy:

curl 'http://localhost:8983/solr/gettingstarted/replication?command=details'

Ponowna indeksacja

Kolejnym krokiem naszego, prostego testu jest indeksacja kolejnych dwóch dokumentów przy pomocy następującej komendy:

curl 'localhost:8983/solr/gettingstarted/update?commit=true' -H 'Content-type:application/xml' --data-binary '
<add>
 <doc>
  <field name="id">3</field>
  <field name="name">Test document 3</field>
 </doc>
 <doc>
  <field name="id">4</field>
  <field name="name">Test document 4</field>
 </doc>
</add>'

Po tej operacji, jeżeli uruchomilibyśmy następującą komendę:

curl 'localhost:8983/solr/gettingstarted/select?q=*:*&rows=0&indent=true'

Solr poinformuje nas, że w naszej kolekcji są cztery dokumenty:

<?xml version="1.0" encoding="UTF-8"?>
<response>
 <lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">6</int>
  <lst name="params">
   <str name="q">*:*</str>
   <str name="indent">true</str>
   <str name="rows">0</str>
  </lst>
 </lst>
 <result name="response" numFound="4" start="0" maxScore="1.0">
 </result>
</response>

Przywrócenie kopii zapasowej

Postarajmy się zatem przywrócić naszą kopię zapasową i zobaczmy ile dokumentów będzie widzieć Solr. W tym celu uruchamiamy następującą komendę:

curl 'http://localhost:8983/solr/gettingstarted/replication?command=restore&name=test&location=/Users/gro/backup/'

Solr zwrócił następującą odpowiedź:

<?xml version="1.0" encoding="UTF-8"?>
<response>
 <lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst><str name="status">OK</str>
</response>

Zatem sprawdźmy co Solr zwróci na nasze proste zapytanie:

curl 'localhost:8983/solr/gettingstarted/select?q=*:*&rows=0&indent=true'
<?xml version="1.0" encoding="UTF-8"?>
<response>
 <lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">0</int>
  <lst name="params">
   <str name="q">*:*</str>
   <str name="indent">true</str>
   <str name="rows">0</str>
  </lst>
 </lst>
 <result name="response" numFound="2" start="0">
 </result>
</response>

Jak widać Solr poprawnie przywrócił kopię zapasową i znów mamy dwa dokumenty w naszej kolekcji.

Podsumowanie

Jak widać mechanizm działa poprawnie, należy jednak pamiętać o kilku rzeczach. W przypadku instalacji kilku instancji Solr na tej samej maszynie, lepiej unikać wykonywania kopii zapasowych do katalogu bezwzględnego (można nadpisać sobie dane). Poza tym, fajnie jest móc mieć w pełni zabezpieczone dane 😉

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active
Save settings
Cookies settings