Ceph

Benchmark Ceph Cluster Performance¶

Eine der häufigsten Fragen, die wir hören, lautet: “Wie überprüfe ich, ob mein Cluster mit maximaler Leistung ausgeführt wird?”. Wundern Sie sich nicht mehr – in diesem Handbuch führen wir Sie durch einige Tools, mit denen Sie Ihren Ceph-Cluster vergleichen können.

HINWEIS: Die Ideen in diesem Artikel basieren auf dem Blogbeitrag von Sebastian Han, dem Blogbeitrag von TelekomCLOUD und Beiträgen von Ceph-Entwicklern und -Ingenieuren.

Abrufen von Baseline-Leistungsstatistiken¶

Beim Benchmarking dreht sich grundsätzlich alles um den Vergleich. Sie werden nicht wissen, ob Ihr Ceph-Cluster eine unterdurchschnittliche Leistung erbringt, es sei denn, Sie ermitteln zuerst die maximal mögliche Leistung. Bevor Sie mit dem Benchmarking Ihres Clusters beginnen, müssen Sie daher grundlegende Leistungsstatistiken für die beiden Hauptkomponenten Ihrer Ceph-Infrastruktur abrufen: Ihre Festplatten und Ihr Netzwerk.

Benchmark Ihrer Festplatten¶

Der einfachste Weg, Ihre Festplatte zu benchmarken, ist mit dd. Verwenden Sie den folgenden Befehl, um eine Datei zu lesen und zu schreiben, und denken Sie daran, den Parameter oflag hinzuzufügen, um den Cache der Festplattenseite zu umgehen:
shell> dd if=/dev/zero of=here bs=1G count=1 oflag=direct

Notieren Sie sich die letzte bereitgestellte Statistik, die die Festplattenleistung in MB/s angibt. Führen Sie diesen Test für jede Festplatte in Ihrem Cluster durch und notieren Sie sich die Ergebnisse.

Benchmark Ihres Netzwerks¶

Ein weiterer wichtiger Faktor, der die Leistung von Ceph Cluster beeinflusst, ist der Netzwerkdurchsatz. Ein gutes Tool dafür ist iperf, das eine Client-Server-Verbindung verwendet, um die TCP- und UDP-Bandbreite zu messen.

Sie können iperf mit apt-get install iperf oder yum install iperf installieren.

iperf muss auf mindestens zwei Knoten in Ihrem Cluster installiert sein. Starten Sie dann auf einem der Knoten den iperf-Server mit dem folgenden Befehl:

shell> iperf -s

Starten Sie den Client auf einem anderen Knoten mit dem folgenden Befehl und denken Sie daran, die IP-Adresse des Knotens zu verwenden, auf dem sich der iperf-Server befindet:

shell> iperf -c 192.168.1.1

Beachten Sie die Bandbreitenstatistik in Mbit / s, da dies den maximalen Durchsatz angibt, der von Ihrem Netzwerk unterstützt wird.

Nachdem Sie nun einige Baseline-Zahlen haben, können Sie mit dem Benchmarking Ihres Ceph-Clusters beginnen, um festzustellen, ob es Ihnen eine ähnliche Leistung bietet. Benchmarking kann auf verschiedenen Ebenen durchgeführt werden: Sie können ein Low-Level-Benchmarking des Speicherclusters selbst durchführen, oder Sie können ein High-Level-Benchmarking der wichtigsten Schnittstellen durchführen, z. B. Blockgeräte und Objektgateways. In den folgenden Abschnitten wird jeder dieser Ansätze erläutert.

HINWEIS: Bevor Sie einen der Benchmarks in den folgenden Abschnitten ausführen, löschen Sie alle Caches mit einem Befehl wie diesem:
shell> sudo echo 3 | sudo tee /proc/sys/vm/drop_caches && sudo sync

Benchmark eines Ceph-Speicherclusters¶

Ceph enthält den Befehl rados bench, der speziell zum Benchmark eines RADOS-Speicherclusters entwickelt wurde. Um es zu verwenden, erstellen Sie einen Speicherpool und verwenden Sie dann rados bench, um einen Schreib-Benchmark durchzuführen, wie unten gezeigt.

Der Befehl rados ist in Ceph enthalten.

shell> ceph osd pool create scbench 128 128
shell> rados bench -p scbench 10 write --no-cleanup

Dies erstellt einen neuen Pool mit dem Namen ‘scbench’ und führt dann einen Schreib-Benchmark für 10 Sekunden durch. Beachten Sie die Option –no-cleanup , die einige Daten hinterlässt. Die Ausgabe gibt Ihnen einen guten Indikator dafür, wie schnell Ihr Cluster Daten schreiben kann.
Es stehen zwei Arten von Lese-Benchmarks zur Verfügung: seq für sequentielle Lesevorgänge und rand für zufällige Lesevorgänge. Verwenden Sie die folgenden Befehle, um einen Lese-Benchmark durchzuführen:
shell> rados bench -p scbench 10 seq
shell> rados bench -p scbench 10 rand

Sie können auch den Parameter -t hinzufügen, um die Parallelität von Lese- und Schreibvorgängen zu erhöhen (standardmäßig 16 Threads), oder den Parameter -b, um die Größe des zu schreibenden Objekts zu ändern (standardmäßig 4 MB). Es ist auch eine gute Idee, mehrere Kopien dieses Benchmarks für verschiedene Pools auszuführen, um zu sehen, wie sich die Leistung mit mehreren Clients ändert.
Sobald Sie über die Daten verfügen, können Sie die Lese- und Schreibstatistiken des Clusters mit den zuvor durchgeführten Benchmarks nur für Festplatten vergleichen, feststellen, wie groß eine Leistungslücke ist (falls vorhanden), und nach Gründen suchen.
Mit diesem Befehl können Sie die vom Write-Benchmark zurückgelassenen Benchmark-Daten bereinigen:

shell> rados -p scbench cleanup

Benchmark eines Ceph-Blockgeräts¶

Wenn Sie ein Fan von Ceph-Blockgeräten sind, gibt es zwei Tools, mit denen Sie deren Leistung messen können. Ceph enthält bereits den Befehl rbd bench, aber Sie können auch das beliebte E / A-Benchmarking-Tool fio verwenden, das jetzt eine integrierte Unterstützung für RADOS-Blockgeräte bietet.

Der Befehl rbd ist in Ceph enthalten. Die RBD-Unterstützung in fio ist relativ neu, daher müssen Sie sie aus dem Repository herunterladen und dann mit kompilieren und installieren_ configure && make && make install_ . Beachten Sie, dass Sie das librbd-dev-Entwicklungspaket mit apt-get install librbd-dev oder yum install librbd-dev installieren müssen, bevor Sie fio kompilieren, um die RBD-Unterstützung zu aktivieren.

Bevor Sie jedoch eines dieser beiden Tools verwenden, erstellen Sie ein Blockgerät mit den folgenden Befehlen:
shell> ceph osd pool create rbdbench 128 128
shell> rbd create image01 --size 1024 --pool rbdbench
shell> sudo rbd map image01 --pool rbdbench --name client.admin
shell> sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
shell> sudo mkdir /mnt/ceph-block-device
shell> sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device

Der Befehl rbd bench-write generiert eine Reihe sequenzieller Schreibvorgänge in das Image und misst den Schreibdurchsatz und die Latenz. Hier ein Beispiel:

shell> rbd bench-write image01 --pool=rbdbench

Oder Sie können fio verwenden, um Ihr Blockgerät zu benchmarken. Ein Beispiel rbd.die fio-Vorlage ist im fio-Quellcode enthalten, der über librbd einen 4K-Random-Write-Test gegen ein RADOS-Blockgerät durchführt. Beachten Sie, dass Sie die Vorlage mit den richtigen Namen für Ihren Pool und Ihr Gerät aktualisieren müssen, wie unten gezeigt.

ioengine=rbd
clientname=admin
pool=rbdbench
rbdname=image01
rw=randwrite
bs=4k

iodepth=32

Führen Sie dann fio wie folgt aus:
shell> fio examples/rbd.fio

Benchmark eines Ceph Object Gateways¶

Wenn es um das Benchmarking des Ceph Object Gateways geht, ist swift-bench, das Benchmarking-Tool, das in OpenStack Swift enthalten ist, genau das Richtige für Sie. Das Swift-Bench-Tool testet die Leistung Ihres Ceph-Clusters, indem es Client-PUT- und GET-Anforderungen simuliert und deren Leistung misst.

Sie können swift-bench mit pip install swift installieren && pip install swift-bench.

Um swift-bench zu verwenden, müssen Sie zuerst einen Gateway-Benutzer und einen Unterbenutzer erstellen, wie unten gezeigt:
shell> sudo radosgw-admin user create --uid="benchmark" --display-name="benchmark"
shell> sudo radosgw-admin subuser create --uid=benchmark --subuser=benchmark:swift
--access=full
shell> sudo radosgw-admin key create --subuser=benchmark:swift --key-type=swift
--secret=guessme
shell> radosgw-admin user modify --uid=benchmark --max-buckets=0

Als nächstes erstellen Sie eine Konfigurationsdatei für swift-bench auf einem Client-Host, wie unten beschrieben. Denken Sie daran, die Authentifizierungs-URL so zu aktualisieren, dass sie der Ihres Ceph Object Gateways entspricht, und den richtigen Benutzernamen und die richtigen Anmeldeinformationen zu verwenden.

auth = http://gateway-node/auth/v1.0
user = benchmark:swift
key = guessme
auth_version = 1.0

Sie können jetzt einen Benchmark wie folgt ausführen. Verwenden Sie den Parameter -c, um die Anzahl der gleichzeitigen Verbindungen anzupassen (in diesem Beispiel werden 64 verwendet), und den Parameter -s, um die Größe des zu schreibenden Objekts anzupassen (in diesem Beispiel werden 4K-Objekte verwendet). Die Parameter -n und -g steuern die Anzahl der zu setzenden bzw. zu erhaltenden Objekte.
shell> swift-bench -c 64 -s 4096 -n 1000 -g 100 /tmp/swift.conf

Obwohl Swift-Bench die Leistung in der Anzahl der Objekte / s misst, ist es einfach genug, diese in MB / s umzuwandeln, indem es mit der Größe jedes Objekts multipliziert wird. Sie sollten sich jedoch davor hüten, dies direkt mit den zuvor erhaltenen Baseline-Datenträgerleistungsstatistiken zu vergleichen, da eine Reihe anderer Faktoren diese Statistiken ebenfalls beeinflussen, z. B.:

  • Replikationsgrad (und Latenzaufwand)
  • Vollständige Datenjournalschreibvorgänge (in einigen Situationen durch Zusammenführen von Journaldaten ausgeglichen)
  • fsync auf den OSDs, um die Datensicherheit zu gewährleisten
  • Metadaten-Overhead für die Speicherung von Daten in RADOS
  • latenz-Overhead (Netzwerk, ceph usw.) macht Readahead wichtiger

TIPP: Wenn es um die Leistung des Objekt-Gateways geht, gibt es keine feste Regel, mit der Sie die Leistung einfach verbessern können. In einigen Fällen konnten die Ceph-Ingenieure mit cleveren Caching- und Koaleszenzstrategien eine bessere Leistung als die Baseline erzielen, während in anderen Fällen die Leistung des Objekt-Gateways aufgrund von Latenz, fsync und Metadaten-Overhead niedriger war als die der Festplatte.

Fazit¶

Es gibt eine Reihe von Tools, um einen Ceph-Cluster auf verschiedenen Ebenen zu bewerten: Festplatte, Netzwerk, Cluster, Gerät und Gateway. Sie sollten nun einen Einblick haben, wie Sie den Benchmarking-Prozess angehen und mit der Generierung von Leistungsdaten für Ihren Cluster beginnen können. Toi toi toi!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.