fragen stichworte

Optimierung von RAID 5 für die Verwendung mit BackupPC

Ich verwende einen BackupPC-Server mit einem Hardware-RAID 5 für den Hauptspeicher der Sicherungen. Da die Maschine mit einem kleinen Budget erstellt wurde, handelt es sich bei dem Controller um einen 3Ware 9500S-4LP für den PCI-Port, und die Laufwerke sind langsame 200 GB-SATA-Typen.

Trotz dieser Hardware sehe ich eine weitaus schlechtere Leistung als erwartet. Die Clients und der Backup-Server verwenden rsync als Transport über ein Gigabit-Netzwerk, das niemals in der Nähe der Sättigung ist. Das Sichern einer normalen Linux-Installation von etwa 5 GB dauert mehr als drei Stunden.

Also habe ich den Server mit dem Prozessmonitor atop überwacht. Es zeigte sich, dass weder der Prozessor noch der Speicherverbrauch kritisch sind, aber der Zugriff auf das RAID ist der Engpass.

Beim Aufbau des Servers habe ich mich für RAID 5 entschieden, da laut dieser tabellarischen Übersicht der RAID-Eigenschaften der beste Kompromiss zwischen Leseleistung und Speicherplatzeffizienz auf einem 4-Port-Controller schien.

Übrigens, obwohl dies ein Backup-Server ist, bedeutet die Verwendung von rsync, dass hier weit mehr Lesevorgänge als Schreibvorgänge erfolgen - derzeit etwa 1000-mal mehr. Ich nehme an, dass das Verschieben und Verknüpfen älterer Dateien in BackupPCs Hierarchie der alten Backups auch dazu beiträgt.

Wie würden Sie also die Leistung auf diesem Rechner optimieren? Ich habe folgende Einstellungen:

  • Verwenden eines anderen Transports mit BackupPC (tar ist eine Alternative)
  • Ändern des Dateisystems des Arrays von ext4 (noatime) in etwas anderes
  • Ändern des RAID-Levels (vorzugsweise nicht aufgrund von Datenverlust)
  • Erstellen Sie das Array mit einer anderen Stripe-Größe neu (vorzugsweise nicht aufgrund von Datenverlust).
  • Hinzufügen von mehr Speicher für die Verwendung als Puffercache
  • Hinzufügen eines zweiten Controllers und weiterer Laufwerke (Ja, ich habe welche in der Nähe)
  • Ändern Sie den Controller (vorzugsweise nicht aus finanziellen Gründen)
  • Wechseln Sie alle Laufwerke (vorzugsweise nicht aus finanziellen Gründen)

antworten

Hier kommt ein kurzer zufälliger IO-Primer: 7200RPM-Festplattenlaufwerke machen ungefähr 100 IOPS. 15k RPM Laufwerke verdoppelt das, etwa 200 IOPS. Bei einem RAID-5-Array ist die bestmögliche erreichbare IOPS die Anzahl der Daten-Datenlaufwerke, die Zeit für die einzelne Laufwerksleistung; Da Sie über drei Datenlaufwerke verfügen, beträgt der bestmögliche Wert, den Sie jemals erzielen können, 300 IOPS.

Verwenden Sie iostat -mx 5, während Ihr Backup läuft. Wenn Sie eine Anzahl von Lese- oder Schreibvorgängen (dritte und vierte Spalte) in der 300-Reihe sehen, werden Sie im Grunde genommen das Beste aus Ihrem Setup herausholen.

Hinweis: Die meisten modernen SSD-Laufwerke erreichen 20000 IOPS. Ein Paar SSD in RAID-1 kann ein Rack voll Spinnrost beschämen. SSD ändert alles. Wenn ein IOPS-Problem auftritt, wird die Lösung zu 99% "SSD" genannt.

Wenn Sie Ihre RAID-Array-Ausgabe derzeit nicht ausschöpfen, können Sie einige Dinge tun:

  • Verbessern Sie die Warteschlangentiefe. Die Standard-Kernel-Warteschlangentiefe ist für alte Einzellaufwerke mit kleinen Caches OK, nicht jedoch für moderne Laufwerke oder RAID-Arrays:

    echo 512>/sys/block/sda/warteschlange/nr_requests

  • probiere verschiedene IO-Scheduler aus. CFQ (Standard-Scheduler für modernen Kernel) saugt oft mit Server-Operationen:

    echo 'noop'>/sys/block/sda/warteschlange/scheduler

  • versuche RAID-10. RAID-10 muss die Schreibvorgänge nicht zusammenfalten und ist in Einzel-Thread-Operationen besser als RAID-5.

  • Alternativ versuchen Sie, so viele Threads auszuführen, wie es Datenlaufwerke gibt. Es kann die Gesamtleistung verbessern.

Versuche zuerst, die Raid-Leistung lokal zu vergleichen, um zu sehen, ob es wirklich das Raid-Problem ist. Sie können sogar verwenden:

dd if=/dev/zero of=/your/raid/zerofile bs=16M

und dann nach ~ 10 Sekunden

killall -SIGUSR1 dd

in einem anderen Terminal, um die lokale Schreibgeschwindigkeit zu sehen. Wenn die Geschwindigkeit gut genug ist, versuchen Sie eine andere Netzwerkmethode (versuchen Sie zuerst mit netcat (überprüfen Sie die man-Seite für den ersten Befehl, einige distos brauchen nicht die '-p' Flagge)

pc 1: nc -l -p 12345 >/your/raid/file
pc 2: cat/some/big/file | nc ip.of.pc.1 12345

Ich hatte Probleme mit langsamen Geschwindigkeiten mit rsync über ssh (12-15MBps auf Gigabit-Link, aber auf relativ langsamen PCs).

Nachdem Sie wissen, ob das Problem mit dem Datenträger oder mit der rsync/ssh-Geschwindigkeit auftritt, können Sie mit dem Debuggen fortfahren.

BackupPC ist ein sehr I/O-intensives Programm und kann zu sehr vielen Suchläufen führen. Mit Low-End-Hardware können Sie nur so viel tun, aber versuchen Sie Folgendes:

Optimierung von BackupPC selbst

  • Die maximale Anzahl gleichzeitiger Sicherungen und administrativer Vorgänge spielt eine große Rolle bei der BackupPC-Leistung. Stellen Sie das zu hoch und Ihre Low-End-Hardware (oder sogar teure ...) wird zum Stillstand gebracht. Stellen Sie das zu niedrig ein und Sie werden Ihre Hardwarefähigkeiten nicht voll ausschöpfen. Mit Standard-Hardware versuchen Sie alles zwischen 2 bis 6 gleichzeitige Backups, sehen Sie, was für Sie funktioniert.

  • Wenn nicht benötigt, deaktivieren Sie die Komprimierung des BackupPC-Pools.

  • Auch wenn die BackupPC Perl rsync-Bibliothek rsync v3.x nicht vollständig nutzt, vergewissern Sie sich, dass rsync v3.x verwendet wird.

Server optimieren

  • Stellen Sie sicher, dass Sie einen korrekten E/A-Aufzug ausgewählt haben. Mit RAID und viel Konkurrenz kann der Standard cfq eine schlechte Wahl sein; Die meiste Zeit weiß RAID-Controller die Dinge besser und noop kann gut sein. Bei bestimmten Workloads und el cheapo RAID-Controllern kann deadline auch gut sein.

  • Ich weiß, dass Sie das Dateisystem nicht ändern wollen, aber ich habe festgestellt, dass XFS mit BackupPC ausgezeichnet ist. (Caveat emptor: Die Hardware in meinem Fall ist ziemlich gut)

  • BackupPC liebt dich, wenn du genug RAM hast. Wie viel RAM hat Ihr Server? Je mehr desto besser; Wenn der Server den Großteil der Verzeichnisstruktur im Speicher behalten kann, sind die Leseoperationen, die BackupPC macht, viel, viel schneller, wenn sie nicht auf die physische Platte treffen müssen.

Wenn ich Sie wäre, würde ich zuerst den Server-RAM aktualisieren und die BackupPC-Einstellungen überprüfen. Wenn diese nicht genug helfen würden, würde ich an Dateisystem- und RAID-Einstellungen basteln.

Sie vermuten also, dass zufällige Leseleistung das Problem ist. Die Lösung wäre, Speicher mit besseren IOPS (SSD oder HDD mit höherer Drehzahl oder RAID mit mehr Spindeln) zu bekommen. Mehr Arbeitsspeicher (Cache) kann auch helfen, wenn der Arbeitssatz (Inode-Cache) in den Arbeitsspeicher passt.

Eine Sache wäre, zu verifizieren, dass dies der Fall ist. Sehen Sie sich die dstat-Ausgabe und die iotop-Ausgabe an. Überprüfen Sie auch, ob das Dateisystem für backuppc in Relation oder Noatime eingebunden ist, so dass jeder Dateizugriff nicht in einen Schreibvorgang umgesetzt wird.