Trennung der DRBD-Metadaten
Beobachtung
DRBD verwaltet Metadaten, um den Replikationszustand und veränderte Datenblöcke nachzuverfolgen. Standardmäßig werden diese Metadaten zusammen mit den Nutzdaten auf dem zugrunde liegenden Blockdevice gespeichert. Ein Schreibzugriff auf ein DRBD-Volume kann dadurch mehrere Zugriffe auf dasselbe physische Medium verursachen.
Werden Nutzdaten und DRBD-Metadaten auf derselben langsamen Consumer-SSD gespeichert, konkurrieren beide Zugriffsmuster um die verfügbare IO-Leistung. Dies erhöht die Latenzen der Anwendung und kann sich während Resynchronisierungen besonders deutlich auswirken.
Erkenntnis
Externe DRBD-Metadaten ermöglichen die Trennung von Anwendungsdaten und Replikationsmetadaten. Im Cluster home-tamay-cloud werden die DRBD-Metadaten deshalb auf einem separaten NVMe-Bereich gespeichert. Die SATA-SSDs stehen überwiegend für Nutzdaten zur Verfügung, während häufige Metadatenoperationen von der geringeren Latenz der NVMe profitieren.
lvm-thinpool-1
SATA SSD
Nutzdaten
lvm-thinpool-nvme
NVMe
performante Nutzdaten
lvm-metadata
NVMe
DRBD-Metadaten
Die replizierten SATA-StorageClasses referenzieren den separaten Metadatenpool explizit.
property.linstor.csi.linbit.com/StorPoolNameDrbdMeta: "lvm-metadata"
Thick Storage für DRBD-Metadaten
DRBD-Metadaten werden häufig aktualisiert und benötigen kein Thin Provisioning. Ein Thin Pool würde zusätzliche Allokations- und Metadatenoperationen verursachen. Der Storage-Pool lvm-metadata wird deshalb als LVM Thick Pool bereitgestellt.
storagePools:
- name: lvm-metadata
lvmPool:
volumeGroup: vg_linstor_nvme
source:
hostDevices:
- /dev/nvme0n1p6
Die Nutzdatenpools lvm-thinpool-1 und lvm-thinpool-nvme verwenden dagegen LVM Thin, weil sie Thin Provisioning und CSI-Snapshots bereitstellen sollen.
Device-Zuordnung
Ein Blockdevice oder eine Partition darf nur einem der durch die Konfiguration angelegten Storage-Pools zugewiesen werden. Dasselbe Device kann nicht gleichzeitig den Datenpool und den separaten Metadatenpool bereitstellen.
Nicht zulässig:
/dev/nvme0n1p5
+-- lvm-thinpool-nvme
+-- lvm-metadata
Für NVMe-Nutzdaten und DRBD-Metadaten werden deshalb getrennte Partitionen verwendet.
/dev/nvme0n1p5 -> lvm-thinpool-nvme
/dev/nvme0n1p6 -> lvm-metadata
Talos stellt die Partitionen über getrennte RawVolumeConfig-Ressourcen bereit.
apiVersion: v1alpha1
kind: RawVolumeConfig
name: linstor
provisioning:
diskSelector:
match: disk.transport == 'nvme'
minSize: 40GiB
maxSize: 100GiB
apiVersion: v1alpha1
kind: RawVolumeConfig
name: linstor-metadata
provisioning:
diskSelector:
match: disk.transport == 'nvme'
minSize: 10GiB
maxSize: 20GiB