Neben den üblichen "Replicated Pools" lassen sich in CEPH ebenfalls Erasure Coding Pools anlegen. Doch warum sollte man Erasure Coding überhaupt verwenden und was bringt es mir?
Grundlagen
Erasure Coding Pools optimieren den nutzbaren Speicherplatz im Vergleich zu der üblichen Replica. Die Replica lässt sich im Grunde mit einem RAID 1 vergleichen wohingegen Erasure Coding mehr ein RAID 5 bzw. RAID 6 abbildet.
Für Erasure Coding sind zwei Werte ausschlaggebend, das ist "K
" und "M
", zusätzlich wird hier noch der Begriff "chunk
" verwendet.
Was ist ein "Chunk
"?
Der Chunk
gibt den entsprechenden Datenblock als solchen zurück. Im Recovery Fall muss das Objekt als solches wiederhergestellt werden, da bei einem OSD Ausfall davon auszugehen ist, dass mindestens eine Kopie von K
oder M
nicht mehr vorhanden ist, können die restlichen Kopien von K
oder M
zur Rekonstruktion verwendet werden bzw. werden neu errechnet. Letztlich erhält man so wieder das ursprüngliche und originale Objekt.
Was ist "K
"?
Bei "K
" handelt es sich um den "Data Chunk". Dieser gibt an in wie viele Teile das originale Objekt geteilt wird. Wenn z.B. K
= 3 wird ein 3M Objekt in 3(K
) 1M aufgeteilt.
Was ist "M
"?
Bei "M
" handelt es sich um den "Coding Chunk". Dieser wird errechnet und auf anderen OSDs abgelegt wie "K
", zeitgleich gibt dieser auch an, wie viele OSDs maximal ausfallen können ohne permanenten Datenverlust. Wenn M
= 2 ist, so können maximal 2 OSDs ohne Datenverlust ausfallen.
Mindestanforderungen
Damit man Erasure Coding auch produktiv einsetzen kann, sollte man M
immer mindestens auf 2 setzen. Bereits bei den Einstellungen K
= 3 und M
= 2 werden mindestens 5 Storage Server benötigt. Die Anzahl der Server ergibt sich dabei immer aus K
+ M
= Anzahl der Storage Server. Die Effizienz bei K
= 3 und M
= 2 liegt bereits bei 60%, mit K
= 4 und M
= 2 sind es bereits 66,67%. In einem größeren CEPH Storage könnte man so auch K
= 17 und M
= 3 einstellen und liegt damit bei 85%.
Je Größer die Anzahl K
also ist, desto höher ist auch die Effizienz der Speichernutzung. Jedoch hat dies auch wieder den Nachteil, dass bei einem Schreibvorgang alle involvierten OSDs (K
+ M
) geupdatet werden müssen, was also zu einem Performance Problem werden könnte. Die Kombination dieser Werte sollte daher zuvor evaluiert werden um hier die bestmöglichen Vorteile erzeugen zu können.
Beliebte Kombinationen sind K
= 4 und M
= 2 mit 66,67% Effizienz (dafür werden mindestens 6 Storage Server benötigt) und K
= 8 und M
= 3 mit 72,73% Effizienz (dafür werden mindestens 11 Storage Server benötigt).
Praktische Beispiele
Als Beispiel nehmen wir einen CEPH Storage mit 30 OSDs mit je 960GB Speicherplatz, dann stehen gesamt 28,8TB zur Verfügung.
Zum Schutz der Daten wird eine Replica von 3 verwendet, so können zwei OSDs ausfallen ohne einen Datenverlust. Somit stehen von den 28,8TB noch lediglich 9,6TB Speicherplatz zur Verfügung, der Rest wird für die Replica verwendet.
Nehmen wir selbes Beispiel bei Erasure Coding mit K
= 3 und M
= 2, so können von den Gesamt 28,8TB noch 14,4TB genutzt werden. Auch hier können zwei OSDs ausfallen ohne einen Datenverlust. Dieser Pool wäre von der Ausfallsicherheit gesehen äquivalent zur normalen 3-fachen Replication, doch benötigt dieser 4,8TB weniger Speicherplatz, der nun anderweitig verwendet werden kann.
Der nutzbare Speicherplatz lässt sich mit der Formel "Anzahl OSDs * (K
/(K
+M
)) * Größe der OSD * Nearfull Ratio" errechnen. Praktisch könnte das ganze für unseren Fall hier dann so aussehen "(30 * (3/(3+2)) * 960) * 0,85", dies ergibt 14.688 GB Speicherplatz, welcher im besten Fall nutzbar ist.