Bypasslink

Hochgeschwindigkeitsverbindung zwischen Servern
Mellanox Infiniband-Karte mit 3D-gedruckter Steckplatzabdeckung

Wir wollten CEPH in Teilen unserer my-webspace.at-Infrastruktur bereitstellen. CEPH ist eine hochverfügbare, verteilte, unendlich skalierbare Speicherlösung und auch Open Source! Aber es gibt eine Einschränkung - es braucht wirklich schnelle Verbindungen zwischen den Knoten. Unsere Hauptinfrastruktur läuft über Gigabit-Ethernet. Das war in Ordnung, wir haben eine umfassende Überwachung und es verursacht keine Engpässe, aber  es ist leider zu langsam für CEPH. Ein Upgrade des Kernnetzwerks auf 10 Gigabit wäre sehr kostspielig, würde den Stromverbrauch erhöhen und nur unwesentlich von Vorteil sein.

Zum Glück haben wir einige gebrauchte Dual-Port Mellanox X4242A Infiniband-Karten in die Hände bekommen - sie waren im Grunde kostenlos. Sie sind ohne Infiniband-Speicher nicht sehr nützlich, können aber mit zwei Befehlen, die wir einfach in /etc/rc.local eingeben (die PCI-ID muss für jedes System angepasst werden), in den Ethernet-Modus geschaltet werden:

echo eth > /sys/devices/pci0000:60/0000:60:03.1/0000:62:00.0/mlx4_port1
echo eth > /sys/devices/pci0000:60/0000:60:03.1/0000:62:00.0/mlx4_port2

Dies führt zu zwei 10-Gigabit-Ports mit einer ungewöhnlichen QSFP + -Schnittstelle. Bei der Arbeit mit drei Servern kann eine Dual-Port-Karte in jeden Server eingelegt werden, und jeder Server stellt eine Verbindung zu dem anderen her. Die Verkabelung würde so aussehen:

Wie konfigurieren Sie den Netzwerkstapel jedoch so, dass zusätzlichen Peer-to-Peer-Links verwendet werden? Traditionell sind Netzwerke nicht so konzipiert, dass sie mit solchen Setups sehr gut funktionieren. Unser Ansatz bestand darin, allen Schnittstellen - dem 1-Gigabit-Hauptport, sowie beiden Infiniband-Ports - dieselbe IP-Adresse zuzuweisen und die Routing-Tabelle so zu konfigurieren, dass die Infiniband-Links für bestimmte Hosts priorisiert werden. Da sich die Karten in einem gebrauchten Zustand befinden, mussten wir sicherstellen, dass beim plötzlichen Absterben einer Karte keine Ausfälle auftreten. Also haben wir alles auf einigen Testservern eingerichtet und die Routing-Registerkarten konfiguriert. Dann liesen wir einen DNetzwerkschnittstelle zu überspringen. Meh: / - Es wurde auch keine Fehler mit einer Karte erkannt, die anscheinend funktioniert, aber keine Daten überträgt. Unsere Lösung bestand darin, eine benutzerdefinierte Software zu entwickeln, die die Konnektivität kontinuierlich überprüft und die Routing-Tabelle konfiguriert. Wenn die schnelle Verbindung unterbrochen wird, wechselt sie innerhalb von weniger als zwei Sekunden zur langsameren 1 GIgabit-Schnittstelle und benachrichtigt uns. Also wird alles weiter funktionieren, aber langsamer. Diese Lösung macht es sehr sicher in einer Produktionsumgebung.

Wir haben diese Open Source gemacht. Es ist hier verfügbar: https://git.dkia.at/dkia-oss/bypasslink

Nach umfangreichen Tests waren wir fast bereit, dieses Setup bereitzustellen. Ein letzter Teil fehlte, die Karten hatten nur PCIe-Steckplätze mit halber Höhe und zwei unserer Server verwenden Karten mit voller Höhe. Basierend auf dem PCI Bracket Generator von Thingiverse habe ich eine Steckplatzabdeckung für die Mellanox-Karten erstellt. Die ZIP-Datei enthält den OpenSCAD-Code sowie eine STL. Zum Drucken habe ich meinen Renkforce RF100 verwendet. Das Objekt wird diagonal auf die kleine Druckfläche des 3D Druckers gelegt, die Löcher nach unten zeigend und so werden die Teile schön ausgedruckt.

Drei 3D-gedruckte Schlitzabdeckungen hängen an einem Draht

Three 3D printed slot covers hanging on a wire

Nach einigem Testversuchen konnten wir die Teile gut montieren und alles funktioniert einwandfrei.

Anhang

Lizenz: 

GNU GPL 3

Jahr: 
2020
Kategorie in Projekte: 

Add new comment