1 Wprowadzenie


1.1 Systemy składowania danych
1.2 Cel pracy
1.3 Struktura pracy


1.1 Systemy składowania danych

Przedmiotem niniejszej pracy są klastrowe1 systemy składowania danych (ang. cluster storage systems). Systemy takie dedykowane są do zastosowań, w których niezbędne jest przechowywanie bardzo dużych ilości danych, często dziesiątki, setki razy przekraczających pojemność typowego dysku, oraz szybki dostęp do tych danych przez wielu klientów równocześnie. Przykładami takich instalacji mogą być systemy komputerowe stosowane w bankach lub produkcyjne bazy danych w dużych przesiębiorstwach, najczęściej działające w oparciu o systemy bazodanowe takie jak ORACLE Enterprise czy IBM DB/2. 

Do niedawna systemy składowania danych budowano w oparciu o wieloprocesorowe komputery centralne dużej mocy2 (ang. mainframe), takie jak np. IMB AS/400. Główną zaletą tych systemów, a zarazem powodem, dla którego systemy klasy PC raczej nie nadawały się do takich zastosowań,  był na ogół bardzo efektywny podsystem wejścia-wyjścia, umożliwiający wykonywanie bardzo dużej liczby transakcji w jednostce czasu. Od pewnego czasu daje się jednak zaobserwować trend zastępowania drogich komputerów centralnych systemami klastrowymi. 

Stało się to możliwe m. in. dzięki pojawieniu się rozproszonych baz danych3, takich jak ORACLE Parallel Server (OPS), dzięki którym przetwarzanie wykonywane przez aplikację może być rozproszone pomiędzy kilka węzłów. Wszystkie węzły korzystają tu ze wspólnych zasobów dyskowych, koordynując między sobą dostęp do zgromadzonych na nich danych. 

Rozwiązanie polegające na rozproszeniu przetwarzania wspólnych danych jest pierwszym krokiem w kierunku wykorzystania technologii klastrowej. 

Dokładne wyjaśnienie znaczenia terminu technologia klastrowa czytelnik znajdzie w dalszej części pracy, natomiast tutaj ograniczymy się do wskazania najważniejszej cechy. Systemy klastrowe, w odróżnieniu od drogich systemów klasy komputer centralny, mogą być budowane ze stosunkowo tanich, produkowanych masowo podzespołów4. Systemy takie konstruowane są na ogół w oparciu o zbiór komputerów klasy PC połączonych szybką siecią, taką, jak np. Giganet5 lub Myrinet, zazwyczaj dwu- lub czteroprocesorowych, wyposażonych w stosunkowo dużą pamięć operacyjną oraz co najmniej kilka, kilkanaście lokalnych dysków. Niski koszt6 stosowanych technologii pozwala uzyskać w takich konfiguracjach bardzo korzystny współczynnik łącznej wydajności7 (mocy obliczeniowej) i pojemności8 (ang. capacity) do ceny. 

Rozwiązanie takie nadal ma jednak pewne wady. Udostępnienie zbioru dysków wielu komputerom wymaga stosowania specjalnych rozwiązań. W takich przypadkach stosuje się, wzorowane na rozwiązaniach typu komputer centralny, tzw. sieci zasobów (ang. storage area network, w skrócie SAN), czyli szybkie (na ogół światłowodowe) sieci, do których bezpośrednio podłączone są urządzenia udostępniające sieciowo swoje zasoby (ang. network attached storage, w skrócie NAS), m. in. specjalne dyski, jak również serwery korzystające wspólnie z tych urządzeń. 

Technologia SAN/NAS rozwiązuje niektóre z problemów związanych z rozproszeniem przetwarzania. Umożliwia konstruowanie sieci złożonych z dużej liczby dysków i innych urządzeń służących do składowania danych oraz równoczesny dostęp do tych samych zasobów kilku komputerom, specjalistyczne oprogramowanie zaś wspiera zarządzanie tymi zasobami, udostepnia je, monitoruje, reaguje na sytuacje awaryjne. Zasoby dyskowe w takich systemach nadal jednak nie są zarządzane ani udostępniane w sposób dostatecznie spójny, a wszelka nietrywialna funkcjonalność na ogół opiera się o specjalne, niestandardowe komponenty (np. specjalne dyski), wymaga wsparcia sprzętowego i podraża całkowity koszt systemu, czyniąc całe rozwiązanie znacznie mniej atrakcyjnym. Co więcej, wykorzystanie w takich systemach, w celu zapewienia większej odporności na awarie lub uzyskania większej wydajności, technologii RAID9, wymaga stosowania kosztownych sprzętowych kontrolerów RAID (ang. hardware RAID controller). 

Klastrowe systemy składowania danych są kolejnym krokiem w kierunku wykorzystania taniej, masowej technologii zamiast drogich elementów sprzętowych. Tym razem technologia klastrowa jest wykorzystana nie do zrównoleglenia obliczeń/przetwarzania aplikacji, ale do udostępniania zasobów dyskowych: zastąpienia wspomnianych kontrolerów RAID oraz drogich dysków bezpośrednio podłączonych do sieci. Do składowania danych wykorzystuje się osobny klaster (serwer)10. Klaster ten składa się z kilku węzłów, również klasy PC, połączonych szybką siecią, wyposażonych na ogół w dużą pamięć operacyjną. Każdy z tych węzłów posiada pewną liczbę lokalnych dysków. Zasoby dyskowe węzłów klastra w takich konfiguracjach pozostają lokalne dla poszczególnych węzłów11. Serwer udostępnia dane nie poprzez SCSI, ale poprzez sieć, zwykle szybką sieć typu Giganet lub Myrinet, tę samą, która została użyta do połączenia między sobą węzłów serwera. Maszyny klientów, zamiast odwoływać się do swoich lokalnych dysków, mogą teraz wysyłać żądania za pośrednictwem sieci do węzłów klastra przechowującego dane. 

Klaster pełni więc rolę wirtualnego urządzenia dyskowego lub serwera wirtualnych urządzeń dyskowych, traktowanych przez serwer aplikacji, na ogół za pośrednictwem specjalnego sterownika12, tak, jak normalny (tzn. fizyczny) dysk. Organizacje RAID, zapewniające wydajność i odporność na awarie, zaimplementowane są tutaj programowo (jako tzw. programowy RAID, ang. software RAID). Dzięki temu możliwe jest uzyskanie tej samej wydajności znacznie niższym kosztem. 

Technologia klastrowa ma także wiele innych zalet13, spośród których najważniejszą jest skalowalność, cecha polegająca na tym, że możliwa jest rozbudowa istniejącego systemu o kolejne, dodatkowe elementy (węzły, dyski itp.), i że rozbudowa taka czyni go zdolnym do obsługiwania coraz większych obciążeń14. W chwili obecnej wydaje się, że gwałtownie postępujący wzrost ilości danych przechowywanych w przedsiębiorstwach i związany z tym rozrost systemów wyeliminuje rozwiązania, które nie są dostatecznie skalowalne, szczególnie, że w systemach z komputerem centralnym zwiększanie wydajności odbywa się zwykle dużym kosztem, rosnącym znacznie szybciej niż liniowo ze wzrostem mocy systemu. Dlatego można spodziewać się, że wkrótce serwery klastrowe całkowicie wyprą serwery typu komputer centralny.

1.2 Cel pracy

W niniejszej pracy przedstawiono wybrane problemy i zagadnienia związane z budową systemów składowania danych wykorzystujących technologię klastrową i udostępniających swoje dane za pośrednictwem sieci lokalnej. 

Omówiono tutaj w szczególności:

Opracowanie to powstało w całości na bazie doświadczeń zebranych przez autora jako uczestnika projektu, którego celem było stworzenie produkcyjnego klastrowego systemu składowania danych. System, który autor współtworzył w ramach projektu nosi nazwę Virtual Volume Vault15, w skrócie V3. W chwili włączenia się autora do projektu istniał już prototyp systemu V3, ale w trakcie pracy autora w projekcie system V3 przeszedł znaczną ewolucję. 

Wkład autora w realizację projektu i rozwój systemu przedstawia się następująco:

Podsumowując powyższe punkty, można powiedzieć, że praca autora w projekcie polegała na zamianie zbioru niezależnych węzłów w spójną całość i zmuszenie węzłów serwera do współpracy. Służą temu trzy podstawowe elementy: wzbogacenie systemu o spójną, globalną administrację, zdolność węzłów serwera do pośredniczenia w wykonywaniu lub przekierowywania żądań oraz organizacja RAID0. Wprowadzają one do systemu wymianę danych między węzłami i synchronizację, wcześniej w ogóle nieobecne. 

Prototyp systemu realizował bowiem minimalną funkcjonalność. Udostępniał możliwość czytania i zapisywania bloków na zdalnym dysku (znajdującym się w innym komputerze), ale bez jakiejkolwiek formy wirtualizacji18 zasobów. Zorientowany był jedynie na uzyskanie maksymalnej efektywności operacji zapisu i odczytu zdalnego dysku w oparciu o programowy schowek, w żaden sposób nie uwzględniając kooperacji między węzłami klastra (każdy węzeł klastra stanowił niezależny serwer własnych lokalnych zasobów) ani nie udostępniając żadnej funkcjonalności związanej z tworzeniem abstrakcji wirtualnych zasobów, takiej jak, na przykład, programowe RAID czy zabezpieczenia przed awariami. 

Niniejsza praca, choć napisana w oparciu o konkretną implementację, jest też próbą opisania problemów budowy klastrowych systemów składowania danych w sposób bardziej kompleksowy. Autor starał się włączyć do tej pracy doświadczenia i przemyślenia zebrane w trakcie projektu, w tym również takie, które nie zostały poparte konkretną implementacją. Opisując przyjęte rozwiązania, autor stara się sygnalizować też alternatywne metody, zaś implementacje zawsze omawiane są na tle rozważań teoretycznych.

1.3 Struktura pracy

W rozdziale 2 wprowadzamy niektóre z pojęć, niezbędne do dalszej dyskusji, oraz wymieniamy główne założenia przyjęte przez autora tej pracy jako podstawę w jego rozważaniach, projektach rozwiązań i implementacji. W dalszej części tej pracy będziemy się odwoływać do tych założeń, aby uzasadnić dokonywane wybory. Wspominamy także o ograniczeniach. 

Rozdział 3 poświęcony jest rozwiązaniom w zakresie systemów składowania danych (zarówno sprzętu jak i oprogramowania), które istniały w momencie pisania tej pracy. Rozdział ten będzie w pewnym sensie kontynuacją rozdziału 2

Sens tego rozdziału jest dwojaki:

Od rozważań nad zaletami i wadami wybranej technologii przejdziemy więc do nakreślenia naszych priorytetów w zakresie funkcjonalności systemu. Lektura wyżej wymienionych dwóch rozdziałów (tzn. 2 i 3) powinna dać czytelnikowi pewien obraz wymagań i ograniczeń, które towarzyszyły autorowi przy projektowaniu systemu. 

W rozdziale 4 omawiamy architekturę systemu V3, przy czym skupiamy się tu na wyodrębnianiu różnych warstw oraz modułów, natomiast nie wchodzimy w zbytnie szczegóły dotyczące działania poszczególnych elementów systemu V3 i ich wzajemnych relacji. Znaczenie i funkcjonowanie poszczególnych elementów jest stopniowo wyjaśniane w dalszej części pracy. 

Dalsze cztery rozdziały (tzn. 5, 6, 7 oraz 8) są poświęcone czterem głównym grupom zagadnień: sposobom udostępniania zasobów serwera klientom, problemom związanym z rozproszoną administracją systemem, szczegółom realizacji obsługi żądań na serwerze oraz wpływowi zmian konfiguracji systemu na obsługę żądań. Na tle zawartych tam teoretycznych rozważań autor przedstawia kolejne szczegóły budowy systemu V3 i wykorzystanych w nim rozwiązań, uzupełniając schematyczny obraz nakreślony w rozdziale 4. 

Rozważania przedstawione w rozdziałach 4, 5, 6, 7 i 8 dotyczą głównie przypadku systemu działającego bez zakłóceń. W rozdziale 9 dołączono do tych rozważań aspekt awarii i błędów, omawiając go w kontekście opisanej w rozdziale 4 architektury, jak również opisanych w rozdziałach 5, 6, 7 i 8 algorytmów i metod. 

Praca kończy się podsumowaniem (rozdział 10), w którym omawiamy stopień realizacji wymienionych na początku założeń projektowych i wskazujemy kierunki dalszych badań.


1 Informacje o technologii klastrowej i jej wykorzystaniu można znaleźć np. w [52], [12], [13] i [7].
2 Proponowane przez autora tłumaczenie angielskiego terminu mainframe, dalej odwołujemy się do nich jako do komputerów centralnych.
3 Oprogramowanie działające na klastrze musi być rozproszone, jawnie wspierać architekturę klastrową, czyli być w stanie rozpraszać obciążenie i obliczenia. Dostosowanie tradycyjnej aplikacji do takiego modelu wymaga na ogół jej znaczącego przeprojektowania. O trudnościach, jakie to powoduje, może świadczyć fakt, że jeden z wiodących produktów bazodanowych, SQL Server firmy Microsoft, w chwili pisania tej pracy wciąż jeszcze nie doczekał się wersji działającej na klastrze.
4 Wprawdzie definicje systemu klastrowego spotykane w literaturze (patrz np. [52]) nie wymagają tego i znane są przykłady systemów zbudowanych z bardzo drogich komponentów, wykorzystujących dedykowane elementy sprzętowe, ale wydaje się to nieco na uboczu idei klastrów, ponieważ siłą klastrów i często głównym powodem ich stosowania jest możliwość uzyskania konkurencyjnej wydajności za stosunkowo niską cenę.
5 Sprzęt sieciowy Giganet został wykorzystany do budowy systemu V3, więcej na ten temat w p. 4.2.
6 Najdroższymi elementami są tutaj karty sieciowe i dyski. Te ostatnie nadal stanowią główny składnik kosztów i wyznaczają górną barierę możliwej do uzyskania wydajności.
7 Chodzi tutaj, oczywiście, o tzw. moc obliczeniową, czyli o potencjalną wydajność, możliwą do uzyskania przez odpowiednio skonstruowane oprogramowanie. W praktyce pełne wykorzystanie mocy systemu równoległego bywa, jak wiadomo, bardzo trudne.
8 Słowo pojemność jest tutaj wolnym tłumaczeniem angielskiego terminu capacity. Reprezentuje on całą grupę czynników takich jak maksymalna ilość zgromadzonych danych, maksymalna liczba obsługiwanych klientów, utworzonych wolumenów (patrz 2.3.2) itp., tzn. reprezentuje zdolność systemu do obsługiwania dużych zbiorów danych i funkcjonowania w dużych środowiskach, ale z pominięciem aspektu wydajnościowego.
9 Nazwa RAID jest skrótem od Redundant Array of Inexpensive Disks, czyli tzw. macierzy niedrogich dysków. Obecnie niedrogi jest w tym terminie pustym pojęciem, gdyż macierze takie buduje się często z najlepszych i najdroższych podzespołów. Definicję i szczegóły oraz dyskusję zarówno programowych, jak też i sprzętowych metod implementacji RAID oraz omówienie problemów z tym związanych można znaleźć np. w [16], [51], [55], [29], [37], [54], [35], [36], [19] i [50].
10 Ze względu na to, że węzły wchodzące w skład klastra pełniącego rolę systemu składowania danych powinny być anonimowe (patrz także 2.2.1), a cały system stanowić spójny zasób, w dalszej części pracy przyjmiemy nieco odmienną od standardowej terminologię, w której serwerem nazywać będziemy klaster (zbiór węzłów) wraz z oprogramowaniem jako całość. Poszczególne węzły serwera będą, oczywiście, serwerami w tradycyjnym sensie, tzn. każdy z nich będzie udostępniał usługi klientom i innym węzłom w ramach ustalonego zbioru protokołów i interfejsów.
11 Aczkolwiek stosuje się również tzw. dyski z podwójnymi podłączeniami, mające dwa interfejsy SCSI połączone z dwoma kontrolerami należącymi do różnych węzłów, gdzie jedno z tych połączeń jest zwykle zapasowe, tzn. przewidziane na ewentualność awarii węzła wykorzystującego połączenie główne – w takiej sytuacji węzeł, który wykorzystuje połączenie zapasowe przejmuje zadania tego pierwszego.
12 Szczegóły w punkcie 2.3.4.
13 Wady i zalety technologii klastrowej dokładniej omówione są w punkcie 2.2.
14 W systemach skalowalnych pojęcie skalowalność oznacza również miarę zależności wydajności systemu od jego wielkości (liczby użytych w nim różnego rodzaju elementów). Najlepsze konstrukcje cechuje skalowalność liniowa, tzn. wydajność rośnie liniowo lub prawie liniowo z liczną elementów: węzłów, dysków itd. W praktyce skalowalność rzadko bywa bliska tego ideału, ponieważ większość systemów ma swoje wąskie gardło, takie jak przepustowość sieci, konieczność synchronizacji działania elementów systemu itd. Skalowalność omówiona jest np. w pracy [27].
15 Dawniej ten sam system nosił roboczą nazwę Intelligent Storage System, w skrócie ISS. Nazwa ISS pojawia się w niektórych pracach współuczestników projektu ([14]).
16 W tym przypadku niektóre pracochłonne zadania implementacyjne zostały wykonane przez inne osoby, ale ogólna idea i szczegółowy projekt realizacji pochodzą od autora.
17 Szczegółowe wyjaśnienie tego terminu znajduje się w punkcie 4.3. Ogólnie jest to zbiór modułów systemu odpowiedzialnych za utrzymywanie i zmiany konfiguracji, czyli realizację czynności administracyjnych.
18 Dokładne wyjaśnienie terminu wirtualizacja w tym kontekście znajduje się w punkcie 2.3.