Klastry

Przejdź do linków: definicje pojęć, opis technologii, opracowania i książki

Mimo wzrostu wydajności współczesnych komputerów PC, istnieją zadania, które zawsze bedą przekraczały możliwosci pojedynczej maszyny. Dotyczy to wszelkich zadań obliczeniowych, począwszy od obliczeń matematycznych, kompilacji dużych programów, przez rendering grafiki, a na kompresji plików do formatu MP3 kończąc. Dotyczy to również wszelkich zadań przechowywania lub udostępniania dużej ilości danych. Potrzebne są nowe rozwiązania do realizacji takich zadań.

Zwiększanie wydajności współczesnych komputerów przez podwyższanie częstotliwości ich zegarów wewnętrznych oraz stosowanie szybszych technologii półprzewodnikowych ma swoje wady (związane m.in. z coraz większą emisją energii cieplnej i koniecznością zwiększonego chłodzenia układów czy trudnościami w wytwarzaniu coraz mniejszych ścieżek w tranzystorach o mikroskopijnych rozmiarach) i w zasadzie dobiega kresu. Kierunek rozwoju - to budowa komputerów o strukturach równoległych. Od kilku lat w kategorii superkomputerów dominują maszyny bazujące nawet na tysiącach współpracujących ze sobą mikroprocesorów. Nie tak dawno w popularnych komputerach biurkowych pojawiły się procesory z mechanizmami pseudo równoległości (np. Hyper Trading), obecnie standardem stały się konfiguracje dwurdzeniowe (Dual Core), a powoli pojawiają się na rynku procesory czterordzeniowe. Wygląda na to, że po epoce komputerów jednoprocesorowych nastąpi epoka komputerów wieloprocesorowych. Będą one jednak miały godnych konkurentów i zapewne następców - klastry komputerowe. Te ostatnie, to również systemy równoległe, ale zbudowane z autonomicznych, kompletnych komputerów, wymieniających dane za pośrednictwem klasycznych sieci komputerowych. Są to połaczone grupy komputerów, pracujące pod nadzorem specjalnego oprogramowania, które potrafi rozdzielać zadania (pracę) między wszystkie pracujące w klastrze maszyny.  
/na podstawie książki: Linux a technologie klastrowe i pracy: Porównanie rozwiązań klastrowych(...)/

Poniżej znajdziesz informacje przydatne w projektowaniu, budowaniu i konfigurowaniu systemów komputerowych przyszłości oraz skutecznym wykorzystaniu ich do przetwarzania opracowanych przez Ciebie programów.

Klaster komputerowy jest grupą serwerów i innych zasobów (zwanych węzłami), które działają jak pojedynczy system zapewiając jednocześnie wysoką dostępność usług (ang. high availability), a w niektórych przypadkach także równoważenie obciążenia (ang. load balancing) oraz przetwarzanie równoległe (ang. parallel processing).

Klastrowanie polega na wykorzystaniu wielu komputerów, zwykle PC lub stacji roboczych (albo dedykowanych serwerów), wielu urządzeń przechowywania danych (macierze RAID itp.) oraz nadmiarowych połączeń pomiędzy nimi w celu utworzenia tego co użytkownicy widzą jako pojedyńczy system o wysokiej dostępności (zwykle dostępny przez 99,9% czasu). Komputery działające w technologii klastra mogą być wykorzystywane w celu równoważenia obciążenia jak również zapewnienia wysokiej dostępności systemu (tj. nieprzerwanej, niczym niezakłóconej pracy systemu - w przypadku awarii któregoś komputera kierowane do niego żądania przejmują pozostałe węzły klastra).

Innymi słowy klaster jest typem rozproszonego (ang.distributed) lub równoległego (ang.parallel) systemu, który:

Podstawowy podział klastrów ze wzgledu na pełnione funkcje:

W praktyce rozwiązania klastrowe mają charakter mieszany i wykonują dla pewnych aplikacji funkcje wydajnościowe, przy jednoczesnym zapewnieniu niezawodności. Często taki tryb pracy klastra dotyczy serwerów WWW, pocztowych, itp., z racji sposobu działania aplikacji obsługujących tego typu serwisy
/na podstawie pracy: Porównanie rozwiązań klastrowych(...)/

Charakterystyczną cechą klastra, takiego jak Linux Enterprise Cluster, jest jego ukrycie, niewidoczność:

Klastry stosowane są m.in. do równoważenia obciążenia serwerów webowych. Żądanie pobrania określonej strony z serwera webowego przesyłane jest do serwera zarządzającego, który decyduje o tym, któremu spośród kilku (lub większej liczby) identycznych lub bardzo podobnych serwerów, pracujących w klastrze, ma przesłać to żądanie do jak najszybszego obsłużenia (balancer wybiera wg określonego algorytmu serwery najmniej obciążone w danej chwili, tak aby zgłoszone żądanie obsługi nie musiało zbyt długo czekać w kolejce). Inne zastosowania to klastry serwerów aplikacji czy serwerów baz danych, umożliwiające poprawę wydajności i niezawodności, jak również zapewniające skalowalność i bezpieczeństwo (rozwiązane stosowane na przykład w bankach gdzie system informatyczny, w którym klienci banku mają swoje konta, musi zapewnić bezpieczeństwo danych i umożliwić sprawdzanie stanu konta oraz wykonywanie transakcji w dowolnym momencie). Klastry są stosowane także jako względnie tania forma przetwarzania równoległego w aplikacjach naukowych i innych, które wykonują operacje równoległe (np. do prognozowania pogody co jest bardzo złożonym procesem wymagającym wykonywania olbrzymiej liczby obliczeń). Dzięki pracy równoległej wielu tanich komputerów o stosunkowo niewielkiej mocy obliczeniowej można otrzymać system komputerowy charakteryzujący się potężną mocą obliczeniową porównywalną z drogimi superkomputerami. Z kolei połączenie wielu niejednorodnych systemów (często rozproszonych geograficznie i pracujących w sieci heterogenicznej) współdzielących różnego rodzaju zasoby, pozwala na tworzenie potężnego wirtualnego komputera charakteryzującego się wysoką dostępnością i umożliwiającego wykonywanie - z wykorzystaniem szybkich łącz - przetwarzania w technologii grid (tzw. "siatki komputerowej"), w przypadku której dla użytkownika nie ma znaczenia gdzie przechowywane są jego dane ani który z komputerów wykonuje właściwe obliczenia, a usługodawcy pozwala to na alokację zasobów i współużytkowanie informacji. Jak więc widać, zastosowanie technologii klastrowych przynosi wiele korzyści.

Materiały na temat klastrów i pojęcia z nimi związane:

HA: High-Availability Clusters, Failover Clusters
HPC: High Proficiency Clusters, High Performance Computing

Computer cluster
Node - węzeł sieci
Two-node cluster - prosty klaster posiadający tylko dwa węzły
Load balancing   - równoważenie obciążenia, rozpraszanie żądań (requests) użytkowników aplikacji
Istnieją różne rodzaje równoważenia obciążenia (tj. mechanizmu load-balancing). Stosowane narzędzia i techniki zależą w dużej mierze od uruchamianych aplikacji. Możliwe są tak różne przypadki jak na przykład równoważenie obciążenia serwerów web (html), równoważenie obciążenia serwerów bazodanowych, równoważenie obciążenia analiz obliczeniowych wielkiej skali (large-scale computational analysis),równoważenie obciążenia pojedynczej maszyny wieloprocesorowej lub wielordzeniowej, równoważenie obciążenia wielu maszyn z pojedynczm procesorem, równoważenie obciążenia wielu maszyn wieloprocesorowych/wielordzeniowych, równoważenie obciążenia wielu maszyn działających na wielu platformach itp. itd. W zależności od rodzaju środowiska mamy do czynienia z różnymi typami obciążenia - nie istnieje więc pojedyncze rozwiązanie odpowiednie dla wszystkich scenariuszy. Do każdego środowiska potrzebny jest specyficzny scenariusz lub zestaw scenariuszy. Dlatego przy wyborze odpowiedniego mechanizmu load-balancingu trzeba wpierw określić wymagania i środowisko działania aplikacji, których obciążenie chcemy równoważyć (inaczej mówiąc rozpraszać żądania użytkowników aplilkacji).
Algorytm szeregowania rozdzielający zadania do poszczególnych węzłów klastra
Round Robin - algorytm karuzelowy, planowanie rotacyjne
Failover, switching - przełączanie w przypadku awarii
Uptime - czas nieprzerwanej pracy serwera
Downtime - czas przerwy w prawidłowym działaniu systemu wskutek awarii
High Availability - zdolność systemu do zapewnienia dostępu użytkownikom do usług w max.pełnym zakresie czasu
Niezawodność (ang. reliability)
Fault-tolerant systems - systemy odporne na błędy/usterki
SPOF: Single point of failure - pojedyncze miejsce (punkt) wystąpienia awarii
Redundancja - nadmiarowość
RAID - nadmiarowe macierze niezależnych dysków, stosowane w celu zwiększenia niezawodności, przyspieszenia transmisji i powiększenie dostępnej przestrzeni
Replikacja - powielanie danych między serwerami baz danych
Multipath I/O - odporna na awarie i zwiększająca wydajność technika, zgodnie z którą istnieje więcej niż jedna ścieżka pomiędzy procesorem (CPU) w systemie komputerowym a jego masowymi urządzeniami przechowywania danych (macierzami dyskowymi itp) dzięki łączącym je magistralom, kontrolerom, przełšcznikom i mostkom. Na przykład: dysk SCSI podłączony do dwóch kontrolerów SCSI w tym samym komputerze lub do dwóch portów światłowodowych (FC) - w przypadku awarii jednego z kontrolerów, portów czy przełączników, system operacyjny potrafi przekierować cały ruch na pozostały sprawny kontroler w sposób przezroczysty dla aplikacji.
Fencing - "odgrodzenie", niesprawnego wezla od reszty klastra, odciecie dostepu do zasobow np. dysku, najczesniej realizowane poprzez automatyczne wylaczenie node'a (STONITH) po wykryciu awarii w celu unikaniecia problemow zwiazanych z dzialaniem uslug na nie-w-pelni-sprawnym czlonku klastra (np. ryzyko uszkodzenia systemu plikow czy zapisu w bazie nieprawidlowych danych)
Skalowalność - zdolność systemu do rozbudowy (związanej na przykład z obsługą większej liczby zadań) lub miniaturyzacji
Disaster recovery - proces, polityki i procedury przywracania operacji krytycznych dla działalności firmy, włączając w to dostęp do danych, komunikację itp, po zaistnieniu katastrofy naturalnej lub spowodowanej przez człowieka. Ściśle związane z koncepcją / metodologią zapewnienia ciągłości działania (Businness Continuity Planning)
Heterogeniczność - różnorodność np. architektur, platform sprzętowo-programowych, systemów operacyjnych
System rozproszony - zbiór niezależnych urządzeń połączonych w jedną, spójną logicznie całość

DRBD: The Distributed Replicated Block Device - rozproszone replikowane urządzenie blokowe
Heartbeat - zarządzanie klastrami HA
Heartbeat project webpage
STONITH: Shoot The Other Node In The Head
STONITH webpage
ipfail utility
LVS - Linux Virtual Server
The Linux Virtual Server Project - LVS
The Linux Kernel Archives
Netfilter - firewalling, NAT and packet mangling for linux 2.4
High-Availability Linux Project- Linux-HA
Linux Clustering Information Center
Transparent Inter Process Communication - TIPC - system potrafiący ukryć przed aplikacją topologię klastra
Beowulf - klastry HPC wykorzystujące biblioteki MPI/PVM

DRBD in a Heartbeat - LinuxJournal
Mainstream Parallel Programming - LinuxJournal
Getting Started with Condor - LinuxJournal
Clustering Is Not Rocket Science - LinuxJournal

Klastrowe systemy plików i metody arbitrażu
Terminolgia dotycząca klastrowych systemów plików CODA - pozwala wielu serwerom przechowywać te same dane
DRBD - tworzy w sieci lustrzaną kopię (mirror) urządzenia przechowywania danych na poziomie bloku. Podstawowy węzeł posiada/ma dostęp do odczytu i zapisu danych, a węzeł zapasowy może uzyskać dostęp w trybie odczytu i zapisu w kombinacji/połączeniu z pakietem Heartbeat, gdy węzeł podstawowy ulegnie awarii.
Intermezzo - jeszcze inny, sporo obiecujący, rozproszony open source'owy system plików, inspirowany na systemie plików CODA. Współpracuje z kernelem w wesji 2.4.15 i wyższej. Nie został jednak zaprojektowany do wysoko wydajnego dostępu z wielu węzłów klastra.
Lustre - system plikówzdolny do/potrafiący obsługiwać dziesiątki tysięcy węzłów
Polystre - wysokiej wydajności klaster NAS używający SAN do przechowywania danych (SAN - dedykowana sieć pamięci masowej, NAS - sieć niededykowana)
Oracle CFS (Cluster File System) - część projektu SSI (Single System Image) (inny opis)
Panasas Storage Cluster and its ActiveScale File System
V9fs - Plan 9 Filesystem Protocol
The Open DLM (Distributed Lock Manager) project - open source'owy projekt oryginalnie rozpoczęty w firmie IBM działający obecnie z dwu-węzłową konfiguracją Heartbeat. Dostarcza funkcji API realizujących arbitraż blokowania. Możesz wykorzystać te API oferujące mechanim rozstrzygania (arbitraż blokad) jeśli piszezz własna aplikację, która ma mieć/uzyskiwać dostęp do danych. DLM to inaczej mówiąc rozproszone zarządzanie blokadami. Jest to podstawowa technika kontroli modyfikacji danych znajdujących się w bazach danych i współdzielonych przez wiele procesorów.
Open GFS (Global File System)

Synchronizacja plików:
rsync, Unison File Synchronizer, Csync2

Linux HPC Cluster HOWTO

Klastry typu SSI: Single System Image (Pojedynczy / Jednolity Obraz Systemu) :
MOSIX - koncepcja klastra, gdzie całość jest widziana jako wieloprocesorowy komputer, może korzystać z bibliotek MPI/PVM
Openmosix
OpenSSI Pobierz OpeneSSI
Kerrighed
Rozwiązania klastrowe OpenSSI - opracowania z politechniki
SSI oznacza własność systemu, która powoduje, że ukryty zostaje rozproszony i heterogeniczny charakter jego zasobów. Takie podejście powoduje,że klaster jest widoczny jako pojedyncza, potężna maszyna, wykonująca obliczenia. Klaster bazujący na SSI udostępnia użytkownikowi całe swoje zasoby niezależnie od ich fizycznej lokalizacji. W szczególności zasobami takiego systemu mogą być np. zdalne procedury, globalny system pkików, migracja lokalnych procesów. Dodatkowymi własnościami oferowanymi przez systemi SSI są np. pewien stopień ochrony przede awariami oraz gwarancja adekwatnego wykorzystania dostępnych zasobów.
Open Single System Image (openSSI) Linux Cluster Project

Klastry oparte na systemie operacyjnym Linux jako rozwiązanie zwiększające
wydajność i niezawodność systemów informatycznych

Book: The Linux Enterprise Cluster - HA cluster build using commodity hardware and free software
Sample: Chapter6: Heartbeat introduction and theory
Obszerne fragmenty książki w serwisie books.google.com
LEC to open-source'owy klaster linuksowy HighAvailability z LoadBalancerem do zastosowań w firmowym środowisku produkcyjnym. Omówiony w książce klaster tworzony jest z wykorzystaniem:
- zmodyfikowanego jądra linuksa
- narzędzia rsync
- pakietu SystemImager (polski opis) (oryginalny tekst)
- pakietu
Heartbeat (High-Availability Linux project)
- pakietu Linux Virtual Server (LVS - highly available & highly scalable server with load balancer)
- pakietów do monitoringu Mon i Ganglia.

RedHat Cluster Suite, RCS - projekt, RCS doc, RCS - wiki - m.in. gfs - Global File System, Piranha Configuration Tool.
Cluster Suite Overview, Cluster Administration
RedHat Piranha - IP Load Balancing
(rozwiązania dla RedHat oczywiście działają także pod CentOS)

Google Code University: Distributed Systems

Book: High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI
Book: High Performance Cluster Computing (HPC)
Book: Linux Clustering: Building and Maintaining Linux Clusters
Book: Distributed and Parallel Systems: From Instruction Parallelism to Cluster Computing
Book: High Performance Computing Clusters with Intel Architecture

Prezentacja: Linux: U mnie działa - Domowy klaster

Prezentacja: Clustering & High Availabity - TWINCLING Society, open source solutions

Książka:Linux a technologie klastrowe - m.in. PVM, MPI, Linux-HA, LVS, RedHat - Piranha, VACM, NVM, Beowulf, Mosix.
Fragmenty książki uzupełnione o dodatkowe informacje.

Książka:Zaawansowane programowanie w systemie Linux -> Rozdział 24. Klastry Beowulf (str. 939 - 977)
m.in. MPI, PVM, przykłady aplikacji zrealizowanych w technologii klastra: rozproszony koder MP3, obliczanie wartości liczby "Pi", obliczanie zbioru Mandelbrota, transponowanie macierzy.

Przetwarzanie współbieżne (ang. concurrent)
Przetwarzanie równoległe (ang. parallel)
Przetwarzanie rozproszone (ang.distributed)
Parallel Virtual Machine - PVM
Message Passing Interface - MPI

Niezawodnościowe klastry konkretnych baz danych i serwerów aplikacji
MySQL Cluster
MySQL 5.0 Cluster: Architecture, Implementation, and Managemt
Clones, Failovers, and Migrations
High Availability PostgreSQL HOWTO
Real Application Cluster - RAC, klaster serwów aplikacji J2EE, produkt firmy Oracle
Oracle Grid Computing
Weblogic Server Clustering - klaster serwerów aplikacji J2EE, produkt firmy BEA, obecnie Oracle
Veritas Cluster Server - klaster serwerów baz danych, sieciowych systemów plików, webserwerów; produkt firmy Veritas, obecnie Symantec
HP Serviceguard for Linux (info) (download)
Technologie klastrowe m.in. HP MC/Serviceguard, Sun Cluster, Veritas Cluster Server, MS Cluster Services, IBM Cluster Resource Services, IBM HACMP/ES (High Availability Cluster Multi Processing, ES - Enhanced Scalability), Novell Cluster Services.

Uwaga! Nie mylić klastra komputerowego z innymi rodzajami klastrów, w szczególności z klastrem dyskowym w systemie plików użytkownika (tj. podstawową jednostką przechowywania danych składającą się z jednego lub kilku sektorów nośnika danych) czy klastrem tablicowym, np: ORACLE CLUSTER, Oracle CLUSTER , PostgreSQL cluster. Klaster tablicowy Oracle jest obiektem schematu użytkownika, który zawiera dane z jednej lub większej liczby tabel, posiadających co najmniej jedną wspólną kolumnę.