2012-06-28 1 views
6

Ich werde große Dateien Server erstellen, und benötigen Stack-Overflow-Community-Beratung für Dateisystem-Auswahl (Linux).Das beste Dateisystem für 1GB-Dateien mit nginx, unter mäßigem Schreiben, lesen Sie die Leistung?

Dateiserver wird 1-2GB große statische Dateien (meist unterschiedlich mit jeder Anfrage) über Nginx, unter konstanten moderaten Schreiben auf die Festplatten (RAID5 SATA/7200 Festplatten massiv) dienen. Das Schreib-Lese-Verhältnis beträgt etwa 1: 5 bis 10, für jedes 1 Byte, das pro Sekunde geschrieben wird, werden 5 bis 10 gelesen. Am wichtigsten ist für mich Leseleistung, ich kann mit langsameren Schreibweisen leben.

Welches Linux-Dateisystem wäre die beste Lösung für diese Aufgabe? Und warum :) Danke!

Antwort

0

Sehr große Dateien neigen dazu, nicht sehr abhängig zu sein, welches Dateisystem Sie verwenden, moderne Dateisysteme (d. H. Nicht FAT!) Tun sehr gut, sie in großen zusammenhängenden Speicherstücken zuzuteilen und somit Suchlatenz zu minimieren. Wo Unterschiede zwischen ihnen zu finden sind, sind die geringe Dateiperformance, Fragmentierungsresistenz bei Nicht-Platz-Situationen, Nebenläufigkeit, etc ... Das Speichern großer Dateien ist ein vergleichsweise einfaches Problem, und ich bezweifle, dass Sie messbare Unterschiede sehen werden.

Aber wie immer: Wenn Sie wirklich interessiert sind, Benchmark. Es gibt keine einfachen Antworten zur Dateisystemleistung.

+0

Also nicht wahr :(Haben Sie schon einmal von großen Dateien auf ext2-3 vs xfs versucht zu löschen vs JFS? Auch ein Blick auf die Kernel-Quelle dir offenbart hätte, dass verschiedene fs Treiber ausgeben unterschiedliche Zeit in kritischen Abschnitten, auch neigen sie dazu, sich unter hohem IO-Druck _radikal_ anders zu verhalten. –

+0

Löschen einer großen Datei war nicht der Anwendungsfall. Wenn Sie Nummern haben, zeigen Sie sie an. Ich stehe zu dem, was ich geschrieben habe. –

+0

Zahlen? "Es gibt Lügen, verdammte Lügen und dann Benchmarks" Ich habe noch keine Benchmark ohne Marketingziel gesehen. Ich habe über meine Erfahrung und die öffentlich verfügbare Linux-Kernel-Quelle gesprochen. Der Punkt, dass "ich bezweifle, dass Sie messbare Unterschiede sehen werden", ist dennoch lächerlich. –

4

Um beste Ergebnisse mit schwerem Inhalt zu erzielen, müssen Sie noch etwas anderes tunen. Bitte werfen Sie einen Blick auf Nginx core developer's comment unter:

  1. Schalten Sie sendfile, es auf eine solche Workloads unter Linux da keine Fähigkeit (und somit von Platte gelesen Blöcke) zu steuern readahead schlecht funktioniert.

    sendfile aus;

  2. Verwenden große Ausgangspuffer

    output_buffers 1 512k

  3. Versuchen aio mit besser Platten Gleichzeitigkeit zu gewährleisten (und beachten Sie unter Linux braucht es directio auch), also so etwas wie dieses

    aio on; directio 512;

Weitere Empfehlungen:

  1. Überprüfen Sie die Dateisystem-Swap nicht verwendet wird

  2. Filesystem - ext4, XFS. Gut zu data_writeback zu ermöglichen und noatime Mount-Optionen

5

I erreicht 80MB/s von "random read" Leistung pro "echten" Festplatte (Spindel). Hier sind meine Ergebnisse.

Legen Sie zuerst fest, wie viel Datenverkehr Sie an die Benutzer weitergeben müssen und wie viel Speicher Sie pro Server benötigen.

Sie können den unten angegebenen Ratschlag für die Installation überspringen, da Sie bereits über ein RAID5-Setup verfügen.

Nehmen wir ein Beispiel für einen dedizierten 1Gbps-Bandbreitenserver mit 3 * 2TB-Festplatten. Behalten Sie die erste Festplatte für OS und tmp. Für andere 2 Festplatten können Sie eine Software-RAID erstellen (für mich funktionierte es besser als an Bord Hardware-Raid). Andernfalls müssen Sie Ihre Dateien gleichmäßig auf unabhängige Festplatten aufteilen. Die Idee ist, die Lese-/Schreiblast beider Laufwerke gleich zu halten. Software raid-0 ist die beste Option.

Nginx Conf Es gibt zwei Möglichkeiten, hohe Leistung mit nginx zu erreichen.

  1. Verwendung directio

    aio auf;
    directio 512; output_buffer 1 8m;

    "Diese Option erfordert eine gute Menge an RAM" Um 12-16GB RAM wird benötigt.

  2. Userland io

    output_buffers 1 2m;

    "stellen Sie sicher, readahead gesetzt haben für Software-RAID 4-6MB mount" blockdev --setra 4096/dev/md0 (oder unabhängige Plattenmontage)

    Diese Einstellung optimal Systemdateicache verwenden, und benötigt viel weniger RAM. Rund 8 GB RAM wird benötigt.

Allgemeine Hinweise:

  • halten "sendfile aus;"

Sie können auch Bandbreite Drossel verwenden, wie 100s von Verbindungen über die verfügbare Bandbreite zu ermöglichen. Jede Downloadverbindung benötigt 4 MB aktiven RAM. leicht zu 1k + gleichzeitige Benutzer auf einem 3 Plattenserver

 limit_rate_after 2m; 
     limit_rate 100k; 

werden beide der obigen Lösung skalieren. Angenommen, Sie haben eine Bandbreite von 1 Gbit/s und jede Verbindung ist bei 1 Mbit/s gedrosselt. Es ist ein zusätzliches Setup erforderlich, um die Schreibvorgänge auf der Festplatte zu optimieren, ohne die Lesevorgänge zu beeinflussen.

machen Sie alle Uploads auf die Haupt-CD auf einem Mount say/tmpuploads. Dies gewährleistet keine zeitweilige Störung während der Lesevorgänge. Verschieben Sie dann die Datei von/tmpuploads mit dem Befehl "dd" mit oflag = direct. so etwas wie

dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k