Ich denke darüber nach, einen Squid- (oder möglicherweise Lack-) Cache auf einem System mit SSD-Laufwerken einzurichten.
Der offensichtliche Vorteil ist, dass diese Systeme große READ-Geschwindigkeiten haben und ich erwarte, dass meine Trefferquoten ziemlich hoch sind.
Nehmen wir an, ich kann 7 SSDs in eine RAID-Konfiguration einfügen. (Es gibt einige Fälle, in denen ich viel mehr einpacken kann.)
Implementierungsfragen:
Soll ich RAID0 verwenden? (Ich erwarte, dass ein Laufwerk irgendwann ausfällt, daher scheint dies gefährlich zu sein.)
Soll ich RAID10 verwenden? (Dies halbiert meinen Festplatten-Footprint, was teuer ist.)
Soll ich RAID5 verwenden? (Es ist bekannt, dass SSDs eine "schlechte" Schreibleistung und Schreibbeschränkungen aufweisen, und alle zusätzlichen Paritätsschreibvorgänge können dies erheblich verlangsamen.)
Sollte ich jede Festplatte einfach als eigenen Tintenfisch-Datenspeicher behandeln? (Wie gut kann Squid mit mehreren Datenspeichern umgehen? Und was passiert, wenn einer ausfällt?)
Sollte ich Datenspeicher ignorieren und die SSDs einfach zu großen SWAP-Partitionen machen und die Linux-VM das tun lassen? (scheint schlampig)
Jeder Rat von Leuten, die SSDs in Produktionsumgebungen verwenden, wäre sehr dankbar. (vor allem, wenn Sie sie für HTTP-Caches verwenden)
Antworten:
Wir haben in den letzten 9 Monaten Lack auf SSD-Laufwerken verwendet, er hat bei uns sehr gut funktioniert. Wir haben zuvor nur einen Tintenfischspeicher-Cache mit einer Karpfenschicht verwendet. Es hat funktioniert, aber die Speicherfragmentierung war ein echtes Problem, das häufige Neustarts erforderte. Squid 2.x verwendet auch nur einen Kern, was es auf der aktuellen Hardware ziemlich ineffizient macht.
Für unsere Website, die sehr cachefreundlich ist, sehen wir ungefähr 10% CPU-Auslastung auf einem 8-Kern-Computer, der 100 Mbit / s Verkehr versorgt. In unseren Tests geht uns die Bandbreite aus, bevor wir mit 2 1-Gbit-Ports die CPU-Grenzwerte erreichen.
Ich habe einige Ratschläge zum Ausführen von Lack mit einem SSD-Cache.
Zufällige Schreibleistung ist wirklich wichtig. Wir haben mehrere Anbieter für SSD-Laufwerke ausprobiert, bevor wir uns für den Intel x-25m entschieden haben. Wir haben einige Posts mit nur 0,1 MB / s für 4k-Zufallsschreibvorgänge gesehen. Mit x-25m erhalten wir 4 MB-Zufallsschreibvorgänge mit 24 MB / s.
Raid0. Der Cache in 2.0 ist nicht persistent, sodass Sie sich keine Gedanken über Redundanz machen müssen. Dies macht Neustarts zwar weh, aber diese sind selten. Sie können beispielsweise eine neue Konfiguration laden und Objekte ohne Neustart löschen.
mmap-Modus. Der Lackcache kann einer Datei zugeordnet oder der Auslagerungsbereich verwendet werden. Die Verwendung von Swap hat bei uns nicht gut funktioniert. Es wird tendenziell mehr E / A-Bandbreite verwendet, um die gleiche Menge an Datenverkehr zu bedienen. Es gibt einen 4-Sektor-Readahead im Linux-Swapin-Code. Wir haben einen Patch geschrieben, um diesen zu entfernen, haben ihn aber in der Produktion nicht ausprobiert.
Terminplaner. Mit 2.6.28+ ist dies ssd-fähig und funktioniert gut. Wir haben noop ausprobiert, aber festgestellt, dass die Frist fairer war, da die E / A-Bandbreite begrenzt wird.
Deaktivieren Sie das Vorauslesen. Da es keine Rotationsverzögerung gibt, macht es keinen Sinn, zusätzliche Daten zu lesen, nur weil Sie sie möglicherweise benötigen. I / O-Bandbreite ist für diese Dinge wertvoll.
Führen Sie 2.6.28+ aus. mmap mit viel Speicherplatz unter Linux bietet dem Speichermanager ein gutes Training, aber die geteilten lru-Patches helfen sehr. Die CPU-Auslastung von kswapd ist bei der Aktualisierung stark gesunken.
Wir haben unsere vcl-Datei sowie verschiedene Tools, die wir mit Lack verwenden, unter Linktext veröffentlicht . Das vcl enthält auch einen netten Hack, der einen sehr schnellen Geoiplookup-Server implementiert, der auf der maxmind-Datenbank basiert.
quelle
Ich verwende keine SSDs als HTTP-Caches, kann aber folgende Beobachtungen machen:
Nicht alle SSDs sind gleich, daher müssen Sie sehr vorsichtig sein, wenn Sie anständige auswählen. FusionIO stellt PCIe-gestützte SSDs her, die wirklich High-End-Performer (mit relativ geringer Kapazität) sind, aber teuer. Intels X25-E-SLC-SSDs arbeiten sehr gut und sind erschwinglicher, haben aber immer noch eine geringe Kapazität. Recherchiere! Ich kann die X25-E SLC-Varianten definitiv empfehlen, da ich diese in Produktionssystemen verwende.
Es gibt andere SSDS, die möglicherweise eine hohe sequentielle Lese- / Schreibgeschwindigkeit bieten. Wichtig für einen Cache ist jedoch die zufällige E / A, und viele SSDs bieten ungefähr die gleiche zufällige Leistung wie sich drehende Festplatten. Aufgrund von Schreibverstärkungseffekten auf SSDs erzielen sich drehende Festplatten häufig eine bessere Leistung. Viele SSDs haben Controller mit schlechter Qualität (z. B. ältere JMicron-Controller), die in einigen Situationen unter einer erheblich beeinträchtigten Leistung leiden können. Anandtech und andere Websites führen gute Vergleiche mit Tools wie iometer durch.
Und natürlich sind SSDs klein. Der Intel X25-E, von dem ich sagen würde, dass er die beste SATA-SSD ist, die ich je gesehen habe, ist nur in 32- und 64-GB-Varianten erhältlich.
Für RAID-Level gelten weiterhin Standard-RAID-Leistungshinweise. Beim Schreiben in ein RAID 5 wird grundsätzlich der zu ändernde Datenblock gelesen, der Paritätsblock gelesen, die Parität aktualisiert, der Datenblock geschrieben und die Parität geschrieben, sodass die Leistung immer noch schlechter ist als bei anderen RAIDs Ebenen, auch mit SSDs. Bei Laufwerken wie dem X25-E mit einer derart hohen zufälligen E / A-Leistung ist dies wahrscheinlich weniger wichtig, da zufällige E / A auf sich drehenden Festplatten für ein Array ähnlicher Größe immer noch besser abschneiden.
Soweit ich gesehen habe, ist die Bandbreite des RAID-Controllers zu früh gesättigt, um den größten Nutzen aus einem RAID-Set mit 7 Festplatten zu ziehen, zumindest was die sequentielle Leistung betrifft. Mit aktuellen Modellen von SATA-Controllern (3ware, Areca usw.) können Sie nicht mehr als 800 MB / s erreichen. Wenn Sie mehr kleinere Arrays auf mehreren Controllern haben (z. B. mehrere RAID1s anstelle eines einzelnen RAID10), wird dies verbessert, obwohl die individuelle Leistung jedes Arrays darunter leidet.
In Bezug auf einen HTTP-Cache denke ich, dass Sie mit einer anständigen Anzahl von sich drehenden Festplatten und viel RAM besser bedient werden sollten. Objekte, auf die häufig zugegriffen wird, verbleiben im Speichercache - entweder im internen Cache von squid oder im fs-Cache Ihres Betriebssystems. Wenn Sie einer Maschine einfach mehr RAM geben, kann dies das Laden der Festplatte erheblich reduzieren. Wenn Sie einen großen Squid-Cache verwenden, benötigen Sie wahrscheinlich viel Speicherplatz, und die leistungsstarken SSDs haben immer noch nur eine relativ geringe Kapazität.
quelle
Ich bin mit SSD-Laufwerken nicht sehr vertraut, aber ich kann über die Art von Architektur sprechen, die ich verwendet habe, um einige Ihrer Probleme zu lösen.
Geschwister
In meinem Fall habe ich vier Server mit jeweils 16 GB RAM gebaut. Ich habe 9 GB als In-Memory-Cache für Squid festgelegt. Ich habe sie als eine Gruppe von Geschwistern konfiguriert, sodass eine Abfrage an einen Server die anderen abfragt, bevor nach den Daten gesucht wird. Insgesamt hatte ich 36 GB im Speicher-Cache. Ich würde nicht über vier Geschwister hinwegkommen, da die Kommunikation zwischen ihnen ins Stocken gerät.
VIPs
Ich habe einen VIP für die vier Server konfiguriert, mit denen der Client sprechen kann. Dies löste, was passiert, wenn ein Server ausfällt.
Kinder
Ich habe meine Webanwendung so eingestellt, dass sie einen lokalen Squid-Server abfragt, der unter 127.0.0.1 ausgeführt wird. Konfigurieren Sie dann das übergeordnete Element dieser Squid-Instanz als VIP. Dies ermöglicht ein sehr schnelles Failover für den Fall, dass der gesamte VIP ausfällt. Wenn die Eltern nicht antworten, fragt das Kind die Dienste direkt ab. Es ist auch praktisch, wenn Sie einen einzelnen Squid-Server verwenden und keinen VIP haben. Wenn die lokale Squid-Instanz auf Ihrem Webserver ausfällt, wird natürlich alles gestoppt.
Tintenfisch selbst
Ich habe mir 3.0 nicht wirklich angesehen, aber 2.x ist immer noch Single-Threaded. Irgendwann werden Ihnen die CPU- oder TCP-Puffer ausgehen. Ich würde den Cache wenn möglich auf 2-3 weniger Boxen verteilen. Möglicherweise möchten Sie auch Pläne für die zukünftige Partitionierung Ihrer Squid-Farmen erstellen, wenn das System wächst.
Auf jeden Fall viel Glück mit Ihrem SSD Build. Ich bin gespannt, wie es ausgeht, da ich diesen Weg wahrscheinlich in Zukunft gehen werde.
quelle
Warum erwägst du überhaupt Raid 10 oder 5. Du willst hier Leistung. Es ist Ihnen egal, ob die Laufwerke nur ausfallen, da es sich nur um einen Cache handelt.
Verwenden Sie einfach Raid 0 oder halten Sie sie getrennt. Ich denke, eine Trennung wäre besser, da ein Laufwerksfehler nicht den gesamten Cache belasten würde.
quelle
In der Squid-Dokumentation wird empfohlen, kein RAID zu verwenden, sondern zusätzliche Cache-Verzeichnisse auf zusätzlichen Festplatten einzurichten.
quelle