Teil 4 der Serie: Big Data Labor: Cluster aufsetzen

Für den Big-Data Cluster brauchen wir mindestens drei virtuelle Maschinen. Diese haben wir in den ersten Artikeln dieser Serie aufgesetzt. In diesem Tutorial vernetzen wir die virtuellen Maschinen zu einem Cluster, den wir für das Big Data Labor verwenden können.

Wir arbeiten fünf virtuellen Maschinen. Die Limitierung besteht in den Ressourcen des Host-Rechners, also unseres Laptops. Je mehr virtuelle Maschinen wir aufsetzen können, umso besser können wir die Big-Data-Welt kennen lernen.

In diesem Tutorial werden einige Grundkenntnisse mit Linux auf der Command-Line vorausgesetzt. Beispielsweise müssen Konfigurationen mit einem Editor erstellt werden. Nano, vi, vim sind beliebte Linux-Editoren, die im Terminal-Modus funktionieren und bereits vorinstalliert sind.

Netzwerktopologie

Das folgende Bild visualisiert die Netzwerktopologie, die wir mit den virtuellen Maschinen errichten werden.

Netzwerktopologie des virtuellen Big-Data-Clusters

Üblicherweise liegt zwischen dem Internet und dem hausinternen LAN eine Router mit einer Firewall. Der Laptop verbindet sich mit dem hausinternen LAN und erhält üblicherweise eine dynamische IP Adresse.

Die VirtualBox errichtet auf dem Laptop auch eine virtuelle Firewall mit einem DHCP-Router. Die virtuellen Maschinen verbinden sich mit dieser NAT Schnittstelle.

Wir werden zusätzlich ein virtuelles internes Netzwerk definieren und es mit “bigdata” benennen. Damit die virtuellen Maschinen als Cluster funktionieren können, werden wir sie untereinander durch dieses interne Netzwerk verbinden.

Die folgenden Abschnitte bauen diese Konfiguration Schritt für Schritt auf.

Vorbereitung im VirtualBox Manager

Firewall – Regel

Die Standardkonfiguration in der VirtualBox fügt jeder virtuellen Maschine also eine NAT-Schnittstelle zu.

Damit kann die virtuelle Maschine mit der “Außenwelt” kommunizieren, also beispielsweise aufs Internet zugreifen. Sie ist aber durch eine virtuelle Firewall geschützt.

Wollen wir jetzt mit ssh vom Host-Rechner auf die virtuelle Maschine zugreifen, dann müssen wir in der Firewall eine Ausnahmeregel konfigurieren.

Auf dem Gast-System “hört” der ssh-Dienst auf Port 22.

Auf dem Hostsystem können wir einen Port definieren, durch den wir auf Port 22 im Gast-System zugreifen wollen.

Da wir mehrere virtuelle Maschinen in Betrieb haben, brauchen wir mehrere Ports auf dem Host-Rechner.

Hier eine Tabelle mit 5 virtuellen Maschinen – es lohnt sich, die Nummerierung im Einklang zu halten – also pi-201 beispielsweise mit Port 14201 anzusprechen.

Name der VMHost PortGast Port
pi-2001420022
pi-2011420122
pi-2021420222
pi-2031420322
pi-2041420422
pi-2051420522

Nachdem wir diese Regeln festgelegt haben, konfigurieren wir sie in allen 5 virtuellen Maschinen. Der Vorgang muss für jede virtuelle Maschine wiederholt werden. Die Bilder zeigen detailliert, wie dies im Virtual Box Manager gemacht wird.

Im VirtualBox Manager wählen wir eine virtuelle Maschine an und klicken anschließend auf “Netzwerk”
Wir wählen die Registerkarte “Adapter 1”, wo defaultmäßig NAT konfiguriert wird. Dort klicken wir auf “erweitert” und betätigen anschließend die Schaltfläche “Port-Weiterleitung”.
Hier klicken wir zuerst auf das Plus-Symbol oben rechts.
Damit erscheint eine Eingabezeile für die Konfiguration einer Weiterleitungsregel.
Die Regel erhält den Namen “ssh”. Das Protokoll ist TCP.
Host-IP und Gast-IP lassen wir leer.
Unter Host-Port tragen wir die Port-Nummer gemäß Tabelle oben ein. Gast-Port ist 22.
Sind die Einträge korrekt, dann bestätigen wir mit OK.

Dieser Vorgang ist für alle virtuellen Maschinen zu wiederholen.

Wenn wir die virtuellen Maschinen einschalten, dann können wir vom Host-System aus via ssh darauf zugreifen und zwar wie folgt:

$ ssh -l <userid> -p <port number> <IP address>

Nach -l schreiben wir die Userid, mit der wir auf dem Gastsystem einloggen. Wir haben die Userid pi definiert.

Nach -p schreiben wir die Port-Nummer, die wir verwenden möchten, und dazu verwenden wir die Tabelle mit den Weiterleitungsregeln. Ihr können wir ablesen über welchen Port wir auf welche Maschine gelangen.

Unter <IP address> geben wir die IP-Adresse derjenigen Maschine an, auf der wir einloggen wollen. Zu dieser Maschine gehört auch der unter -p definierte Port. Dieser Port gehört zur Host-Maschine und diese wird normalerweise auch als localhost erkannt.

Vom Host-Rechner aus können wir also mit dem folgenden Befehl via ssh auf die virtuelle Maschine pi-201 zugreifen:

$ ssh -l pi -p 14201 localhost

Internes Netzwerk

Um eine Big Data Labor-Umgebung aufzubauen, müssen die virtuellen Maschinen untereinander vernetzt werden.

Mit VirtualBox geht das am Einfachsten, indem wir ein internes Netzwerk bilden. Dazu definieren wir für jede virtuelle Maschine eine zweite (virtuelle) Netzwerkkarte.

Diesmal öffnen wir die Registerkarte “Adapter 2”.
Wir aktivieren den Adapter.
Wählen aus, dass er an ein Internes Netzwerk angeschlossen sein soll.
Und geben dem Netzwerk einen Namen – hier bigdata.
Anschließend speichern wir mit OK.

Diesen Vorgang wiederholen wir für alle virtuellen Maschinen und vergeben immer denselben Netzwerknamen.

Virtual Box wird ein (virtuelles) Netzwerk mit diesem Namen zur Verfügung stellen.

Linux konfigurieren

Die bisherigen Vorbereitungen betrafen die virtuelle Umgebung. Hätten wir stattdessen mit realer Hardware gearbeitet, dann hätten wir Netzwerkkarten installiert und Kabel gezogen.

Dank der Virtualisierung ist uns dies erspart geblieben.

Jetzt sind wir soweit und können das Netzwerk auf Linux-Ebene konfigurieren. Wir haben es ja mit einer einfachen Topologie zu tun (siehe oben).

Als erstes starten wir alle virtuellen Maschinen. Die folgenden Schritte sind auf allen Maschinen auszuführen. Wir zeigen sie expemplarisch an pi-201. Für die weiteren Schritte ist die Namensgebung entsprechend anzupassen.

Wir vergeben einen Hostnamen und konfigurieren die Netzwerkeinstellungen.

Wir loggen also auf pi-201 ein – entweder via Konsole im Virtual Manager oder via ssh.

Und wir nehmen die Root-Rolle ein. Das vereinfacht die nachfolgenden Schritte. Wir könnten natürlich auch jeden der nachfolgenden Befehle mit sudo einleiten.

$ sudo su

Jetzt muss das Passwort des Users pi eingegeben werden.

Hostname ändern

Damit wir das Big Data Labor aufsetzen können, brauchen die einzelnen Rechner ihren gleichbleibenden Namen.

Dazu editieren wir mit unserem Lieblingseditor, z.B. mit nano oder vi, die Datei /etc/hostname. Die Bezeichnung “Host” bezieht sich hier auf die Sicht des Linux-Rechners. Linux ist ja als Host-Betriebssystem geschrieben worden. Virtualisierung kam historisch gesehen erst viel später dazu. Die Schritte, die wir ab jetzt durchführen, können in virtualisierter und nicht virtualisierter Umgebung gleichermaßen ausgeführt werden. Im Tutorial verwenden wir den Editor vi.

$ vi /etc/hostname

Hier schreiben wir auf die erste Zeile:

pi-201

Speichern das File und verlassen den Editor. Für die anderen virtuellen Maschinen vergeben wir die Namen analog: pi-200, pi-202, pi-203 etc.

Hosts

Als nächstes stellen wir die einzelnen virtuellen Maschinen einander vor. Dazu editieren wir das File /etc/hosts

$ vi /etc/hosts

Hier der Inhalt – er ist auf jeder virtuellen Maschine gleich und es gibt für jede virtuelle Maschine im Cluster einen Eintrag in diesem File. Hier ersehen wir auch gleich, welche IP-Adresse mit welchem Node verknüpft werden wird. Es ist praktisch, wenn die IP-Adresse an letzter Stelle die gleiche Nummerierung erhält, wie die Hostnamen. Dabei beachte man die Regeln für den Aufbau einer IP-Adresse IPv4.

127.0.0.1 localhost
192.168.2.200 PI-200
192.168.2.201 PI-201
192.168.2.202 PI-202
192.168.2.203 PI-203
192.168.2.204 PI-204
192.168.2.205 PI-205

Netzwerk-Konfiguration

Die zum Zeitpunkt der Erstellung dieses Tutorials aktuelle Ubuntu-Version 18.4 setzt zur Netzwerk-Konfiguration Netplan ein.

Zuerst schalten wir das automatische Neugenerieren der Konfiguration aus mit:

$ touch /etc/cloud/cloud-init.disabled

Im Verzeichnis /etc/netplan finden wir ein File. In der für dieses Tutorial eingesetzten Version ist der Filename 50-cloud-init.yaml .

Wir editieren dieses File:

$ vi /etc/netplan/50-cloud-init.yaml

Hier der Inhalt für PI-201 – man beachte die entsprechende IP-Adresse

network:
ethernets:
enp0s3:
addresses: []
dhcp4: true
enp0s8:
addresses:
192.168.2.201/24
routes:
– to: 192.168.0.0/16
via: 192.168.2.254
nameservers:
addresses: [8.8.4.4,8.8.8.8,1.1.0.0,1.1.1.1]
version: 2

Das wiederholen wir auf allen virtuellen Maschinen, wobei die IP-Adresse angepasst wird. Also: 192.158.2.200 auf PI-200, 192.168.2.201 auf PI-201, 192.168.2.202 auf PI-202 etc

Blick in die Netzwerk-Konfiguration auf pi-203 – man beachte: die IP-Adresse enthält 203

Über enp0s3 erfolgt die Konfiguration der NAT-Verbindung mit dem Host-Rechner, also mit dem Laptop. Die IP-Adresse wird dynamisch vergeben, es ist also DHCP eingeschaltet.

Über enp0s8 erfolgt die Verbindung mit dem internen Netzwerk. Damit das Big Data Labor funktionieren kann, benötigen wir statische IP-Adressen. Für PI-201 wird hier die statische Adresse 192.168.2.201 vergeben.

Damit die Kommunikation ins Internet erfolgen kann, muss eine Route gelegt werden. Und  es müssen Domain Nameserver bekannt gegeben werden. 8.8.8.8 und 8.8.4.4 sind die Nameserver von Google, 1.1.1.1 und 1.1.0.0 sind die Domainname Server von Cloudflare.

Wir speichern das File und verlassen den Editor.

Jetzt müssen die Änderungen von Netplan übernommen werden, so dass sie auch nach dem Rebooten der virtuellen Maschine noch vorhanden sind.

$ netplan apply

Das Wiederholen wir analog auf allen virtuellen Maschinen. Anschließend booten wir alle virtuellen Maschinen, entweder mit Hilfe des VirtualBox Managers oder mit

$ reboot

Dieser Befehl muss fehlerfrei durchlaufen. Treten Fehler auf, dann handelt es sich meistens um Tippfehler.

Testen

Ein minimaler Test, beispielsweise auf pi-201, sieht wie folgt aus:

Einloggen in pi-201

$ ping google.com

Damit werden die NAT-Konfiguration, die Route und der Nameserver getestet. Die Ausgabe sollte so ähnlich aussehen, wobei das Auflisten mit STRG-C beendet wurde.

Output des ping-Befehls. Die Ausführung muss mit Strg-C unterbrochen werden.

Jetzt testen wir das interne Netzwerk. Ausgehend von pi-201 bauen wir eine ssh-Verbindung mit pi-202 auf:

$ ssh pi-202

Damit sollte eine ssh-Session von pi-201 aus gestartet werden, um auf pi-202 zu gelangen. Beim ersten Aufruf müssen wir noch den Fingerprint akzeptieren.

Auch hier testen wir mit ping und gehen anschliessend mit ssh weiter zu pi-203, und so weiter, bis wir alle Instanzen besucht haben.

Die ssh Session wird mit exit beendet.

$ exit

Damit kehren wir an diejenige Stelle zurück, von der aus wir die ssh-Verbindung aufgebaut haben. Wir müssen also unter Umständen mehrfach exit eingeben, bis wir auf pi-201 zurückgekehrt sind.

Wir können die virtuellen Maschinen aus dem VirtualBox Manager als Gruppe stoppen.

Erstes Ziel erreicht

Jetzt haben wir eine minimale funktionierende Big-Data-Labor-Umgebung auf unserem Laptop aufgebaut. Jetzt sind wir bereit, darauf Big-Data-Tools zu installieren und kennen zu lernen. Dazu entstehen weitere Artikel-Serien.