Database mirroring

Database mirroring w odróżnieniu od klastrów niezawodnościowych, zapewniających szybkie przełączanie usług na poziomie instancji serwera, jest funkcją pozwalającą zapewnić systemowi kopie lustrzaną całej bazy danych na oddzielnej instancji znajdującej się na zewnętrznym serwerze.

Database mirroring jest funkcją dostępną od wersji Microsoft SQL Server 2005 i był rozwijany do wersji Microsoft SQL Server 2012. W wersji 2014 opcja ta została wycofana. Jednakże powszechną praktyką wielu przedsiębiorstw jest stosowanie starszych, acz tańszych serwerów bazo danowych takich jak SQL Server 2008 czy SQL Server 2012.
Istotą działania database mirroringu jest zapewnienie lustrzanych (identycznych) baz na dwóch niezależnych instancjach serwera, które synchronizują się w czasie rzeczywistym. Funkcje te są wdrażane celem zapewnienia zwiększenia ochrony danych, wysokiej dostępności usług oraz zminimalizowania przestojów podczas aktualizacji czy też konserwacji poszczególnych systemów.
Celem projektu jest demonstracja funkcjonalności mirroringu bazy danych w serwerach Microsoft SQL Server 2012. Database Mirroring można również wykorzystać ze wsteczną kompatybilnością do wersji MS SQL Server 2005.

Realizacja

 Konfiguracja środowiska

Projekt zrealizowany został w środowisku maszyny wirtualnej opartej o system Windows Server 2012 R2. Maszynie przydzielone zostało 4 GB pamięci RAM. Ilość ta z nawiązką gwarantuje sprawne działanie silnika SQL Server.
Rysunek 1. Parametry maszyny wirtualnej
Jako silnik bazodanowy wykorzystany został SQL Server 2012.
Rysunek 2. Szczegóły wersji SQL Server
W celu przygotowania środowiska pod konfigurację database mirroring utworzone zostały trzy instancje: MAIN, SECOND oraz WITNESS, wszystkie oparte o tę samą wersję serwera.
Podczas tworzenia instancji zdefiniowana została jednolita polityka autoryzacji poprzez poświadczenia systemowe. Podejście takie oszczędziło zbędnego zaciemnienia prezentowanego projektu.
Dodatkowo niezbędne jest przyznanie uprawnień instancjom dla użytkownika systemowego Administrator. Najprościej wykonać tę operację wykorzystując SQL Server Configuration Manager.
Rysunek 3. Przydział uprawnień

Konfiguracja database mirroring

Database mirroring może występować w postaci dwóch baz – Principal na instancji bazowej oraz Mirror na instancji lustrzanej. Dodatkowo skorzystano z funkcjonalności database mirroring pozwalającej na podłączenie trzeciej instancji – WITNESS. Jak sama nazwa wskazuje instancja ta pełni rolę świadka replikacji baz. Nie bierze ona udziału bezpośrednio w replikacji. Jej rolą jest zwiększenie bezpieczeństwa synchronizacji replikujących się baz.
  1. Pierwszym krokiem przy konfiguracji database mirroring było stworzenie bazy danych na instancji głównej – MAIN. Utworzona baza danych otrzymała nazwę „mirror”. Baza ta została uzupełniona przykładowymi danymi.
Rysunek 4. Zawartość tabeli users oraz cars
  1. Następnie na bazie „mirror” instancji MAIN wykonany został pełen backup (FULL) włącznie z logiem transakcji.
  2. Kolejnym krokiem było przywrócenie z backupu bazy „mirror” na instancji SECOND. Przywrócona baza otrzymała taką samą nazwę jak oryginalna.
Na instancji WITNESS nie ma potrzeby tworzenia żadnej bazy danych.
  1. Wreszcie można przystąpić do właściwej konfiguracji usługi database mirroring. W tym celu na bazie mirror w instancji MAIN otwieramy menu kontekstowe, z którego z zakładki tasks wybieramy mirror. Tu zaczyna się właściwa konfiguracja.
  2. Przewodnik przeprowadza nas przez kolejne kroki konfiguracji, w których decydujemy czy mirroring będzie korzystał z instancji WITNESS, definiujemy i podłączamy poprzez uwierzytelnienie poświadczeniami odpowiednie instancje, tj. instancję główną – Principal, instancję lustrzaną MIRROR – oraz instancję WITNESS. Po pomyślnej weryfikacji poświadczeń odpowiednich instancji przewodnik poprowadzi nas dalej, aż do podsumowania. Zatwierdzając zdefiniowane parametry kończymy proces konfiguracji.
Mirroring powinien rozpocząć się automatycznie. Czy tak się stało można łatwo zweryfikować patrząc na okno mirror:
Rysunek 5. Pomyślnie skonfigurowany mirroring
Widać wyraźnie, iż serwer przyjął zdefiniowane przez nas ustawienia. Podłączył instancję Principal, Mirror oraz Witness.
Mirroring można w każdej chwili zatrzymać – opcja Pause, bądź całkowicie odłączyć – opcja Remove Mirroring.
Niewątpliwie na uwagę zasługuje opcja Failover, dzięki której możemy przełączyć kolejność instancji, czyli sprawić, żeby instancja lustrzana stała się główną i na odwrót. Funkcja ta jest na tyle zautomatyzowana, iż jeśli baza główna z jakiegoś powodu przestanie odpowiadać, kolejność zostanie przełączona automatycznie.
Po skonfigurowaniu mirroringu instancje zyskują wymowny opis:
Rysunek 6. struktura drzewa przy skonfigurowanym mirroringu
Zaznaczyć należy, że jedynie na bazie mającej status Principal możemy wykonywać zapytania. Baza Mirror jest wyłączona z możliwości odpytywania.

Weryfikacja funkcjonowania

Najprostszą metodą weryfikacji działania mirroringu jest uruchomienie usługi Mirroring monitor
Rysunek 7.narzędzie Database Mirroring Monitor
Narzędzie to monitoruje synchronizację instancji „spiętych” w mirroring. W historii można odczytać dokładne informacje o wymianie danych między bazami.
Dodatkowo dla testu zostało wykonane zapytanie mające na celu dodanie kolumny do jednej z tabel oraz uzupełnieniu jej wartościami.
Po wykonaniu powyższej czynności odwrócona została kolejność mirroringu. Pozwoliło to na sprawdzenie w bazie na instancji SECOND czy tabela faktycznie została stworzona. Test przebiegł pomyślnie, co potwierdziło działanie mirroringu.
Rysunek 8. Tabela po aktualizacji

Wnioski

Zaletą database mirroringu jest niewątpliwe zwiększenie bezpieczeństwo danych poprzez replikację przy braku utraty wydajności. Database mirroring może działać synchronicznie jak i asynchronicznie. Dzięki funkcji Failover w przypadku np. uszkodzenia instancji Principal właściwość bazy głównej przenoszona zostaje automatycznie na bazę lustrzaną. W momencie powrotu wyłączonej bazy do trybu online mirroring włącza się automatycznie.
Wadami tego rozwiązania jest między innymi praca tylko w parach: jedna instancja Principal – jedna instancja Mirror.
Od wersji SQL Server 2014 Microsoft oferuje alternatywne do database mirroring rozwiązanie w postaci Log Shipping. Jest to zadanie usługi SQL Serwer Agent mające na celu transport logów operacji na zewnętrzne instancje. Log następnie jest przywracany na zdalnej instancji co w połączeniu z wysłaniem danych tworzy swoisty backup zdalny. Rozwiązanie o to ma o tyle przewagę nad database mirroringiem, iż pozwala zdefiniować nieograniczoną ilość instancji – odbiorców.

Firma Microsoft w wersjach oprogramowania SQL Server powyżej wersji 2012 zrezygnowała z funkcjonalności w postaci Database Mirroring i rozbudowała narzędzie Log Shipping

Praca zbiorowa: Bryś Mateusz, Pietrzak Grzegorz, Rogala Sebastian

Leave a Reply

Your email address will not be published. Required fields are marked *