2508910

Der eigene Raspberry-Supercomputer

04.06.2020 | 09:55 Uhr |

Wenn die Leistung eines Raspberry Pi nicht ausreicht, wieso dann nicht einfach mehrere Platinen miteinander kombinieren? Das ist die Grundidee eines Clusters. Wir zeigen Ihnen, wie Sie ein solches Projekt umsetzen.

Fachleute waren in den Anfangstagen von Google überrascht, als sie beim Blick hinter die Kulissen statt der erwarteten Serverfarm auf jede Menge Standard-PCs trafen. Wie bei allen Start-ups war das Geld zu Beginn knapp und die Server namhafter Hersteller sündhaft teuer. Also baute sich das Unternehmen seine Rechenkapazitäten in Form von Clustern zusammen. Das Prinzip funktioniert auch mit dem Raspberry Pi . So spektakulär wie der Raspberry-Cluster des Los Alamos National Laboratory wird unser Projekt allerdings nicht, denn dort wurden über tausend Platinen miteinander verbunden. Wenn es Ihr finanzieller Rahmen zulässt, können Sie Ihren Cluster auch großzügiger als hier zusammenstellen. Bevor Sie sich aber an das Bestellen der Hardware machen, eine wichtige Vorbemerkung. Von einem Cluster profitieren lediglich Anwendungen, die über so ein verteiltes System betrieben werden können. Standardanwendungen wie Office-Programme werden mit einem Cluster nicht schneller.

Die Hardware-Zutatenliste

Für unser Projekt benötigen Sie mindestens zwei Platinen des Raspberry Pi , außerdem pro Platine ein möglichst kurzes LAN-Kabel sowie eine SD-Karte für die Software. Für den Netzwerkverkehr benötigen Sie einen Ethernet-Switch , der genügend Ports für die Zahl der Platinen bieten muss. Das ist die Minimalausstattung. Jede Platine muss mit Strom versorgt werden. Sie können also jeweils ein separates Netzteil verwenden. 

Alle weiteren Bauteile sind eher die Kür. Eleganter wird das mit einem USB-Hub für die Stromversorgung . Der sollte an jedem Ausgang 5 V mit mindestens 700 mA liefern. Solche Geräte finden Sie im Elektronikhandel auch unter der Bezeichnung „Powerport“. Vergessen Sie dann nicht, ebenfalls pro Platine ein passendes, möglichst kurzes, USB-Ladekabel anzuschaffen. Damit haben Sie alle Zutaten beisammen. 

Nach der Montage wird der Anblick den einen oder anderen von Ihnen ästhetisch stören. Wenn Sie etwas mehr Geld investieren wollen, stöbern Sie bei einem Elektronikversender Ihrer Wahl und suchen Sie dort nach Acrylplatten oder Racks für den Raspberry. Auf diesen Platten wird dann jeweils eine Platine aufgeschraubt und die einzelnen Etagen werden mittels Abstandshalter miteinander verbunden. Oder Sie spendieren jedem Rechner ein eigenes Gehäuse , die dann mittels Schrauben verbunden werden.

Nachdem alle Teile für den Cluster vorliegen, bauen Sie den Verbund zusammen. Da die Boards ja alle gleich aussehen, ist es ratsam, sich beim Zusammenbau an eine Ordnung zu halten. Board 1 belegt immer den ersten Anschluss bei den externen Bausteinen, Board 2 den zweiten Anschluss und so fort. Sie können das Problem aber auch mit einem Etikettiergerät lösen. Sofern vorhanden, bauen Sie die Platinen zunächst in das Rack ein oder verschrauben die Boards mit den besorgten Teilen zu einem größeren Modul zusammen. Verbinden Sie die Platinen mittels der USB-Ladekabel mit der externen Stromquelle, ohne diese bereits mit Netzkabel zu verbinden. Anschließend wird die Verbindung zwischen Ethernet-Schnittstellen der Platinen und dem Switch hergestellt. Sofern Sie sich kein Rack angeschafft haben, sorgen Sie mit anderen Mitteln dafür, dass sich die Platinen nicht aus Versehen berühren können, da dies zu Kurzschlüssen führen könnte.

Raspberry Pi 4: Die neuen Features im Überblick

So funktioniert ein Cluster

Schematische Funktionsweise des Clusters: Der Master erhält den Auftrag vom Nutzer, vergibt die Aufgaben an die Nodes, sammelt deren Rückmeldungen und antwortet an den Nutzer.
Vergrößern Schematische Funktionsweise des Clusters: Der Master erhält den Auftrag vom Nutzer, vergibt die Aufgaben an die Nodes, sammelt deren Rückmeldungen und antwortet an den Nutzer.

Vor der Einrichtung der Software schicken wir ein paar Worte zur grundsätzlichen Funktionsweise des Clusters voraus: Der Cluster und sein Leistungsvorteil basieren auf der direkten und schnellen Kommunikation zwischen den einzelnen Nodes (Knoten). Dabei geht es beispielsweise um das Teilen von Ressourcen. Die verschiedenen Knoten arbeiten parallel an der gleiche Aufgabe (beispielsweise das Durchsuchen von Datenbeständen) und liefern gemeinsam ein schnelleres Ergebnis. Sie können über die USB-Schnittstellen beispielsweise mehrere externe Datenträger mit einem Raspberry verbinden. Sollen alle Daten durchsucht werden, kümmert sich dann aber nur ein Prozessor darum. Die Verknüpfung mehrerer Systeme verteilt die Arbeit auf mehrere Prozessoren.

Ein Knoten übernimmt in diesem Spiel die Aufgabe des Masters. Der Master übernimmt in vielen Szenarien die Aufgabe eines „Load Balancers“ und kümmert sich um eine Verteilung von Anfragen. Nur der Master nimmt die eigentlichen Anfragen des Nutzers entgegen und weist dann den anderen Nodes die Aufgaben zu. Diese melden das Ergebnis an den Master zurück, der die Anfrage schließlich beim Nutzer beantwortet. Um keine Zeit bei der Übertragung der Kommandos und Ergebnisse durch anderen Datenverkehr zu verlieren, ist es vorteilhaft, die Kommunikation direkt via Ethernet und einem eigenen kleinen Netzwerk zwischen den Nodes zu gewährleisten – deswegen die Anschaffung des Netzwerkswitches und der Netzwerkkabel.

Zur klaren Unterscheidung der Knoten erhalten diese eigene Netzwerknamen. Was in der Abbildung auf dem Desktop geschieht, können Sie auch im Terminal oder via SSH erledigen.
Vergrößern Zur klaren Unterscheidung der Knoten erhalten diese eigene Netzwerknamen. Was in der Abbildung auf dem Desktop geschieht, können Sie auch im Terminal oder via SSH erledigen.

Beispiel 1: Der Webserver-Cluster 

Um das Grundprinzip des Clustercomputings zu nutzen, können Sie einen Verbund an Webservern aufbauen, wobei die Anfragen an das System über einen Lastverteiler geregelt werden. Wie immer bei solchen Projekten liegt die Magie des Systems in der Software. Zur Vorbereitung aller Nodes formatieren Sie die SD-Karten und installieren darauf eine aktuelle Version von Raspbian Lite. Da Sie für den Cluster keinen Desktop und grafische Anwendungen benötigen, wäre es eine Verschwendung von Speicherplatz, die vollständige Version zu nutzen. Sie brauchen jedoch einen Monitor und eine Tastatur, um die Arbeiten erledigen zu können. Es macht auch vieles einfacher, wenn Sie diese Hardware am Masterknoten angeschlossen lassen.

Booten Sie die Platine damit und bringen Sie die Software zunächst auf den aktuellen Stand. Dazu nutzen Sie die üblichen Kommandos: 

sudo apt -y update 
sudo apt -y upgrade

Führen Sie dann auf jedem System das Programm raspi-config aus. Ändern Sie dort das Passwort für den Nutzer „pi“ aus Sicherheitsgründen. Dazu dient die erste Option in der Oberfläche. Über den Punkt „Network“ erreichen Sie dann die Konfiguration der Netzwerkschnittstellen. Verändern Sie dort den Hostnamen zu „Node1“, „Node2“, „Node3“.

Webserver-Cluster: In der Konfigurationsdatei von Apache müssen alle Mitglieder des Clusters definiert werden.
Vergrößern Webserver-Cluster: In der Konfigurationsdatei von Apache müssen alle Mitglieder des Clusters definiert werden.

Dies gibt dann auch gleich die Beschriftung von Kabeln und Anschlüssen vor. Aktivieren Sie dort auch WLAN, sofern es sich um ein Modell mit entsprechender Schnittstelle handelt. Speichern Sie und starten Sie jedes System dann jeweils erneut. Installieren Sie anschließend auf jeder Platine mit

sudo apt-get install apache2

einen Apache-Webserver. Was Sie in den nächsten Schritten benötigen, sind die IP Adressen der Platinen. Diese ermitteln Sie am besten im zentralen Router. Dort können Sie auch festlegen, dass die Platinen immer eine feste IP-Adresse erhalten. Auf der Platine, die Sie als Master verwenden wollen, installieren Sie nun zusätzlich den von Apache zur Verfügung gestellten Load Balancer und starten ihn: 

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod proxy_balancer 
sudo a2enmod lbmethod_byrequests 

Mittels systemctl apache2 restart starten Sie dann den Server erneut. Jetzt müssen Sie dem System noch mitteilen, wer alles Mitglied des Clusters ist. Dazu brauchen Sie die IP-Adressen der Nodes. Diese tragen Sie in die Konfigurationsdatei ein.

Öffnen Sie dann die Datei „/etc/apache2/sites-available/default“ und suchen Sie dort den Abschnitt „<VirtualHost *:80></ VirtualHost>“. Diesen Abschnitt passen Sie dann so an: 

<Proxy balancer://rpicluster>
    BalancerMember http://IPADRESSE-NODE1:80 
    BalancerMember http://IPADRESSE-NODE2:80 
    AllowOverride None 
    Order allow,deny 
    allow from all 
    ProxySet lbmethod=byrequests 
</Proxy> 
<Location /balancer-manager>
    SetHandler balancer-manager 
    Order allow,deny 
    allow from 192.168.178 
</Location> 

Speichern Sie die Datei und starten Sie den Server neu. Über die IP-Adresse des Masters können Sie die Benutzeroberfläche von einem beliebigen Rechner im Netzwerk aufrufen. Die Adresse lautet „http://IPMASTER/ balancer-manager“. Dort sollten jetzt die Adressen der weiteren Platinen und ihr Status zu sehen sein. Der Cluster funktioniert und die Anfragen an den Webserver des Masters werden somit auch an die beteiligten Systeme weitergereicht.

Kontrolle über den Clusterverbund: Der Aufruf des Balancermanagers auf dem Mastergerät zeigt die beteiligten Systeme mit ihrer IP-Adresse sowie deren aktuellen Status.
Vergrößern Kontrolle über den Clusterverbund: Der Aufruf des Balancermanagers auf dem Mastergerät zeigt die beteiligten Systeme mit ihrer IP-Adresse sowie deren aktuellen Status.

Beispiel 2: Cluster im eigenem Subnetz 

Die ersten Schritte bei diesem Projekt unterscheiden sich zunächst nicht vom Einsatz des Webservers – also Raspbian aufspielen, Passwort ändern und Hostnamen vergeben. Beim ersten Beispiel erhielten die Nodes aber alle IP-Adressen einfach vom Router. Wenn der Cluster unabhängig vom restlichen Netzwerkverkehr arbeiten soll und die Clusterplatinen einschließlich ihrer IP-Adressen aus dem Hauptnetz herausgehalten werden sollen, dann richten Sie ihm ein eigenes Subnetzwerk ein. Sofern Sie bisher keine Bastelarbeiten an Ihrem Netzwerk vorgenommen haben, sollte das Subnetz 10.0.0.0 zur Verfügung stehen. Anders formuliert: Sofern Sie bereits ein Subnetz aktiv betreiben, wissen Sie ohnehin genug, um die Platinen dort zu integrieren. Die direkte Kommunikation über diesen Backbone muss ohne die Koordination durch den Router auskommen. Deswegen ändern Sie die Netzwerkeinstellungen manuell auf jeder einzelnen Platine mit der Kommandozeile. Dazu öffnen Sie mit 

sudo nano /etc/dhcpcd.conf 

die entsprechende Konfigurationsdatei. Am Ende der Datei fügen Sie dann folgende Zeilen hinzu.

interface eth0 
static ip_address=10.0.0.1/24 

Die letzte Ziffer vor dem Querstrich („/“) erhöhen Sie jetzt bei jeder weiteren Platine um den Wert 1. Nach dem Speichern der Datei starten Sie den betreffenden Raspberry dann neu. Verbinden Sie die Platinen alle über die Ethernet-Kabel mit dem Switch. Sie sollten jetzt vom Master etwa die zweite Platine anpingen können: 

ping 10.0.0.2 

Um Daten direkt zwischen den Nodes auszutauschen, müssten sich Benutzer mit Namen und Passwort am jeweiligen System anmelden. Das funktioniert so natürlich nicht. Um die Anmeldung zu automatisieren, setzen Sie SSH-Schlüssel ein. Auf jedem Knoten erstellen Sie ein Schlüsselpaar: 

ssh-keygen -t rsa 

Dabei bestätigen Sie die Reihe von Abfragen einfach mit der Eingabetaste. Sie werden auch dazu aufgefordert, eine „Passphrase“ einzutragen, wobei Sie ebenfalls keine Angabe machen. Die erzeugten Schlüssel bei den einfachen Knoten teilen Sie dann dem Master mit: 

ssh-copy-id 10.0.0.1 

Auf dem Master wiederum verteilen Sie dessen Schlüssel an die Clients – also mit ssh-copy-id 10.0.0.2, ssh-copy-id 10.0.0.3.

Cluster im Subnetz: Zum Aufbau eines isolierten Clusters weisen Sie jedem Knoten eine individuelle statische IP-Adresse zu.
Vergrößern Cluster im Subnetz: Zum Aufbau eines isolierten Clusters weisen Sie jedem Knoten eine individuelle statische IP-Adresse zu.

Damit der Master Rechenaufgaben an die Nodes verteilen kann, wird eine spezielle Software benötigt. Das ist das Message Passing Interface (MPI). Über dieses Protokoll können die Rechner miteinander kommunizieren, Aufgaben verteilen und Ergebnisse zurückmelden. MPI ist aber nur ein Protokoll, braucht also noch eine Anwendungsschicht, etwa eine Script-Sprache wie Python. Daher installieren Sie auf jedem Node MPI und dessen Anbindung an Python: 

sudo apt install mpich python3-mpi4py 

Um zu prüfen, ob alles funktioniert, können Sie auf den Nodes einmal mpiexec -n 1 hostname ausführen. Das sollte Ihnen den von Ihnen vergebenen Namen für das System zurückmelden. Auf dem Mastersystem testen Sie den Cluster mit diesem Befehl: 

mpiexec -n [Clusterzahl] –hosts [IP1], [IP2], [IP3] 

Der Parameter „-n“ definiert, aus wie vielen Elementen der Cluster bestehen soll, erwartet also einen einfachen Zahlenwert. Anschließend geben Sie die IP-Adressen der Systeme inklusive des Masters an. Konkret sieht der Befehl dann etwa so aus: 

mpiexec -n 3 -host 10.0.0.1, 10.0.0.2, 10.0.0.3 

Das Kommando gibt lediglich die Namen der Hosts zurück, sollte aber alle Mitglieder Ihres Verbunds zurückmelden.

Damit der gesamte Cluster dieselbe Aufgabe, typischerweise ein Script, ausführt, muss dieses an exakt der gleichen Stelle auf jedem System verfügbar sein. Sie werden im Internet in Tutorials zu Python mit Sicherheit einfache Beispiele finden, etwa zur Generierung von Passwörtern, Primzahlen und ähnlichen seriellen Operationen. Legen Sie das Script auf dem Master ab. Im Terminal verteilen Sie das Script dann einfach an die Knoten – also etwa so: 

scp /home/sla/meinscript.py 10.0.0.1: 

Dies wiederholen Sie für jeden einzelnen Knoten. Damit haben Sie die Voraussetzungen für das parallele Abarbeiten dieses Scripts geschaffen. Das so verteilte Script starten Sie jetzt vom Master aus (Beispiel): 

mpiexec -n 3 --host 10.0.0.1,10.0.0.2,10.0.0.3 python3 meinscript.py 100 

Die Mitglieder des Clusters machen sich damit ans Werk und teilen die Ergebnisse an den Master zurück, dieser präsentiert Ihnen dann das Ergebnis.

Damit haben Sie die ersten Schritte beim Arbeiten mit einem Cluster hinter sich. Nach diesem erfolgreichen Einstieg können Sie sich jetzt tiefer in die Arbeit mit solchen Clustern einarbeiten. Slurm ist beispielsweise ein Manager für Workloads, die über einen Cluster verteilt werden. Das Werkzeug ist mächtig und kann auch auf einem Raspberry zum Laufen gebracht werden. Oder Sie vertiefen sich noch etwas weiter in Python. 

Sie haben in diesem ersten Beispiel zwar die Platinen durch Kabel miteinander verbunden. Aber der Verbund funktioniert natürlich auch, wenn die einzelnen Mitglieder an unterschiedlichen Orten stehen. Wenn Sie sich für Heimautomatisierung und Wetterstationen interessieren, lohnt sich ein Blick auf pywws, eine Python-Software, mit der sich dazu kompatible Wetterstationen auslesen lassen. Der Cluster könnte dann die eingehenden Daten aller Mitglieder verarbeiten und Statistiken liefern. Generell können Sie versuchen, viele im Netz verfügbare Beispiele für die Arbeit mit Clustern auf den Raspberry zu übertragen. Dank des Debian-Unterbaus sollten die notwendigen Pakete dazu auch für die Platine zu bekommen sein. 

Lesetipp:   Raspberry Pi - Jede Menge Einsatzmöglichkeiten

Cluster mit anderen Platinen

Falls Sie Odroid-Platinen bevorzugen, haben wir eine gute Nachricht: Die Clustertechnik lässt sich auch auf solchen Platinen einrichten. Die Einkaufsliste unterscheidet sich nicht wesentlich von einem Cluster, der auf Raspberry basiert. Sie benötigen die Platinen, einen Switch, Netzwerkkabel, SD-Karten und Stromversorgung. Da auf Odroid auch Ubuntu läuft, könnten Sie sich im Internet von Anleitungen zur Errichtung eines Clusters auf Basis dieses Systems inspirieren lassen. Die grundlegenden Konfigurationsarbeiten entsprechen dem Vorgehen in diesem Artikel.

Die Themen in Tech-up Weekly #190:

► Nvidia Ampere A100: Schnellste, größte und schwerste Grafikkarte vorgestellt: www.pcwelt.de/news/25-Kilo-Nvidia-stellt-groesste-Grafikkarte-der-Welt-mit-acht-Ampere-A100-GPUs-vor-10811308.html

► PS5: Epic Games zeigt Szenen aus PS5-Spiel: www.pcwelt.de/news/Epic-Games-zeigt-Moeglichkeiten-der-PS5-10811209.html
► PS5 schon im Oktober 2020?: www.pcwelt.de/news/Playstation-5-schon-im-Oktober-Sony-dementiert-10809481.html

Quick-News:

► iPhone 12: Specs, Preise und Modelle geleakt: www.pcwelt.de/news/iPhone-12-Specs-Preise-und-Modelle-geleakt-10809997.html

► BSI warnt Nutzer vor Samsung-Handys wegen ernster Sicherheitslücke: www.pcwelt.de/news/BSI-warnt-Nutzer-vor-Samsung-Handys-wegen-ernster-Sicherheitsluecke-10808088.html

► Trump verlängert Bann gegen Huawei & Co.: www.pcwelt.de/news/Trump-verlaengert-Bann-gegen-Huawei-Co.-10810645.html

► GTA 5 gratis im Epic Games Store: www.pcwelt.de/news/GTA-5-PC-jetzt-gratis-Epic-Games-Store-bricht-zusammen-10810849.html

Kommentar der Woche

www.youtube.com/watch?v=TSZImYzxh2M&lc=UgzlD3qoVo1oWqi-S-h4AaABAg

Fail der Woche:

► Wegen Corona: Elon Musk ist bereit für Gefängnis - und verkauft alle Häuser: www.pcwelt.de/news/Wegen-Corona-Elon-Musk-ist-bereit-fuer-Gefaengnis-und-verkauft-alle-Haeuser-10809163.html

► Zum PC-WELT T-Shirt-Shop:
www.pcwelt.de/fan

PC-WELT Marktplatz

2508910