[SOLVED] pg_auscaling adaptiert pg_num nicht (need pg_autoscaler enabled)

sigmarb

Well-Known Member
Nov 8, 2016
69
5
48
38
Hi Forum,

7 Knoten Ceph-Cluster - letzte 7er-Version. Ein HDD-Pool mit ~ 40 OSDs. Brutto-Gesamtkapazität ~ 250TB.
Unter Ceph -> Pools - ist pg_autoscaling angehakt.
Dennoch steht bei Optimal # PG - need pg_autoscaler enabled.
Auch ein # ceph osd pool autoscale-status
liefert keine Ausgabe.

Das hat zur Folge, dass mein Pool trotz haufenweise hinzugefügter HDDs, nicht mehr anwächst.
Setze ich manuell die Num # PGs, wächst der Pool.

Ist das ein Bug bzw. wie kann ich das weiter debuggen?

Vielen Dank.

Siegmar.
 
Last edited:
Welche Versionen? pveversion -v

Unter Ceph -> Pools - ist pg_autoscaling angehakt.
Für jeden Pool ist "PG Autoscale Mode" auf on?

Grundsätzlich klingt es so, dass das pg_autoscaler Modul nicht aktiv ist.

Wenn du ceph mgr module ls ausführst, in welcher Hierarchie findet sich der pg_autoscaler?

Evtl. musst du ihn noch aktivieren mit ceph mgr module enable pg_autoscaler
 
Danke. Ja ist für alle Pools auf 'on'.

Code:
{
    "always_on_modules": [
        "balancer",
        "crash",
        "devicehealth",
        "orchestrator",
        "pg_autoscaler",
        "progress",
        "rbd_support",
        "status",
        "telemetry",
        "volumes"

# ceph mgr module enable pg_autoscaler
module 'pg_autoscaler' is already enabled (always-on)
 
Ein Manager existiert und ist aktiv im Cluster?
 
services:
mon: 6 daemons, quorum MCHPLPX01,MCHPLPX02,MCHPLPX03,MCHPLPX04,MCHPLPX05,MCHPLPX07 (age 7h)
mgr: MCHPLPX03(active, since 6d), standbys: MCHPLPX04, MCHPLPX01, MCHPLPX02, MCHPLPX07, MCHPLPX05
 
Code:
# pveversion -v
proxmox-ve: 7.1-1 (running kernel: 5.13.19-3-pve)
pve-manager: 7.1-10 (running version: 7.1-10/6ddebafe)
pve-kernel-helper: 7.1-8
pve-kernel-5.13: 7.1-6
pve-kernel-5.4: 6.4-7
pve-kernel-5.13.19-3-pve: 5.13.19-6
pve-kernel-5.13.19-2-pve: 5.13.19-4
pve-kernel-5.13.19-1-pve: 5.13.19-3
pve-kernel-5.4.143-1-pve: 5.4.143-1
pve-kernel-5.4.106-1-pve: 5.4.106-1
ceph: 16.2.7
ceph-fuse: 16.2.7
corosync: 3.1.5-pve2
criu: 3.15-1+pve-1
glusterfs-client: 9.2-1
ifupdown: 0.8.36+pve1
ksm-control-daemon: 1.4-1
libjs-extjs: 7.0.0-1
libknet1: 1.22-pve2
libproxmox-acme-perl: 1.4.1
libproxmox-backup-qemu0: 1.2.0-1
libpve-access-control: 7.1-5
libpve-apiclient-perl: 3.2-1
libpve-common-perl: 7.1-2
libpve-guest-common-perl: 4.0-3
libpve-http-server-perl: 4.1-1
libpve-storage-perl: 7.0-15
libqb0: 1.0.5-1
libspice-server1: 0.14.3-2.1
lvm2: 2.03.11-2.1
lxc-pve: 4.0.11-1
lxcfs: 4.0.11-pve1
novnc-pve: 1.3.0-1
proxmox-backup-client: 2.1.3-1
proxmox-backup-file-restore: 2.1.3-1
proxmox-mini-journalreader: 1.3-1
proxmox-widget-toolkit: 3.4-5
pve-cluster: 7.1-3
pve-container: 4.1-3
pve-docs: 7.1-2
pve-edk2-firmware: 3.20210831-2
pve-firewall: 4.2-5
pve-firmware: 3.3-4
pve-ha-manager: 3.3-1
pve-i18n: 2.6-2
pve-qemu-kvm: 6.1.0-3
pve-xtermjs: 4.12.0-1
qemu-server: 7.1-4
smartmontools: 7.2-pve2
spiceterm: 3.2-2
swtpm: 0.7.0~rc1+2
vncterm: 1.7-1
zfsutils-linux: 2.1.2-pve1
 
Hmm, hast du schon versucht den/die MGR neu zu starten?

Wenn das auch nichts hilft, findet sich in den Logs was? /var/log/ceph/ceph.log zum autoscaler?
 
Hab mal alle manager neugestartet, leider kein Erfolg :/
ceph-logs enthalten keine Infos zu "auto oder autoscaler".

1644523405507.png
 
Aaah. Danke für den Screenshot. Mir hätte auch schneller einfallen können, zu fragen wie viele Pools es gibt und ob die nach Device Class aufgeteilt sind.

Du hast alle Pools bis auf den device_health_metrics auf eigene Device Classes gesperrt. Der device_health_metrics verwendet aber noch die default "replicated_rule" welche keine Einschränkung, auf die Device Class macht und somit über alle OSDs geht. Dadurch entstehen Überschneidungen die der Autoscaler so nicht einfach auflösen kann.

Weise dem Pool irgendeine der anderen Regeln zu (viel Platz braucht er eh nicht) und sobald alle Pools auf eine Device Class eingeschränkt sind, sollte der Autoscaler arbeiten können :)
 
Wow, sehr cool. Genau daran lag es :) Vielen Dank. Das heißt, jetzt ist der autoscaler aktiv und meine manuellen pg_num werden automatisch überschrieben bzw. ignoriert?

Code:
POOL                     SIZE  TARGET SIZE  RATE  RAW CAPACITY   RATIO  TARGET RATIO  EFFECTIVE RATIO  BIAS  PG_NUM  NEW PG_NUM  AUTOSCALE  PROFILE     
device_health_metrics  117.6M                3.0        212.8T  0.0000                                  1.0    1024              on         scale-down 
ssd-pool                1183G                3.0         5961G  0.5956                                  1.0     256              on         scale-down 
hdd-pool               27229G                3.0        212.8T  0.3748                                  1.0    2048              on         scale-down 
nvme-pool               2767G                3.0        21461G  0.3868                                  1.0     512              on         scale-down

1644569466231.png
 
Der autoscaler, wenn ON wird erst aktiv, wenn die optimal # of PGs um einen Faktor 3 anders ist als die aktuelle Zahl. Damit er weiß, wo es hingeht, ist es gut die target_ratio zu setzen. Das wäre in dem Fall bei allen auf 1 (den device health metrics kann man ignorieren).

Wenn der Unterschied weniger ist, wirst du die PG_num manuell setzen müssen.

Da du für den Device Health Metrics auch den Autoscaler eingeschaltet hast und dieser jetzt so viele PGs hat, wirst du das Profil des Autoscalers noch umstellen müssen.

Code:
ceph osd pool set autoscale-profile scale-up

Eine Zeitlang war der Default "scale-down", aber der Modus funktioniert aktuell noch nicht wirklich gut mit sehr kleinen Pools wie dem Device Health Metrics. Danach sollten die vorgeschlagenen Werte wieder dem entsprechen, was man sich erwartet.

Der HDD und SSD Pool sind auch schon ziemlich voll ;)
 
  • Like
Reactions: sigmarb
Wunderbar. Ich hab den Thread dann auch mal auf "Solved" gesetzt.
 
Wie können wir denn den ".mgr" Pool auf einen anderen Crush-Rule umziehen?
In der GUI den Pool doppelklicken oder markieren und auf Edit klicken. Wenn die "Advanced" Checkbox unten neben den OK Button aktiv ist, kann man die CRUSH rule ändern.

Via CLI laut Ceph doku:
Code:
ceph osd pool set <pool-name> crush_rule <rule-name>

Das gilt für "replicated" Pools. Bei EC Pools lässt sich das nicht machen da es pro Pool eine eigene Regel passend zu den EC parametern gibt. Da ists dann am einfachsten einen neuen Pool zu erstellen und mit "Move disk" die Disk images zu verschieben.
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!