153 lines
6.5 KiB
Markdown
153 lines
6.5 KiB
Markdown
|
# Proxmox-Cluster mit Ceph
|
||
|
|
||
|
## Basissetup
|
||
|
|
||
|
Siehe [Proxmox-Basissetup](proxmox.md)
|
||
|
|
||
|
## Clusterkonfiguration
|
||
|
|
||
|
1. Einrichtung des Clusters auf einer der Nodes über die GUI. Der Link sollte auf das schnelle Netz zeigen.
|
||
|
|
||
|
2. Die anderen Nodes über die GUI joinen.
|
||
|
|
||
|
3. Bei komplexeren Setups mit Failover etc. bietet es sich an, die Adressen der Hosts in den Hosts-Datei zu spezifizieren und die ```/etc/corosync/corosync.conf``` manuell anzupassen. Siehe [Seperate Cluster Network](https://pve.proxmox.com/wiki/Separate_Cluster_Network) im Proxmox-Wiki.
|
||
|
|
||
|
!!! warning
|
||
|
Bei jeder Änderung der ```/etc/corosync/corosync.conf``` *muss* die ```config_version``` erhöht werden, damit die Datei im Cluster aktiv wird!
|
||
|
|
||
|
4. Das Migration-Netzwerk sollte vom Cluster-Netzwerk getrenn sein und muss dann manuell festgelegt werden. Dies erfolgt in der ```/etc/pve/datacenter.cfg```:
|
||
|
|
||
|
``` json
|
||
|
migration: secure,network=192.168.10.0/24
|
||
|
```
|
||
|
|
||
|
## Ceph-Einrichtung
|
||
|
|
||
|
### Grundeinrichtung
|
||
|
1. Ceph auf dem ersten Node in der GUI installieren (Advanced aktivieren), Netzwerke passend auswählen, Replicas passend einstellen.
|
||
|
2. Ceph auf den anderen Nodes in der GUI installieren (Adcanced aktivieren).
|
||
|
3. Monitore, Manager und Metadata-Server auf den weiteren Nodes hinzufügen.
|
||
|
4. OSDs auf allen Nodes hinzufügen, dabei für HDD evtl. WAL+DB auf SSD auslagern sowie Encryption aktivieren.
|
||
|
!!! tip
|
||
|
Wenn WAL+DB auf einer Partition angelegt werden soll, muss zunächst das LVM vorbereitet werden, dazu:
|
||
|
1. Mit fdisk Partition anlegen (Typ 30)
|
||
|
2. LVM anlegen
|
||
|
``` bash
|
||
|
# Physival Volume erstellen
|
||
|
pvcreate /dev/sdX4
|
||
|
|
||
|
# Volumegroup erstellen
|
||
|
vgcreate ceph-db-0 /dev/sdX4
|
||
|
|
||
|
```
|
||
|
### 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:
|
||
|
``` 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.
|
||
|
|
||
|
### CephFS nutzen
|
||
|
Wenn man CephFS nutzt, können die angelegten Pools entsprechenden Crush-Regeln zugewiesen werden. Der Metadata-Pool sollte immer auf SSDs liegen!
|
||
|
|
||
|
1. Zugangsdaten auf dem Cluster anlegen
|
||
|
``` bash
|
||
|
# ceph fs authorize <cephfs-name> client.<nutzername>
|
||
|
# <verzeichnis> <berechtigung> ... <verzeichnis> <berechtigung>
|
||
|
ceph fs authorize cephfs client.daniel / rw
|
||
|
```
|
||
|
2. Den angezeigten Key in eine Datei auf dem Client kopieren
|
||
|
3. Vom Client aus mounten
|
||
|
``` bash
|
||
|
mount.ceph <monitor-ip>:/ /mnt -o name=daniel,secretfile=ceph.key
|
||
|
```
|
||
|
4. Oder in der /etc/fstab eintragen:
|
||
|
```
|
||
|
<mon1_ip>,<mon2_ip>,<mon3_ip>:/ /mnt/cephfs/ ceph name=<username>,secretfile=<keyfile>,noatime,_netdev 0 0
|
||
|
```
|
||
|
|
||
|
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.
|
||
|
|
||
|
| Eigenschaft | Disk | Mount |
|
||
|
| ---------------------------------------------- | --------------------------------- | --------------------------------- |
|
||
|
| einfachere Einrichtung | :material-check-circle:{ .green } | :material-close-circle:{ .red } |
|
||
|
| Backup in Proxmox möglich | :material-check-circle:{ .green } | :material-close-circle:{ .red } |
|
||
|
| als Systemlaufwerk nutzbar | :material-check-circle:{ .green } | :material-close-circle:{ .red } |
|
||
|
| Nutzung von verschiedenen Clients gleichzeitig | :material-close-circle:{ .red } | :material-check-circle:{ .green } |
|
||
|
| "unbegrenztes" Wachstum | :material-close-circle:{ .red } | :material-check-circle:{ .green } |
|
||
|
| geringfügig höhere Geschwindigkeit | :material-close-circle:{ .red } | :material-check-circle:{ .green } |
|