Ceph - max. Recovery & Backfilling Speed erhöhen

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Findet aufgrund eines Node- oder Datenträger-Ausfalls ein Ceph-Recovery / Backfilling statt, so möchte man unter Umständen, dass dieses mit maximaler Geschwindigkeit sich recovert. Hierfür gibt es unter Ceph zwei Optionen, die man bei den Datenträgern (OSDs) setzen kann, damit diese gleichzeitig mehrere Backfilling Requests annehmen und maximal bearbeiten können.

Wichtig: Das Ändern der Parameter kann die Load auf dem System wesentlich erhöhen und zu unerwünschten Verhalten wie z.B. eine Verschlechterung der Performance (Compute, Storage) führen.

Relevante Parameter

Die relevanten Parameter findet man in der Ceph-Dokumentation. [1]

## osd_max_backfills

The maximum number of backfills allowed to or from a single OSD. Note that this is applied separately for read and write operations.

## osd_recovery_max_active

The number of active recovery requests per OSD at one time. More requests will accelerate recovery, but the requests places an increased load on the cluster.

This value is only used if it is non-zero. Normally it is 0, which means that the hdd or ssd values (below) are used, depending on the type of the primary device backing the OSD.

## osd_recovery_max_active_hdd

The number of active recovery requests per OSD at one time, if the primary device is rotational.
default: 3

## osd_recovery_max_active_ssd

The number of active recovery requests per OSD at one time, if the primary device is non-rotational (i.e., an SSD).
default: 10

Aktuelle Parameter herausfinden

Als Beispiel wird hier die OSD.1 verwendet, die folgenden Kommandos müssen auf dem Ceph-Node ausgeführt werden, auf dem sich die OSD.1 befindet. Wenn man sich nicht sicher ist, kann man sich eine Auflistung aller OSDs mittels

root@PMX1:~# ceph osd tree

ID  CLASS  WEIGHT    TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         13.09845  root default                             
-3          4.36615      host PMX1                            
 0   nvme   0.72769          osd.0       up   1.00000  1.00000
 1   nvme   0.72769          osd.1       up   1.00000  1.00000
 2   nvme   0.72769          osd.2       up   1.00000  1.00000
 3   nvme   0.72769          osd.3       up   1.00000  1.00000
 4   nvme   0.72769          osd.4       up   1.00000  1.00000
 5   nvme   0.72769          osd.5       up   1.00000  1.00000
-5          4.36615      host PMX2                            
 6   nvme   0.72769          osd.6       up   1.00000  1.00000
 7   nvme   0.72769          osd.7       up   1.00000  1.00000
 8   nvme   0.72769          osd.8       up   1.00000  1.00000
 9   nvme   0.72769          osd.9       up   1.00000  1.00000
10   nvme   0.72769          osd.10      up   1.00000  1.00000
11   nvme   0.72769          osd.11      up   1.00000  1.00000
-7          4.36615      host PMX3                            
12   nvme   0.72769          osd.12      up   1.00000  1.00000
13   nvme   0.72769          osd.13      up   1.00000  1.00000
14   nvme   0.72769          osd.14      up   1.00000  1.00000
15   nvme   0.72769          osd.15      up   1.00000  1.00000
16   nvme   0.72769          osd.16      up   1.00000  1.00000
17   nvme   0.72769          osd.17      up   1.00000  1.00000

anzeigen lassen. Hier sieht man die OSD.1 befindet sich auf dem Host PMX1.

 
root@PMX1:~# ceph daemon osd.1 config get osd_max_backfills
{
    "osd_max_backfills": "1"
}
root@PMX1:~#  ceph daemon osd.1 config get osd_recovery_max_active
{
    "osd_recovery_max_active": "0"
}

Neue Parameter setzen

Mittels dieser Kommandos kann man die Parameter entsprechend anpassen. Die Parameter-Values können je nach System variieren, ein System mit NVMes kann z.B. mehr OSD-Max-Backfills als ein System mit HDDs. Diese Kommandos ändern die Parameter auf allen verfügbaren OSDs im Cluster.

ceph tell 'osd.*' injectargs '--osd-max-backfills 16'
ceph tell 'osd.*' injectargs '--osd-recovery-max-active 4'

Parameter zurücksetzen

Ggf. möchte man nach dem erfolgreichem Recovery wieder die Default-Parameter setzen - hierzu sollte man die Parameter aus dem Abschnitt "Aktuelle Parameter herausfinden" verwenden.

ceph tell 'osd.*' injectargs '--osd-max-backfills 1'
ceph tell 'osd.*' injectargs '--osd-recovery-max-active 0'

Einzelnachweise


Foto Jonas Sterr.jpg

Autor: Jonas Sterr

Ich beschäftige mich mit den Themen Software Defined Storage, Proxmox Virtualisierung auf Basis von KVM, QEMU & Ceph im Produktmanagement der Thomas-Krenn.AG in Freyung. Proxmox ist meine absolute Leidenschaft und ich freue mich gerne über Kontaktanfragen und einen Austausch auf LinkedIn.


Das könnte Sie auch interessieren

Ceph Perfomance Guide - Sizing & Testing
Ceph: a password is required command=nvme error
Monitoring eines Proxmox VE Ceph Hosts mit checkmk