W ostatnim czasie znalazłem trochę czasu na zabawę i pierwszym moim pomysłem było stworzenie własnego superkomputera o czym w zasadzie marzyłem od dziecka. Wiem, wiem – dzieci zazwyczaj marzą o byciu strażakiem , pielęgniarką, kowbojem a mi się marzył własny klaster.  No to pyk i zrobiłem własnego beowulfa.

Czym jest klaster typu beowulf

Z grubsza jest to klaster obliczeniowy (superkomputer) który zrobiony jest ze zwykłych PCtów które gdzieś się walają. Głownym założeniem klastra beowulf jest przede wszystkim zbudowanie superkomputera o jak największej mocy obliczeniowej jak najniższym kosztem. Koniec definicji. BANAŁ !

Po kiego grzyba mi klaster?

Bo mogę i chce się bawić. Ogólnie to najpierw zbudowałem klaster a później zastanawiałem się co z nim zrobić jednak zastosowania znalazły się dość szybko. Pewnie większość z Was pomyśli, że chciałbym kopać mocno ostatnio popularne kryptowaluty w tym osławionego bitcoina – w żadnym wypadku. Po pierwsze kopanie w obecnych czasach jest nieopłacalne a poza tym mój klaster opiera się na mocy CPU czyli w przeciwieństwie do koparek opartych na GPU radzi sobie z innym typem obliczeń i jest bardziej uniwersalny.

W przypadku klastra którego nazwałem „masta-klasta” głównym celem było zrównleglenie operacji na plikach oraz przetwarzania zasobów z netu.

Założenia klastra

Przede wszystkim chodziło o klaster bezdyskowy czyli wszystkie nody są maksymalnie wybebeszone, system pobierają przez sieć, nie mają dysków. Ważnym założeniem była też skalowalność. Dodawanie kolejnych nodów miało się odbywać bez ingerencji człowieka – master sam miał wykrywać kolejny sprzęt i podłączać go do klastra.
Dzięki bezdyskowości udało mi się też ograniczyć wydzielanie ciepła oraz hałas.

Hardware

Master
Przede wszystkim musiałem wybrać jakiegoś mastera który zarządzałby całą farmą, Złożyłem typowego „frankensztajna” z celeronem 1,7 Ghz, 2 GB RAM, 2xHDD w RAID, 2xFastEthernet. Konfiguracja tego komputera jest dość kluczowa bo to on serwuje system przez sieć dla wszystkich nodów oraz zapisuje efekty ich pracy. Jeden interfejs sieciowy podłączony jest do switcha z wszystkimi nodami, drugi jest połączeniem ze światem. Ruch z wszystkich nodów przechodzi przez mastera co pozwala na dość łatwe filtrowanie ruchu. Master jest też oczywiście serwerem DHCP, DNS.

Master Klaster

Nody
Udało mi się dorwać 8 komputerów Fujitsu Esprimo z Pentium 4 na pokładzie. Do każdego podokładałem pamieci, wyciągnąłem dyski oraz zdjąłem obudowy gdyż nie były potrzbne

Brudny nod

Szafa
Najważniejsza część klastra – regał magazynowy z Leroja który można scharakteryzować w krótkich słowach „RACK dla ubogich”

Okablowanie
Tutaj poszły największe wydatki bo pomimo że miałem switcha 16 portowego NetGear w szafie to musiałem zakupić 10 kabli UTP-5. Do tego doszły kable zasilające oraz 2 listwy (jedną już miałem).

Wiatrak ze zdjęcia wyjąłem ze śmietnika.

Łączny koszt: 220 zł – serio, kwestie taniości klastra wziąłem sobie do serca 🙂

Przymiarka szafy do klastra

Software

Nie miałem ochoty bawić się tutaj w klastrową dystrybucję linuksa więc skorzystałem z Debiana 8 – mojego ulubionego OSa. Taki system jest zarówno na nodach jaki na masterze. Jest to podstawowa wersja zawierająca tylko pakiety potrzebne do uruchomienia kompa.

Instalacja Debiana na masterze

Przygotowanie

Pierwsza sprawa to porozkładanie sprzętu który miał służyć do budowy klastra oraz wybebeszenie wszystkich fujitsu. Największym problemem było położenie okablowania w jakiś sensowny sposób.
Część zasobów takich jak klaster HA z DRBD służący za NFS siedzi sobie w drugiej szafie i opis tego to już inny artykuł

Instalacja klastra

Cała procedura krok po kroku będzie opisana w osobnym artykule na supercomputers.pl oraz bardzo technicznie na linuks.com.pl

Podstawowe kroki które musiałem wykonać:
1. Instalacja wykastrowanego Debiana 8 netinstall bez zbędnych ficzerów na masterze
2. Instalacja serwerów DHCP, DNS, NFS
3. Uruchomienie PXE – bootowania z sieci – z tym były największe jazdy
4. Skrypt uruchamiający przez WakeOnLan wszystkie nody podłączone do mastera
5. Skrypt zapisujący MAC adresy każdego noda który zostaje podłączony do klastra – potrzebne do ich wzbudzania i wyłączania.

Instalacja debiana cz.2

Skrypty

To najważniejsza część klastra. Przede wszystkim najbardziej potrzebny był mi skrypt który z mastera pozwalałby na uruchamianie wszystkich nodów bez konieczności fizycznego włączania oraz wyłączania nodów na żadanie.

Logika całego skryptu jest następująca:
W systemie który pobierają nody jest zaszyty skrypt który przy starcie systemu wysyła do mastera wszystkie możliwe informacje na temat noda łącznie z jego MAC adresem. Pozwala to na wyłączanie przez sieć wszystkich nodów a także przy ponownym uruchomieniu klastra na ich wzbudzanie poprzez wysłanie magicznego pakietu. Ponieważ nie chciałem żeby wszystkie nody włączały się równocześnie w skrypcie uruchamiającym nody jest opóźnienie 15 sekund po wzbudzeniu każdego noda. Cały klaster jest gotowy do pracy w około 5 minut.

Po co mi takie wyłączanie i włączanie klastra?
Przede wszystkim ciepło – ponieważ zastosowany wiatrak do chłodzenia nie jest najwyższych lotów, w pokoju w którym stoi klaster w letnią noc temperatura po zarzuceniu ciężkiej pracy osiąga w 30 minut około 50 stopni!
Tutaj z pomocą przeszedł mi czujnik temperatury który co 5 minut sprawdza czy klaster się nie przegrzewa jeżeli tak to wyłącza po kolei nody.
Konsekwencją braku chłodzenia jest to że klastra latem jestem w stanie używać tylko w nocy. Tutaj z pomocą przychodzi cron który uruchamia nody codziennie o 23:00 i prosty skrypt który rano sprawdza czy zadania zostały wykonane jeżeli tak to wyłącza wszystkie maszyny.

Oczywiście poza skryptami stricte administracynymi jest też mój skrypt który rozdziela zadania. To prosty skrpyt w PHP który w bazie MySQL ma zapisane zadania który przypisuje do określonych nodów. Dzięki temu nody nie wchodzą sobie w paradę a ja w ładnym panelu widzę co aktualnie się dzieje.
Taki skrypt nie jest przykładem przetwarzania równoległego jednak do takich działań przydają się skrypty w Pythonie którymi właśnie się bawię.

Działający klaster

SUMA SUMMARUM

Budowa klastra okazała się świetną zabawą jednak to dopiero początek bo teraz masa pisania softu żeby to porządnie wykorzystać. Póki co master rozdziela poszczególne zadania dot. parsowania, obróbki danych na konkretne nody i tylko w wyjątkowych sytuacjach jedno zadanie jest wykonywane równolegle na wielu nodach. Natomiast to jak to chodzi i przetwarza dane to jest bajka.

Teraz to nie pozostaje mi nic innego jak stworzyć jakiś skynet, nowego google czy Brand24 🙂 Bójcie się ziomki !

 

Jedna odpowiedź na “Moj własny diskless klaster typu beowulf

Dodaj komentarz