Linuxové clustery

Jan Blaťák <xblatak@fi.muni.cz>


Obsah


Úvod

V poslední době se objevuje stále více aplikací, které jsou výpočetně nebo kapacitně velmi náročné. Řešit je lze buď tak, že se počká (někdy i mnoho let) na výsledek vygenerovaný jedním počítačem nebo se k řešení použije cluster. Poznámka o dlouholetosti řešení napovídá, že lepší asi bude použít onen cluster.


Co jsou clustery

Co to tedy cluster je? Jedná se o skupinu počítačů nebo jiných zařízení, vzájemně propojených sítí. Zadaná úloha se potom zpracovává paralelně a navíc je možné přistupovat do sdílené paměti jiného uzlu. Tím lze dosáhnout obrovského výkonu.


Hardware

Při budování clusteru je důležité dopředu přesně vědět, k čemu bude použit. Je-li potřeba zajistit opravdu velký výkon, je vhodné sestavit cluster z komponent určených k budování superpočítačů. To zahrnuje především speciální síťové karty, které jsou určeny výhradně k tomuto účelu. Jedná se například o zařízení splňující normu SCI (navržena IEEE) nebo karty jako Myrinet či cLAN, které používají vlastní komunikační protokol a zajišťují minimální latenci při komunikaci. Experimentálně lze vyzkoušet i propojení přes SCSI.

Druhou možností je použít karty pro vysokorychlostní ethernet. Na této technologii je postavena většina vědeckých clusterů.

Co se týče samotných uzlových zařízení, nejsou na ně kladena žádná větší omezení a většina používaného software je dostupná pro mnoho operačních systémů.


Typy clusterů

Clustery se dělí do několika skupin podle toho, jaké jsou kladeny požadavky na vlastnosti budovaného systému. Běžně se používají tři základní typy, ale je samozřejmě možné je mezi sebou kombinovat podle aktuální potřeby. Typy clusterů tedy jsou:


Load-Balancing clustery

Linux Virtual Server

Linux Virtual Server (LVS) je systém pro vyrovnávání zátěže a zajištění vysoké dostupnosti. Cluster se skládá z počítače (případně počítačů), který rozděluje zátěž mezi reálné servery (tzv. director). Architektura clusteru je skryta před klientem, protože celý systém se mu jeví jako jediný virtuální server.

To je možné proto, že LVS je implementovaný pomocí patchů pro jádro Linuxu. Jedná se především o rozšíření systému překladu adres, označovanému (VS-NAT).

Protože v clusteru můžou být zapojeny i počítače, které nejsou umístěny v lokální síti za directorem, je použito tunelování IP. Požadavky jsou ze serveru řídícího rozdělování zátěže zapouzdřeny do dalšího paketu a poslány na vzdálený server. Tento způsob ale není příliš efektivní, proto je výhodné, aby byl celý cluster tvořen uzly z jedné lokální sítě.

Následující schéma demonstruje strukturu clusteru založeného na LVS.

                        ________
                       |        |
                       | client | (local or on internet)
                       |________|
                           |
                        (router)
                           |
--                         |
L                      Virtual IP
i                      ____|_____
n                     |          | (director can have 1 or 2 NICs)
u                     | director |
x                     |__________|
                           |
V                          |
i                          |
r         -----------------+----------------
t         |                |               |
u         |                |               |
a         |                |               |
l   _____________    _____________    _____________
   |             |  |             |  |             |
S  | real-server |  | real-server |  | real-server |
e  |_____________|  |_____________|  |_____________|
r
v
e
r
---

Dostupné jsou také hardwarové implementace. Jsou vybaveny minimálním operačním systémem a mnoho funkcí je zabudováno přímo v čipové sadě. Výkon takových clusterů je daleko vyšší, ale systém není tak variabilní jako při softwarovém řešení.

LVS není typický cluster, protože jednotlivé uzly (real-server) navzájem vůbec nekomunikují. Proto jej nelze použít jako cluster pro vědecké výpočty a je vhodný pouze pro vyrovnávání zátěže a zajištění vysoké dostupnosti.

Co se týče hardwaru, speciální nároky jsou kladeny pouze na server rozdělující zátěž. U clusterů připojených 10Mpbs ethernetem postačí obyčejné Pentium, ale má-li být cluster připojen vysokorychlostní linkou, mohou požadavky vzrůst až na Pentium III taktované na 300MHz. Nevýhodou může být, že jednotlivé uzly a director musí být propojeny ethernetem a nelze tedy použít výše zmiňované síťové karty.

LVS je možné provozovat na systému s jádrem do verze 2.2.17 a 2.4.0-test. Distribuce LVS se nachází v souboru ipvsadm-1.12.tar.gz (nástroje pro správu a monitorování) a ipvs-verze-verze_jádra.tar.gz (zatím poslední verze je 1.0.2), což je patch pro jádro.

Po nainstalování balíku a přeložení jádra je potřeba nakonfigurovat director pro překlad adres jednotlivých služeb. Následující soubor obsahuje konfiguraci pro 2 uzly a službu telnet:

       #----------lvs_nat.conf------------------------------------
       LVS_TYPE=VS_NAT
       INITIAL_STATE=on
       VIP=eth0:110 192.168.2.110 255.255.255.0 192.168.2.255
       DIRECTOR_INSIDEIP=eth0 192.168.1.1 192.168.1.0 255.255.255.0 192.168.1.255
       DIRECTOR_DEFAULT_GW=192.168.2.254
       SERVICE=t telnet rr 192.168.1.2:telnet 192.168.1.3:telnet
       SERVER_NET_DEVICE=eth0
       SERVER_DEFAULT_GW=192.168.1.1
       #----------end lvs_nat.conf------------------------------------

Po nakonfigurování serveru rozdělujícího zátěž lze funkci ověřit programem ipvsadm, který vypíše aktuální nastavení a stav clusteru (počet připojení na každém uzlu, atd.).


Další clustery pro vyvažování zátěže

K dalším produktům umožňujícím vyvažovat zátěž patří například TurboCluster vyvinutý společností TurboLinux. Je založen na LVS, takže poskytuje zhruba stejné možnosti. Dále je k dispozici systém MOSIX, který opět rozšiřuje možnosti jádra. Protože se jedná o úpravu jádra, nemusí se vyvíjet nebo upravovat aplikace a celý proces dělení zátěže je transparentní. MOSIX má navíc dobře propracovanou správu uzlu, včetně dynamické změny velikosti a výkonu clusteru (připojování a odpojování stanic).


Vědecké clustery

Beowulf

Beowulf je asi nejznámější Linuxový vědecký cluster vyvíjený od roku 1994 Thomasem Sterlingem a Donem Beckerem. Je navržen pro řešení problémrů v laboratořích NASA a akademických sítích.

Beowulf je sestavený ze sady programů běžících nad jádrem operačního systému. Mezi ně patří především univerzální interface pro zasílaní a zpracování zpráv Message Passing Interface (MPI) nebo Parallel Virtual Machine (PVM). Zasílání zpráv využívají distribuované programy běžící na clusteru. Dále jsou vyvíjeny moduly pro jádro, které umožňují použít speciální přístup k paměti a hardwaru počítače. Díky upravené správě virtuální paměti a zavedení globálního procesu může kterýkoli proces běžící na jakémkoliv uzlu v clusteru přistupovat k distribuované paměti jiného procesu pomocí distribuované meziprocesorové komunikace (DIPC).

Struktura clusteru založeného na beowulfu je podobná jako u LVS. Hlavním prvkem je master server, který zasíláním kontrolních zpráv ovládá jednotlivé uzly. Jako uzly je doporučeno použít samostatné počítače vybavené pouze procesorem a pamětí, místo standardních pracovních stanic. Přidání uzlu do clusteru se poté dá charakterizovat jako přidání procesoru a paměti do skříně. Paralelní úlohy se standardně spouštějí na master serveru, který by měl být jako jediný dostupný z vnější sítě. Správa uzlu se ale provádí pomocí standardních nástrojů.

V clusteru nemusí být instalován pouze jeden master server. Je proto vhodné použít více serverů v případě, že uzly nejsou vybaveny vlastními disky a přenášená systémová data by tedy mohla snadno server zahltit (je-li zároveň použit jako NFS server).

Aby mohl distribuovaný program komunikovat s procesy na jiných uzlech, musí na nich běžet server, který bude zpracovávat zprávy. Takovým serverem jsou programy:

Rozdíly mezi PVM a MPI jsou především v tom, že v PVM nelze používat distribuovanou paměť. MPI je navíc standardizováno, podporují ho mnozí výrobci hardwaru a lze snadno zajistit fault toleranci. Ta se řeší cyklickým zasíláním kontrolních zpráv všem uzlům.

Ke správě clusteru založeného na beowulfu lze použít některou z mnoha grafických aplikací (např. bWatch), nebo utility, které se distribuují spolu s výše zmiňovanými servery.


Další vědecké clustery

Beowulf není jediný vědecký cluster, který lze použít. Dostupných je mnoho řešení, která jsou na beowulfu přímo založená nebo alespoň kompatibilní. Existují však také systémy jiné a nemusí se vždy jednat pouze o software. Jako příklad lze uvést hardwarový cluster cLAN od firmy Giganet, který nepoužívá pro komunikaci mezi uzly protokol TCP/IP a proto dosahuje minimální latence.

K dispozici jsou také clustery, vyvíjené jako součásti projektů na různých univerzitách (např. PARIS nebo JESSICA 2).


Clustery s vysokou dostupností

Jsou potřebné pro udržení nějaké služby co nejdéle v chodu. Uplatní se především v oblasti elektronického obchodování, bankovnictví a služeb, u kterých je nutné zajistit nepřetržitou dostupnost. K tomu je potřeba vybudovat cluster tak, že jednotlivé uzly udržují stejné informace. Tím se znatelně zvyšuje redundance celého systému, ale je možné během velmi krátkého okamžiku obnovit dostupnost služby.

V Linuxu lze použít rozšíření LVS vyvíjené pod označením LVS-HA.

Při zapojení clusteru pro LVS-HA se musí zajistit patřičné propojení mezi jednotlivými uzly. Dá se řešit pomocí běžného ethernetu na straně, ze které přichází vnější požadavky a null-modemem se propojují jednotlivé uzly (není vyžadován pro chod clusteru, ale zvyšuje propustnost systému). Opět je možné zvolit způsob propojení, ale běžně se propojují uzly každý s každým, čímž se zajistí okamžitá reakce na výpadek uzlu. Na těchto linkách jsou rozesílány zprávy programem Heartbeat.

Rozšířené propojení s použitím null-modemu je znázorněno na tomto schématu:


                                                  (Nullmodem Cables)
          +-----------------------------------------------------+
          |       +--------------+        +-------------+       |
          |       |              |        |             |       |
    +-----+-------+-----+  +-----+--------+----+  +-----+-------+-----+
    |   ttyS0   ttyS1   |  |   ttyS0   ttyS1   |  |   ttyS0   ttyS1   |
    |                   |  |                   |  |                   |
    |      Node A       |  |      Node B       |  |      Node C       |
    |                   |  |                   |  |                   |
    |   eth0     eth1   |  |   eth0     eth1   |  |   eth0     eth1   |
    +-----+--------+----+  +-----+--------+----+  +-----+--------+----+
          |        |             |        |             |        |
          |        |             |        |             |        |
    |-----+--------+-------------+--------+-------------+--------+----|
                                                  LAN (Ethernet, etc.)

Heartbeat se řídí konfiguračním souborem /etc/ha.d/ha.cf, ve kterém je specifikováno médium a jeho konfigurace, v dalším souboru je specifikován typ authentikace a klíče pro jednotlivé klienty. To se používá při komunikaci přes zabezpečený kanál (např. ssh). Posledním souborem nutným k chodu heartbeatu je haresources, kde je uveden seznam služeb a jejich vlastníci. V instalačním balíku heartbeatu lze nalézt startovací skripty ve formátu Systém V, takže stačí vytvořit patřičné linky pro používané runlevely.

Protože se jedná o řešení založené na LVS, je nastavení dalších parametrů clusteru obdobné.

Další clustery s vysokou dostupností

Stejně jako u předchozích případech, je možné použít pro zajíštění vysoké dostupnosti i jiné balíký, než LVS-HA. Například v systému Red Hat od verze 6.1 je dostupný balík Piranha. Ten je založen na LVS, ale konfigurace je trochu jiná. Dokumentace je dodávaná v piranha-doc.*.rpm.


Reference