Paralleles Clustering

Paralleles Clustering

September 21, 2021 0 Von Tobias

Paralleles Clustering ermöglicht es mehreren Systemen, Programme gemeinsam auszuführen, als wären sie ein einziges System. Ein Parallel Cluster wird auch als Beowulf Cluster bezeichnet.

In dem vorherigen Artikel “Linux Cluster – Grundlagen” wurden die verschiedenen Arten von Clustern behandelt. Wir sind den Prozess der Einrichtung eines Clusters mit VirtualBox durchgegangen, um einen virtuelles Cluster zu erstellen.

Für diesen Artikel werden wir physische Hardware verwenden, drei Raspberry Pi 4-Systeme. Technisch gesehen, zwei Raspberry Pi 4-Systeme und ein Raspberry Pi 400.

Hardware-Anforderungen

Natürlich brauchen Sie einen Monitor (oder drei), Stromkabel, Tastaturen und Mäuse für die Systeme. Sie können mit einem von jedem auskommen, um es zu teilen.

Es gibt zwei Möglichkeiten, das alles einzurichten. Lassen Sie uns den einfacheren Weg wählen, der weniger Zeit in Anspruch nimmt. Die beiden Möglichkeiten sind:

  • Installieren Sie die Updates und die Software auf allen Systemen gleichzeitig
  • Führen Sie die Installation und die Updates auf einem System durch und kopieren Sie die SD-Karte auf die beiden anderen

Wir verwenden die zweite Option, um dies einzurichten. Dies ist eine gute Übung, um den Hostnamen und die IP-Adresse manuell zu ändern.

Durchführen des Setups

Sie müssen das Betriebssystem (OS) für den Raspberry Pi herunterladen. Ich habe Ubuntu Server 20.04 verwendet.

HINWEIS: Verwenden Sie NICHT Ubuntu 21.04. Das Programm Mpich funktioniert darauf nicht. Zu einem späteren Zeitpunkt wird das Problem möglicherweise behoben, und dann sollte diese Anleitung auch mit Ubuntu 21.04 funktionieren.

Gehen Sie auf die Website ‘https://ubuntu.com/raspberry-pi‘ und wählen Sie ‘Get Ubuntu for the Raspberry Pi’. Scrollen Sie nach unten und wählen Sie das Kästchen “Download 64-bit” unter “Ubuntu Server 20.04.2 LTS”.

Sobald der Download abgeschlossen ist, verwenden Sie Balena Etcher oder ein ähnliches Programm, um das Image auf die erste SD-Karte zu übertragen.

Nachdem das SD-Card-Image erstellt wurde, legen Sie die SD-Card in den ersten Raspberry Pi ein. Schalten Sie das System ein und stellen Sie sicher, dass es an eine Tastatur, eine Maus und einen Monitor angeschlossen ist. Verbinden Sie den Ethernet-Anschluss mit Ihrem Hub oder Switch.

Das System sollte einige erste Konfigurationen ohne Benutzereingaben durchführen. Nach einiger Zeit werden Sie aufgefordert, einen Benutzernamen und ein Passwort einzugeben. Der Benutzername ist “ubuntu” und das Passwort ist ebenfalls “ubuntu”. Nach dem Einloggen werden Sie aufgefordert, das Passwort zu ändern. Achten Sie darauf, dass Sie zuerst aufgefordert werden, das alte Passwort erneut einzugeben. Danach sollten Sie aufgefordert werden, das neue Passwort einzugeben und zu bestätigen.

Sobald Sie eine Aufforderung erhalten, müssen Sie das Wifi-Gerät aktivieren. Dazu müssen Sie den Befehl eingeben:

sudoedit /etc/netplan/50-cloud-init.yaml

Mit diesem Befehl wird die Datei “50-cloud-init.yaml” mit nano bearbeitet. Während wir diese Datei bearbeiten, können Sie auch die Informationen für den verkabelten Anschluss einfügen. Die Datei muss dann wie folgt aussehen:

network:
renderer: NetworkManager
ethernets:
eth0:
addresses: [10.0.0.1/8]
dhcp4: false
optional: true
version: 2
wifis:
wlan0:
optional: true
access-points:
"SSID of your Wifi":
password: "Wifi Password"

dhcp4: true

Schauen wir uns an, was in dieser Datei vor sich geht. Es gibt zwei Abschnitte: den ersten für das Ethernet (kabelgebunden) und den zweiten für das Wifi (drahtlose) Netzwerk. Für das Ethernet gibt es kein DHCP. Die Adresse (10.0.0.1) ist mit der Subnetzmaske (8) fest kodiert. Im zweiten Abschnitt müssen Sie den SSID-Namen des Wifi-Netzwerks sowie das Passwort angeben. Achten Sie darauf, die Anführungszeichen beizubehalten. Verwenden Sie keine Tabulatoren, sondern nur Leerzeichen. Lassen Sie alles so ausgerichtet, wie es im Beispiel steht. Im nächsten Schritt wird das Dateiformat überprüft. Falls erforderlich, können Sie ein anderes IP-Adressierungsschema als 10.0.0.1/8 verwenden. Wenn Sie ein anderes Schema verwenden, achten Sie darauf, dass es mit dem Rest der Systeme übereinstimmt, damit diese über den Hub oder Switch kommunizieren können.

Drücken Sie STRG+O, um die Datei zu schreiben und dann STRG+X, um den Editor zu verlassen.

Um diese Einstellungen zu übernehmen, nachdem Sie das Format der Datei überprüft haben, führen Sie den Befehl aus:

sudo netplan apply

Wenn Sie einen Fehler erhalten, müssen Sie die Datei bearbeiten und den Fehler beheben. Sobald Sie die Datei gespeichert haben, wenden Sie die Änderungen an. Wiederholen Sie diesen Vorgang, bis die Datei angewendet wird. Sobald keine Fehler mehr auftreten, warten Sie ein wenig, bis der WLAN-Adapter eine Verbindung hergestellt hat und die Verbindung vollständig hergestellt ist. Nachdem die Verbindung hergestellt ist, führen Sie die folgenden Befehle aus:

sudo apt update
sudo apt upgrade -y
sudo ap install net-tools
sudo ufw allow ssh
sudo apt install mpich
sudo apt install python3-mpi4pi
sudo apt install ubuntu-gnome-desktop
sudo apt autoremove
sudo restart now

Die letzte Zeile führt zu einem Neustart des Systems. Wir müssen noch ein paar Änderungen vornehmen und sind dann bereit, die SD-Karte zu kopieren.

Wenn das System wieder hochfährt, sollten Sie schließlich zu einer grafischen Benutzeroberfläche (GUI) gelangen, um sich als Benutzer “Ubuntu” anzumelden.

Sobald Sie wieder im System angemeldet sind, müssen Sie die Kacheln in der unteren linken Ecke auswählen. Sobald sich der Bildschirm ändert, geben Sie “users” ein. Es sollte eine Zeile erscheinen, in der Sie “Einstellungen” zur Bearbeitung von Benutzern auswählen können. Sobald sich das Fenster für “Benutzer” öffnet, wählen Sie die Schaltfläche “Entsperren” oben rechts. Aktivieren Sie dann die Option, dass sich der Benutzer “Ubuntu” automatisch anmelden kann.

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:

sudoedit /etc/hostname

Die Datei enthält eine einzige Zeile, die den Hostnamen des Systems darstellt. Löschen Sie den aktuellen Namen und geben Sie “cluster1” ein. Drücken Sie CTRL+O und dann CTRL+X.

Nun müssen wir die Datei “hosts” bearbeiten, um den Hostnamen und die IP-Adresse der Systeme festzulegen. Wenn Sie mehr Systeme verwenden, bearbeiten Sie die Datei entsprechend. Die Datei sollte Folgendes enthalten:

10.0.0.1    cluster1
10.0.0.2    cluster2
10.0.0.3    cluster3

Stellen Sie sicher, dass alle Zeilen, die “127.0.0.1” enthalten, entfernt werden. Fügen Sie die obigen Angaben am Anfang der Datei direkt nach den vorhandenen Hostnamen und Adressen ein. Drücken Sie CTRL+O und dann CTRL+X, um die Informationen zu speichern.

Geben Sie an der Eingabeaufforderung den Befehl “ping cluster2” ein. Überprüfen Sie, ob die IP-Adresse aufgelöst wird. Wiederholen Sie den Vorgang für die übrigen Clusterknoten. Sollte einer davon nicht korrekt sein, bearbeiten Sie die Datei erneut und korrigieren Sie alle Tippfehler. Speichern und schließen Sie die Datei und pingen Sie dann die Namen an, um die Adressauflösung zu testen.

An dieser Stelle können Sie den Befehl “ifconfig” ausführen. Überprüfen Sie, ob die IP-Adresse für “eth0” “10.0.0.1” lautet. Wenn Sie ein anderes Adressierungsschema verwendet haben, sollte sie mit der von Ihnen eingegebenen Adresse übereinstimmen. Wenn die IP-Adresse nicht korrekt ist, bearbeiten Sie die Datei “/etc/netplan/50-cloud-init.yaml” wie zuvor beschrieben.

Führen Sie


sudo shutdown now

aus und trennen Sie dann das System von der Stromversorgung.

Einrichten der anderern Systeme

Entfernen Sie die SD-Karte und verwenden Sie ein Programm, um die gesamte SD-Karte zu kopieren. Siehe den Artikel “ISO-Dateimanipulation”, insbesondere den Abschnitt über das “gnome-disk-utility”. Wenn Sie ein anderes Programm oder eine andere Methode verwenden möchten, empfehle ich Ihnen, das zu benutzen, womit Sie vertraut sind.

Erstellen Sie das Abbild und kopieren Sie es dann auf die beiden anderen SD-Karten. Dieser Vorgang kann etwas Zeit in Anspruch nehmen.

Konfigurieren der übrigen Systeme

Legen Sie die SD-Karten anschließend in die Systeme ein. Schalten Sie nicht alle ein, sondern jeweils nur eine, beginnend mit Nummer zwei. Derzeit booten alle Systeme und versuchen, dieselbe IP-Adresse im Ethernet-Netzwerk zu verwenden und haben identische Hostnamen.

Sobald Cluster2 hochgefahren ist und Sie sich bei der GUI angemeldet haben, öffnen Sie ein Terminal.

Von hier aus müssen Sie ‘/etc/hostname’ bearbeiten, um den Hostnamen entsprechend zu ändern.

Schließlich bearbeiten Sie die Datei “/etc/netplan/50-cloud-init.yaml” und ändern die IP-Adresse. Sobald diese Datei gespeichert ist, führen Sie den Befehl “sudo netplan apply” aus, um zu überprüfen, ob die Datei korrekt ist.

Sobald Cluster2 fertiggestellt ist, können Sie Cluster3 booten und die gleichen Änderungen vornehmen. Nachdem jedes System fertiggestellt ist, gehen Sie zum nächsten über. Sobald der letzte Knoten fertiggestellt ist, können Sie Cluster1 einschalten und der Parallel-Cluster ist fast fertiggestellt.

Endgültige Konfiguration

Auf Cluster1 müssen Sie noch ein wenig arbeiten, bevor der gesamte Cluster bereit ist.

Führen Sie in einem Terminal auf Cluster1 den Befehl ‘sudo ssh-keygen -t rsa’ aus. Der Befehl generiert einen Schlüssel für den ersten Cluster. Für den Dateinamen, unter dem er gespeichert werden soll, drücken Sie ‘enter’. Für die Passphrase drücken Sie einfach die Eingabetaste und zur Bestätigung erneut die Eingabetaste. Sobald der Befehl abgeschlossen ist, müssen Sie den erzeugten Schlüssel auf die anderen Knoten kopieren. Verwenden Sie den Befehl ‘sudo ssh-copy-id [email protected]’. Sie müssen “yes” eingeben, um zu bestätigen, dass Sie fortfahren möchten. Sie werden dann aufgefordert, das Passwort für den Benutzer “ubuntu” auf dem anderen System einzugeben. Das Passwort sollte so lauten, wie Sie es auf Cluster1 festgelegt haben. Durch die Angabe des Benutzernamens “ubuntu” legen Sie die Schlüsseldatei in den Home-Ordner des Benutzers “ubuntu”. Fahren Sie mit dem Kopieren der Schlüssel auf alle Knoten fort, indem Sie einfach die IP-Adresse ändern. Stellen Sie sicher, dass alle Knoten außer dem ersten eine Kopie erhalten.

An diesem Punkt ist alles abgeschlossen.

Testen des Clusters

Von jedem Knoten aus können Sie sich per SSH in jeden Knoten von Cluster1 einwählen und “mpiexec -n 1 hostname” ausführen. Sie sollten eine Antwort mit dem Hostnamen des Systems erhalten.

HINWEIS: Möglicherweise erhalten Sie die Meldung “Ungültiger MIT-MAGIC-COOKIE-1-Schlüssel”. Drücken Sie einfach die Eingabetaste und der Befehl sollte fortgesetzt werden.

Wenn eine andere Meldung als der Hostname angezeigt wird, drücken Sie die Eingabetaste und sie sollte erscheinen. Wenn dies nicht funktioniert, wurde ein Schritt auf einem oder mehreren Knoten vergessen.

Geben Sie auf Cluster1 den Befehl “mpiexec -n 3 -host 10.0.0.1,10.0.0.2,10.0.0.3 hostname” ein. Sie sollten von allen Knoten eine Antwort auf den Hostnamen erhalten.

Wenn Sie sich den Artikel “Linux Cluster – Grundlagen” ansehen, können Sie versuchen, das Python-Skript zum Finden von Primzahlen auszuführen.

Entpacken Sie die komprimierte Datei und legen Sie die Dateien in einem Ordner mit dem Namen ‘prime’ ab. Kopieren Sie den Ordner ‘prime’ in den Home-Ordner eines jeden Systems. Wechseln Sie über das Terminal in das Verzeichnis “prime” und geben Sie den folgenden Befehl ein:

mpiexec -n 3 --host 0.0.0.1,10.0.0.2,10.0.0.3 python3 prime.py 10000

Sie sollten ein Ergebnis und die Zeit erhalten, die Sie für die Erledigung der Aufgabe benötigen.

Fazit

Share