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

Konsequenz

DRBD-Metadaten werden auf einem separaten LVM Thick Pool auf NVMe gespeichert. Nutzdaten und Metadaten erhalten jeweils ein eigenes Blockdevice beziehungsweise eine eigene Partition. Die Trennung muss bereits bei der Talos-Volume-Planung berücksichtigt werden.