Ceph zu viele pgs pro osd: alles was Sie wissen müssen

8

Ich bekomme beide von diesen Fehlern zur gleichen Zeit. Ich kann die PG-Anzahl nicht verringern und kann nicht mehr Speicher hinzufügen.

Dies ist ein neuer Cluster, und ich habe diese Warnung erhalten, als ich etwa 40 GB dazu hochgeladen habe. Ich nehme an, weil radosgw eine Reihe von Pools erstellt hat.

Wie kann ceph zu viele pgs pro osd haben, aber mehr Objekt pro pg als der Durchschnitt mit einem zu wenigen pgs Vorschlag?

%Vor%

Mit rbd und radosgw, nichts Besonderes.

    
Jason Leitch 20.09.2016, 08:54
quelle

1 Antwort

20

Ich werde meine eigene Frage in der Hoffnung beantworten, dass sie etwas Licht auf das Problem oder ähnliche Missverständnisse von Ceph Interna wirft.

HEALTH_WARN zu viele PGs pro OSD (352 & gt; max 300) ein für allemal reparieren

Wenn Sie balancing Placement-Gruppen verwenden, müssen Sie Folgendes berücksichtigen:

Daten, die wir brauchen

  • pgs pro osd
  • pro Pool
  • Pools per osd
  • die Crush-Karte
  • vernünftiger Standardwert pg und pgp num
  • Replikationsanzahl

Ich werde mein Setup als Beispiel verwenden und Sie sollten es als Vorlage für Ihre eigenen verwenden können.

Daten, die wir haben

  • num oosds: 4
  • Anzahl Seiten: 2
  • pgs per osd: ???
  • pro Pool: ???
  • Pools per osd: 10
  • vernünftiger Standard pg und pgp num: 64 (... oder ist das?)
  • Replikationsanzahl: 2 (standortübergreifende Replikation)
  • die Crush-Karte

ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY root ourcompnay site a rack a-esx.0 host prdceph-strg01 osd.0 up 1.00000 1.00000 osd.1 up 1.00000 1.00000 site b rack a-esx.0 host prdceph-strg02 osd.2 up 1.00000 1.00000 osd.3 up 1.00000 1.00000

Unser Ziel ist es, die '???' oben mit dem zu füllen, was wir für einen HEALTH OK Cluster benötigen. Unsere Pools werden vom Radogateway erstellt, wenn es initialisiert wird. Wir haben ein einzelnes default.rgw.buckets.data , in dem alle Daten gespeichert werden, der Rest der Pools ist administrativ und intern zu cephs Metadaten und Buchführung.

PGs pro osd (was ist sowieso ein vernünftiger Standard ???)

In der Dokumentation sollten wir diese Berechnung verwenden, um unsere pg-Anzahl per osd zu bestimmen:

%Vor%

Es wird gesagt, dass das Aufrunden optimal ist. Mit unserem derzeitigen Setup wäre es also:

%Vor%
  • osd..1 ~ = 256
  • osd.2 ~ = 256
  • osd.3 ~ = 256
  • osd.4 ~ = 256

Dies ist die empfohlene max Anzahl von pgs pro osd. Also ... was hast du eigentlich zur Zeit? Und warum funktioniert es nicht? Und wenn Sie ein setzen "vernünftiger Standard" und verstehen die oben genannten Warum nicht funktioniert es !!! & gt; = [

Wahrscheinlich , ein paar Gründe. Wir müssen verstehen, was diese "angemessenen Voreinstellungen" tatsächlich bedeuten, wie Ceph sie anwendet und wo. Man könnte das oben genannte falsch verstehen, dass ich einen neuen Pool wie folgt erstellen könnte:

ceph osd pool create <pool> 256 256

oder ich könnte sogar denken, ich könnte auf Nummer sicher gehen und der Dokumentation folgen, die besagt, dass (128 pgs for < 5 osds) folgendes verwenden kann:

ceph osd pool create <pool> 128 128

Das ist falsch, flach. Weil es in keiner Weise die Beziehung oder das Gleichgewicht zwischen dem, was ceph mit diesen Zahlen tut, erklärt technisch ist die richtige Antwort:

ceph osd pool create <pool> 32 32

Und lassen Sie mich erklären warum:

Wenn Sie, wie ich, Ihren Cluster mit den 'normalen Voreinstellungen' (128 pgs for < 5 osds) versorgt haben, sobald Sie versucht haben, etwas mit Rados zu tun, haben Sie eine ganze Reihe von Pools erstellt und Ihr Cluster ist ausgefischt. Der Grund ist, weil ich die Beziehung zwischen allem, was oben erwähnt wurde, missverstanden habe.

  • Pools: 10 (erstellt von Rados)
  • pgs pro Pool: 128 (empfohlen in Dokumenten)
  • osds: 4 (2 pro Website)

10 * 128 / 4 = 320 pgs per osd

Diese ~320 könnte eine Anzahl von pgs pro osd in meinem Cluster sein. Aber Ceph könnte diese anders verteilen. Was genau passiert und ist weit über dem oben angegebenen 256 max pro osd . Die HEALTH WARN meines Clusters ist HEALTH_WARN too many PGs per OSD (368 > max 300) .

Verwenden Sie diesen -Befehl Wir können die Beziehung zwischen den Zahlen besser sehen:

%Vor%

Es gibt eine direkte Korrelation zwischen der Anzahl der Pools, die Sie haben, und der Anzahl der Placement-Gruppen, die ihnen zugewiesen sind. Ich habe 11 Pools in dem Schnipsel oben und sie haben jeweils 128 pgs und das ist zu viel !! Meine vernünftigen Voreinstellungen sind 64! Also was ist passiert ??

Ich habe missverstanden, wie die "angemessenen Voreinstellungen" verwendet wurden. Wenn ich meinen Standardwert auf 64 setze, kann ich sehen, dass Ceph meine Crush Map berücksichtigt hat, wo Ich habe eine Fehlerdomäne zwischen Site a und Site b. Ceph muss sicherstellen, dass alles, was vor Ort ist, zumindest auf der Baustelle zugänglich ist. B.

FALSCH

%Vor%

Wir benötigten eine Gesamtsumme von 64 pgs pro Pool , sodass unsere vernünftigen Standardeinstellungen von Anfang an auf 32 gesetzt sein sollten!

Wenn wir ceph osd pool create <pool> 32 32 verwenden, dann bedeutet dies, dass die Beziehung zwischen unseren pgs pro Pool und pgs pro osd mit diesen 'angemessenen Voreinstellungen' und unseren empfohlenen < strong> max pgs pro osd beginnen sinnvoll:

Du hast also deinen Cluster zerstört ^ _ ^

Mach dir keine Sorgen, wir werden es reparieren. Das Verfahren, für das ich Angst habe, kann in Bezug auf Risiko und Zeit variieren, je nachdem, wie groß Ihr Cluster ist. Aber der einzige Weg Um das zu ändern, müssen Sie mehr Speicher hinzufügen, damit die Placement-Gruppen über eine größere Fläche verteilt werden können. ODER wir müssen alles hinüber bewegen neu erstellte Pools.

Ich zeige ein Beispiel für das Verschieben des Pools default.rgw.buckets.data :

%Vor%

Erstellen Sie einen neuen Pool mit der korrekten Anzahl von pg:

ceph osd pool create $new_pool 32

Kopiere den Inhalt des alten Pools in den neuen Pool:

rados cppool $old_pool $new_pool

Entferne den alten Pool:

ceph osd pool delete $old_pool $old_pool --yes-i-really-really-mean-it

benenne den neuen Pool in 'default.rgw.buckets.data'

um

ceph osd pool rename $new_pool $old_pool

Nun könnte es eine sichere Sache sein, Ihre radosgws neu zu starten.

SCHLIESSLICH RICHTIG

%Vor%

Wie Sie sehen können, sind meine Pool-Nummern inkrementiert, da sie von der Pool-ID hinzugefügt wurden und neue Kopien sind. Und unser Gesamt-Pgs pro osd liegt weit unter dem ~ 256 , was uns Raum gibt, um benutzerdefinierte Pools hinzuzufügen, falls erforderlich.

%Vor%

Nun sollten Sie Ihren Ceph-Cluster mit dem testen, was Ihnen zur Verfügung steht. Persönlich habe ich eine Menge Python über Boto geschrieben, die die Infrastruktur testet und Bucket-Statistiken und -Metadaten ziemlich schnell zurückgibt. Sie haben mir versichert, dass das Cluster wieder funktionsfähig ist, ohne dass es jemals Probleme gegeben hat. Viel Glück!

Fixing Pool default.rgw.buckets.data hat viel mehr Objekte pro pg als der Durchschnitt (zu wenig pgs?) ein für allemal

Das bedeutet wörtlich, Sie müssen die pg und pgp num Ihres Pools erhöhen. Also mach es. Mit allem, was oben erwähnt wurde. Beachten Sie dabei jedoch, dass der Cluster das Verfüllen startet und Sie sich das ansehen können process%: watch ceph -s in einem anderen Terminalfenster oder Bildschirm.

%Vor%

Bewaffnet mit dem Wissen und dem Vertrauen in das System, das im obigen Segment bereitgestellt wird, können wir die Beziehung und den Einfluss einer solchen Veränderung auf den Cluster klar verstehen.

%Vor%

Können Sie raten, welche Pool-ID default.rgw.buckets.data ist? haha ^ _ ^

    
Jason Leitch 22.09.2016, 10:50
quelle

Tags und Links