Guide: Proxmox: Erasurecode hinzugefügt
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Daniel Spittank 2022-05-03 15:02:16 +02:00
parent 46e2a1a793
commit d45e6b54d0

View file

@ -211,14 +211,55 @@ migration: secure,network=192.168.10.0/24
```
### Pools einrichten
#### Replikation verwenden
1. Wenn SSDs und HDDs zum Einsatz kommen, können unterschiedliche Crush-Regeln angelegt werden, um Pools für schnellen und langsamen Speicher zu erstellen:
1. Wenn SSDs und HDDs zum Einsatz kommen, können unterschiedliche Crush-Regeln angelegt
werden, um Pools für schnellen und langsamen Speicher zu erstellen:
``` bash
ceph osd crush rule create-replicated replicated_hdd default host hdd
ceph osd crush rule create-replicated replicated_ssd default host ssd
```
2. Pools anlegen und dabei die Crush-Regeln und die Redundanz (Replicas = Original + Anzahl Kopien) passend auswählen.
#### Erasurecode verwenden
Es ist auch möglich, Erasurecode zu verwenden. So werden Daten nicht
vollständig repliziert, sondern Prüfsummen erstellt (ähnlich zu RAID5
etc.). Dies benötigt mehr Rechenleistung und etwas bis erheblich
weniger Speicherplatz. Hier wird von einer Konfiguration analog zu
RAID5 ausgegangen, d.h. auf zwei Datenblöcke (k=2) kommt ein
Paritätsblock (m=1). Somit kann der Ausfall einer Einheit kompensiert
werden. Dies ist nur für unwichtige Daten sinnvoll, denn es ist sehr
wahrscheinlich, dass beim Recovery eine zweite Einheit ausfällt
(analog zu RAID5). Es geht also lediglich darum, den Betrieb aufrecht
zu erhalten. Notfalls kann später ein vorhandenes Backup eingespielt
werden.
Dieses Problem lässt sich durch weitere Nodes / OSDs verkleinern, sodass
es nicht mehr so kritisch wie bei einem RAID5 ist. Außerdem können
natürlich mehr redundante Blöcke vorgehalten werden (m>1).
k+m entspricht der Anzahl der benötigten Nodes (wenn die Fehlerdomain auf
'host' eingestellt wird).
``` bash
# EC-Profil anlegen
ceph osd erasure-code-profile set erasure_medien_hdd\
plugin=jerasure k=2 m=1 technique=reed_sol_van\
crush-root=default crush-failure-domain=host\
crush-device-class=hdd
# Pool erstellen
ceph osd pool create cephfs_ec_data 128 erasure erasure_medien_hdd
# Overwrites für CephFS-Nutzung erlauben
ceph osd pool set cephfs_ec_data allow_ec_overwrites true
# Gleichzeitiges lesen von mehreren OSDs
ceph osd pool set cephfs_ec_data fast_read true
```
### VM-Disks anlegen
Die Pools können direkt als Storage genutzt werden. Wichtig ist, dass als Dateisystem XFS verwendet wird. Dies ist etwas schneller und deutlich stabiler in den Transferraten als ext4. Außerdem kann man zur Leistungssteigerung den Writeback-Cache aktivieren und den IO-Thread aktivieren (dazu als SCSI-Controller in der VM _Virtio SCSI single_ auswählen.
@ -243,6 +284,31 @@ mount.ceph <monitor-ip>:/ /mnt -o name=daniel,secretfile=ceph.key
Sehr viele weitere Einstellungen und sehr differenzierte Berechtigungen sind möglich. Siehe [Client-Auth](https://docs.ceph.com/en/latest/cephfs/client-auth/).
### CephFS mit Erasurecode-Pool nutzen
Es kann, aufgrund des geringeren Speicherplatzbedarfs, sinnvoll sein, für den
CephFS-Pool einen Erasurecode-Pool zu verwenden. Dies ist nur für den
Datenpool möglich, der Metadatenpool muss immer ein replizierter Pool sein.
``` bash
# Zu CephFS hinzufügen
ceph fs add_data_pool cephfs cephfs_ec_data
```
Auf dem Client im (als client.admin) gemounteten Filesystem:
``` bash
# Unterverzeichnis anlegen
mkdir ec
# Verzeichnis an neuen Pool binden
setfattr -n ceph.dir.layout.pool -v cephfs_ec_data ec
```
### VM-Disk vs. gemountetes CephFS
Man kann statt eine VM-Disk anzulegen auch ein CephFS direkt mounten. Dies hat verschiedene Vor- und Nachteile.