Schon vor einiger Zeit wollte ich einen Cluster zum Experimentieren mit vier ODROID-HC1 aufbauen. Das sollte doch einfach sein:
- Abbild herunterladen (Ubuntu von Hardkernel oder Armbian Ubuntu)
- Abbild auf SD-Karte schreiben,
- ODROID-HC1 starten,
- Rechnerchen konfigurieren und
- Docker installieren.
Ist es aber nicht.
Probleme
Die einzelnen Schritte habe ich schon beschrieben. Fileserver mit ODROID-HC2 erstellen beschreibt, wie ich auf dem großen Bruder das Hardkernel-Abbild installiert habe. Image unter Gnome auf SD-Karte schreiben beschreibt, wie man das Abbild auf die microSD-Karte schreiben kann.
Dummerweise bootet das Rechnerchen immer wieder neu, egal mit welchem der beiden Ubuntu-Varianten. Auch aus den Mitschriften der Konsole wurde ich nicht wirklich schlau. Es gibt eine Kernel-Panic. Das sollte mit den heruntergeladenen Abbildern nicht passieren. Da microSD-Karten öfter Probleme bereiten können, habe ich verschiedene Hersteller durchprobiert.
Mit Intenso hatte ich auch schon öfter Probleme bei den Raspberrys und dem ODROID GO. Mit der Intenso-Karte bootet das Rechnerchen nicht durch. Mit der Kingston-Karte hatte das Rechnerchen schon einmal funktioniert. Ich hatte den Cluster schon einmal vor einem Jahr aufgebaut. Merkwürdigerweise funktioniert sie mit den aktuellen Versionen von Ubuntu nicht mehr. Mit einer Sandisk-Karte bootet das Rechnerchen jetzt bis zum Login.
Vorbereitung eines eigenen Abbilds
Nachdem ich mit dem Hardkernel-Abbild nicht so zufrieden bin, habe ich dieses Mal das Armbian Ubuntu verwendet. Beim ersten Login als root
mit dem Passwort 1234
verlangt das System ein neues root-Passwort, andernfalls wird root
direkt wieder ausgeloggt. Ein klarer Punkt für Armbian.
apt update && apt upgrade
Docker habe ich wie unter Docker auf ODROID-XU4 und Geschwistern installieren beschrieben installiert und mit armbian-config
die Zeitzone und den Rechnernamen gesetzt und ein eigenes Abbild mit dem Gnome Disks gezogen.
Neue Probleme
Das war es aber noch nicht. Nachdem ich wieder die SSD angeschlossen hatte, bootet das Rechnerchen wieder nicht von der microSD-Karte. Irgendetwas ist komplett faul. Ein Zurückspielen des Abbilds von vorher löst das Problem nicht. Auch ein komplettes Löschen und erneutes Einspielen der Original-Abbilder bringen die Karte nicht mehr zum Booten. Das Entfernen der SSD repariert das Problem ebenfalls nicht.
Hat der ODROID-HC1 die microSD-Karte zerstört? Am PC wird sie aber noch erkannt und lässt sich auch beschreiben. Eine Recherche findet nichts. Allerdings finden sich viele Hinweise auf die Spannungsversorgung in den Hardkernel-Foren. Also Oszilloskop anschließen und die Spannung des Netzteils beim Booten des Rechnerchens beobachten. Die Spannung ist exakt 5 Volt und die Restwelligkeit ist ungefähr +50 mV und -100 mV. In den Foren liest man, dass das originale Netzteil zwischen 5,2 und 5,3 Volt liefert.
Tatsächlich bootet der Cluster, nachdem ich die Spannung auf 5,3 Volt angepasst habe. Die ODROIDs scheinen ziemlich pingelig bei der Spannungsversorgung zu sein. Erst ab 5,3 Volt booten bei mir alle vier ODROID-HC1.
Angepasste Abbilder
Für jeden Knoten die komplette Installation mit Docker durchzuführen ist mir zu aufwendig. Die einfache Lösung ist, die microSD-Karte zu klonen. Man kann einfach mit Gnome Disks ein Abbild ziehen.
Dieses Abbild kann man dann einfach wie das originale auf die anderen microSD-Karten schreiben. Das dauert allerdings recht lange, weil das Abbild die komplette microSD-Karte umfasst (16 GByte). Mehr als fünf Minuten ist mir zu viel pro Knoten.
Damit beim ersten Booten der neuen Knoten, das System neu initialisiert wird (zum Beispiel neue Schlüssel für sshd), muss man die folgenden Kommandos vor dem Ziehen des Abbilds die folgenden Kommandos ausführen.
sudo systemctl enable armbian-firstrun
sudo systemctl enable armbian-resize-filesystem
Das Abbild kann man noch mühselig per Hand oder mit PiShrink verkleinern. Auch wenn das Werkzeug für Raspbian gedacht ist, funktioniert pishrink -s <abbild>
.
System auf SSD transferieren
Mit den Vorbereitungen können wir jetzt die SSDs an den Knoten partitionieren. Wenn die SSD schon partitioniert ist, schlägt das Kommando fehl, da eine Bestätigung der Neupartitionierung notwendig ist. Mit der Option --script
von parted
kann man die Bestätigung abschalten. Das ist aber gefährlich, da man schnell damit den Inhalt der SSD verlieren kann.
Die folgenden Kommandos muss man auf jedem einzelnen Knoten ausführen. Da das Einloggen, Kommandos ausführen und wieder Ausloggen etwas nervig ist, bietet es sich an es wie zum Beispiel in Kommandos im Cluster ausführen mit dem cluster
-Skript zu automatisieren.
sudo parted /dev/sda mklabel gpt
sudo parted -a optimal /dev/sda mkpart primary ext4 0% 100%
Unter Armbian gibt es das Skript nand-sata-install
für den Transfer des Systems von microSd-Karte auf SSD. Nach sudo nand-sata-install
muss man sich nur mit “OK” durch die Dialoge klicken und die Partion /dev/sda1
wird mit ext4 formatiert und das System darauf kopiert.
Das nächste Mal booten die Knoten von der SSD.
Benchmarking
Die Leistungsfähigkeit zu beurteilen ist nicht ganz einfach. Ich habe einfach einmal bonnie
auf die Knoten losgelassen. Da scheint der Knoten mit der WD Green bei der Latenz schlecht abzuschneiden. Auch die Intenso scheint hier etwas schlechter zu sein als die Kingston SSDs. Prinzipiell streuen mir die Ergebnisse aber zu stark, um da etwas daraus abzuleiten.
Spannend finde ich die Ergebnisse von hdparm -tT /dev/sda
. Hier ergeben sich ungefähr 1000 MB/sec für cached reads und mehr als 300 MB/sec für buffered reads.
Fazit
Der Cluster läuft.