Storage-Cluster - Part 3: Ceph

Ceph gilt als leistungsfähige und hochverfügbare Storage-Plattform für größere Umgebungen. Im Homelab stellt sich allerdings schnell die Frage, ob sich der technische und organisatorische Aufwand lohnt - insbesondere dann, wenn die Hardware eher aus gebrauchten Thin-Clients, begrenztem Arbeitsspeicher und einem 1-Gbit-Netzwerk besteht.

In meinem Homelab ersetzt Ceph inzwischen GlusterFS. Die Performance liegt dabei deutlich unter dem, was Ceph in geeigneter Hardware leisten kann. Für meinen Anwendungsfall reicht sie jedoch aus.

Das hier ist also mehr oder weniger ein “poor mans ceph” oder auch ein “How-Not-To-Ceph”.

Ausgangslage

Das Storage-Projekt zieht sich ja schon eine Weile. Da ich bisher zu wenig RAM hatte (die drei Storage-Futros hatten jeweils 4 GB), musste GlusterFS erst einmal für hochverfügbaren Speicher genügen.

Ein wichtiger Teil des Umbaus war also die Erweiterung des Arbeitsspeichers. Kürzlich konnte ich 16-GB-Riegel für jeweils 50 Euro kaufen. Allerdings handelt es sich dabei um Single-Rank-Speicher, der in den Futro S740ern nicht läuft. Da ich allerdings für die Futros passenden RAM im Mini-PC verbaut habe und dieser mit Single-Rank-Speicher funktioniert, habe ich etwas herumgetauscht. Am Ende hat nun Host 4 8 GB und Host 5 und 6 jeweils 16 GB. Das genügt für ein kleines Ceph-Setup.

Für die OSDs (einzelne Speicher-Devices im Ceph-Sprech) verwende ich gebrauchte Enterprise-SSDs, genauer gesagt sind das Samsung SM863 mit jeweils 480 GB. Enterprise-SSDs sind meistens für den Dauerbetrieb ausgelegt und vertragen dauerhafte Schreiblasten. Ceph ist dafür bekannt, für SSD-Verschleiß zu sorgen, daher wird hier häufig von normalen Consumer-SSDs abgeraten.

Drei Futro S740 für Storage

Flaschenhälse

Ja, plural.

Es fängt mit dem CPUs an, kleine Celerons sind jetzt nicht unbedingt ideal für Ceph. Die HBAs haben durch die Nutzung im WLAN-Slot auch eine eher geringe maximale Bandbreite von ~500MB/s, und die teilen sich auch noch alle angeschlossenen SSDs/HDDs.

Der größte Flaschenhals ist aber klar das Netzwerk. Für Ceph wird minimum ein 10G-Netzwerk empfohlen, ich nutze hier 1G. Perspektivisch kommt noch 2,5G zum Einsatz, aber so weit bin ich noch nicht. Die reale Bandbreite liegt noch mal deutlich niedriger, da Ceph ja auch replizieren muss und ähnliches, am Ende hatte ich grob 30-40 MB/s an Bandbreite.

Konfiguration

Ich habe auf den SSDs jeweils ein LVM eingerichtet und ein 100GB LVM-Volume für Ceph erstellt. Damit kann ich den Rest der SSDs für lokalen Speicher mit Thin-LVM verwenden und bspw. LeilFS (früher SaunaFS) noch zusätzlich betreiben. Das kostet ein klein wenig Performance, aber das ist ein Trade-Off, den ich gerne eingehe, da ich die maximale Performance eh nicht erreichen kann.

Die Ceph-Pools sind mit min=2, size=3 konfiguriert. Ceph meldet also einen erfolgreichen Schreibvorgang (und erlaubt Schreiben auf dem Storage), solange die Aktion auf mindestens zwei OSDs erfolgreich war. Ich kann also den Verlust von einem OSD verkraften, ohne dass der Speicher offline geht.

Auf den beiden Storage-Futros mit 16 GB RAM läuft jeweils ein Ceph-Manager und -Monitor.

Ceph-Übersicht in Proxmox

Verwendung

In Proxmox ist Ceph als RBD direkt angebunden, dort liegen einige wenige VMs und LXCx inkl. konfiguriertem Failover.

Für Docker-Swarm habe ich CephFS eingerichtet und auf jeder Swarm-Node eingebunden. Die Performance ist grob doppelt so gut wie mit GlusterFS. Auch bei dem VMs und LXCs, die auch Ceph laufen, merke ich die Performance. Das ist weiterhi nicht ideal, aber funktioniert gut genug. High-Performance kriege ich hier aber definitiv nicht.

Feuerprobe

Ich hatte kürzlich den Fall, dass morgens bei einem der Ceph-Knoten der RAM vollgelaufen ist und sich damit aufgehängt hat. Ich war bei der Arbeit und habe dank fehlendem Monitoring davon nichts mitbekommen, nur ein durch Healthchecks ausgelöster Alert, dass bestimmte Backups (die von dem Host aus gemacht werden) nicht liefen. Zuhause habe ich dann nachmittags festgestellt, dass Ceph mit zwei von drei Knoten lief - alle Dienste waren aber wie gewünscht vollständig verfügbar. Nach einem Neustart des Servers hat Ceph dann innerhalb weniger Minuten - trotz 1 GBit/s Netzwerk - den dritten Server wieder auf Stand gebracht und alles war wieder grün.

Fazit

Mein Setup hat klare Nachteile. Ich schränke Ceph deutlich ein und gehe auch ein kleines Risiko bzgl. Datenverlust durch die geringe Zahl an OSDs ein. Das lässt sich aber mit regelmäßigen Backups gut mitigieren. Die Performance ist auch weit hinter dem, was Ceph kann.

Trotzdem bin ich mit dem Setup bislang glücklich. Ob es endlich das finale Storage-Setup ist oder ob ich noch andere Dinge teste, weiß ich noch nicht. Das wird sich in ein paar Monaten zeigen.