Wir sparen auf einem RAID-Controller oder wie man Varia mit Iops füttert

In unserer Zeit der Cloud-Services, AWS Lambda und anderen gemeinsamen Hosts von absolut immateriellen Computerressourcen möchte ich manchmal ein wenig von mir. Zusätzlich zum Wunsch besteht manchmal auch die Notwendigkeit, das eine oder andere Softwareprodukt mit minimalen Plattformkosten nachdenklich zu verdrehen. Man kann fast immer überschüssige Ausrüstung finden, manchmal stellt sich sogar heraus, dass alles zusammengesetzt und eingeschaltet wird. Wenn diese Überschüsse eine CPU mit mindestens 4-6 Kernen und Speicher von 64 GB darstellen - im Allgemeinen ausgezeichnet -, können Sie ESXi verwenden und mit allem arbeiten. Ein Problem: Mit einer Festplattenkapazität auf Haushaltshardware bei VMWare - absolut nichts. Die Leistung lokaler Einzelfestplatten ist gering, und der Verlust des Inhalts einer einzelnen Schraube im Vakuum im 21. Jahrhundert ist wie Hallo. Versuchen wir, etwas über das Netzwerk zu verbinden.

TL; DR> Assoziation, Balancing, rr-Limit, das ist alles.

Im folgenden Text geht es eigentlich nicht darum, dass dies allgemein möglich ist oder um eine Art Know-how. Das Internet ist voll von Artikeln für Dummies (siehe hier, dann Weiter, Weiter, Fertig) zum Übermitteln einer iSCSI-Festplattenkapazität. Ich schreibe nur, um die „Fehler der Überlebenden“ auszuschließen und die Momente zu teilen, in denen „alles schief gehen wird“ (und es wird gehen, Murphy hatte Recht), und wenn Sie versuchen, die Lösung zu laden, stürzt sie einfach ab.

Wir werden also versuchen, unseren "Haushaltshypervisor" mit einem externen Festplattenarray zu ersticken, das über das Netzwerk verbunden ist. Da sich alles um „kostengünstig“ dreht, handelt es sich um FreeNAS- und 4 SATA-Festplatten, die von mittelmäßigen 3-GHz-45-nm-Prozent bedient werden. Wir schauen uns Ebay an und für Geld, das mit einem gebrauchten RAID-Controller vergleichbar ist, ziehen sie ein paar i350-T4-Netzwerkkarten von dort. Dies sind Gigabit-Adapter mit vier Ports von Intel. Demnach werden wir den Speicher dem Hypervisor zuordnen.

Zähle ein wenig. Die durchschnittliche Datenübertragungsgeschwindigkeit einer durchschnittlichen SATA-Festplatte beträgt 160-180 MB / s bei einer Schnittstellenbreite von 6 Gbit / s. Tatsächlich überschreitet die tatsächliche Datenübertragungsrate von der Festplatte 2 Gbit / s nicht. Dies ist keine so große Zahl, da wir 4-Gigabit-Ports planen (wie man 4x1Gbps in 4Gbps verwandelt - wir werden weiter diskutieren). Alles mit zufälligen Zugriffsgeschwindigkeiten ist viel schlechter - hier fällt alles fast auf das Niveau von Disketten.


Angesichts der Tatsache, dass das Festplattenladeprofil vieler Gastbetriebssysteme alles andere als linear ist, würde ich mir mehr Spaßzahlen wünschen. Um die Situation im Dateisystem des Hypervisors (VMFS v6) zu korrigieren, beträgt die Blockgröße 1 MB. Dies hilft, viele zufällige Vorgänge zu komprimieren und den Zugriff auf Daten auf virtuellen Laufwerken zu beschleunigen. Aber selbst dann reicht eine physische Festplatte nicht aus, um E / A-Vorgänge aller "Gäste" abzuwickeln.

Ich werde sofort eine Reservierung vornehmen - alles ist sinnvoll, wenn Sie mehr als zwei Adapter für das "Speichernetzwerk" haben. ESXi mit einer kostenlosen Einzelprozessorlizenz kann zusätzlich zu lokalen Festplatten eine Verbindung zu zwei Speichertypen herstellen - NFS und iSCSI. NFS beinhaltet Zugriff auf Dateiebene und ist auch auf seine eigene Weise gut. Darauf können Sie Gäste bereitstellen, die keine Anforderungen an die Festplattenleistung stellen. Es ist mir eine Freude, sie zu sichern. Sie können denselben NFS-Ball an einer anderen Stelle öffnen und Snapshots vm kopieren. Im Allgemeinen mit einer Netzwerkschnittstelle (wenn es nicht 10GE ist, natürlich) - NFS ist Ihre Wahl.

ISCSI hat gegenüber NFS mehrere Vorteile. Um sie vollständig zu realisieren, haben wir uns bereits vorbereitet - nachdem wir bereits 4 Gigabit-Ports für das Speichernetzwerk festgelegt haben. Wie erfolgt die Erweiterung der Netzwerkbandbreite normalerweise bei einer bekannten Schnittstellengeschwindigkeit? Das ist richtig, Aggregation. Für die vollständige Nutzung des aggregierten Kanals sind jedoch eine Reihe von Bedingungen erforderlich, und dies ist besser für die Kommunikation zwischen Switches oder für eine Netzwerk-Uplink eines Hypervisors geeignet. Die Implementierung des iSCSI-Protokolls bietet eine Funktion wie Multipathing (buchstäblich viele Pfade) - die Möglichkeit, dasselbe Volume über verschiedene Netzwerkschnittstellen zu verbinden. Natürlich auch dort über die Möglichkeit des Lastausgleichs, obwohl der Hauptzweck die Fehlertoleranz des Speichernetzwerks ist. (Fairerweise unterstützt NFSv4.1 Session Trunking basierend auf der fortschrittlichsten Magie wie RDMA und MPTCP, aber dies ist ein Versuch, Dateizugriffsprobleme von einem wunden Kopf auf einen gesunden auf niedrigere Ebenen zu verlagern.)

Zunächst werden wir unser Ziel veröffentlichen. Wir glauben, dass FreeNAS installiert ist, die IP-Adresse des Managements regelmäßig die Webschnittstelle an uns versendet, wir das Array abschneiden und darauf gemäß unseren internen Überzeugungen zvol. In unserem Fall handelt es sich um ein 4 x 500 GB großes Laufwerk, das in raidz1 kombiniert ist (was nur 1,3 TiB effektive Kapazität ergibt), und zvol ist genau 1 TB groß. Wir werden die i350-Netzwerkschnittstellen konfigurieren. Der Einfachheit halber akzeptieren wir, dass jeder zu verschiedenen Subnetzen gehört.


Anschließend konfigurieren wir den iSCSI-Ball mit der Methode „Weiter, Weiter, Fertig“. Vergessen Sie bei der Konfiguration des Portals nicht, alle für iSCSI bestimmten Netzwerkschnittstellen dort hinzuzufügen. Es sollte ungefähr so ​​aussehen wie auf den Bildern.



Ein wenig mehr Aufmerksamkeit muss dem Einstellungsumfang gewidmet werden - bei der Darstellung eines Volumes muss eine Blockgröße von 512 Bytes erzwungen werden. Ohne dies weigerte sich der ESXi-Initiator, die präsentierten Volumes überhaupt zu identifizieren. Aus Gründen der Wiedergabetreue ist es besser, die Probros-Größen des physischen Blocks (der auf zvol nicht vorhanden ist und nicht sein kann) zu deaktivieren und den Xen-Unterstützungsmodus zu aktivieren.
Vorerst mit FreeNAS.

Auf der ESXi-Seite ist die Netzwerkeinrichtung etwas komplizierter. Auch hier glauben wir, dass der Hypervisor selbst auf einem separaten Port installiert und verwaltet wird. Sie müssen 4 VM-Kernel-Schnittstellen auswählen, die zu 4 verschiedenen Portgruppen in 4 verschiedenen virtuellen Switches gehören. Jeder dieser Switches verfügt über einen eigenen physischen Uplink-Port. Wir verwenden die vmk # -Adressen natürlich in den entsprechenden Subnetzen, ähnlich wie bei der Konfiguration der Speicherports. Die Reihenfolge der Adresseinstellung ist im Allgemeinen wichtig: Entweder verbinden wir Port-zu-Port-Karten ohne Switch, oder wir geben verschiedene Links zu verschiedenen Netzwerken (naja, wenn auch nur für Erwachsene), sodass der physische Port-Matching wichtig ist.




Beim Einrichten eines Netzwerks für iSCSI achten wir besonders auf den MTU-Parameter. Dies ist genau dann der Fall, wenn „Größe zählt“ - wir nehmen das Maximum, das alle Netzwerkkomponenten installieren können. Wenn die Karten direkt angeschlossen sind, können Sie das mtu 9000 auf beiden Seiten auf ESXi und FreeNAS richten. Normale Schalter unterstützen diesen Wert jedoch. Wir pingen, wir sehen, dass das Netzwerk normal ist und die Pakete der erforderlichen Größe passieren. Großartig. Wir setzen den Initiator in Brand.

Aktivieren Sie iSCSI und fügen Sie dem Abschnitt zur dynamischen Konfiguration IP-Adressen hinzu (Speicher -> Adapter -> iSCSI konfigurieren -> Dynamische Ziele). Nach dem Speichern werden die iSCSI-Portale an diesen Adressen abgefragt. Der Initiator stellt fest, dass jedes von ihnen das gleiche Volume hat, und stellt an allen verfügbaren Adressen (dem gleichen Mehrweg) eine Verbindung her. Als Nächstes müssen wir einen Datenspeicher auf dem angezeigten Gerät erstellen.

Danach können Sie die virtuelle Maschine ausrollen und messen, was wir haben.


Nicht so beeindruckende Ergebnisse. Öffnen Sie die Speicherkonsole, zeigen Sie den aktuellen Netzwerkstatus an und führen Sie die Tests aus.

root@freenas:~ # systat -ifstat
Was sehen wir?
  /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10 Load Average Interface Traffic Peak Total lo0 in 0.319 KB/s 0.893 KB/s 3.041 MB out 0.319 KB/s 0.893 KB/s 3.041 MB alc0 in 0.478 KB/s 1.233 KB/s 3.934 MB out 0.412 KB/s 1.083 KB/s 2.207 MB igb3 in 0.046 KB/s 0.105 KB/s 181.434 KB out 0.073 KB/s 0.196 KB/s 578.396 KB igb2 in 0.046 KB/s 0.105 KB/s 120.963 KB out 0.096 KB/s 0.174 KB/s 517.221 KB igb1 in 4.964 MB/s 121.255 MB/s 10.837 GB out 6.426 MB/s 120.881 MB/s 3.003 GB igb0 in 0.046 KB/s 0.105 KB/s 139.123 KB out 0.073 KB/s 0.210 KB/s 869.938 KB 


Es wurde nur einer der vier Netzwerkports (igb1) verwendet. Dies liegt daran, dass der standardmäßig für Multipath bereitgestellte Ausgleichsmechanismus mit jedem Datenpaket denselben Adapter auswählt. Wir müssen aus allem heraus nutzen.
Wir sind über SSH und Befehl mit dem Hypervisor verbunden.
Lassen Sie uns zunächst sehen, welche ID der Mond mit Multipath hat und wie er funktioniert:

[root@localhost:~] esxcfg-mpath -b
naa.6589cfc000000b478db42ca922bb9308 : FreeNAS iSCSI Disk (naa.6589cfc000000b478db42ca922bb9308)

[root@localhost:~] esxcli storage nmp device list -d naa.6589cfc000000b478db42ca922bb9308 | grep PSP
Path Selection Policy: VMW_PSP_MRU


Die Pfadauswahlrichtlinie ist MRU, dh die zuletzt verwendete. Alle Daten werden an denselben Port gesendet. Die erneute Auswahl des Pfads erfolgt nur, wenn die Netzwerkverbindung nicht verfügbar ist. Wir wechseln zu Round-Robin, bei dem sich alle Schnittstellen nach einer bestimmten Anzahl von Operationen nacheinander ändern:

[root@localhost:~] esxcli storage nmp device set -d naa.6589cfc000000b478db42ca922bb9308 -P VMW_PSP_RR

Wir starten ESXi neu, öffnen die Überwachung und führen Tests durch. Wir sehen, dass die Last gleichmäßig auf die Netzwerkadapter verteilt ist (zumindest Spitzenwerte, zu stark abgekratzt), die Testergebnisse machen auch mehr Spaß.

  Interface Peak igb3 in 43.233 MB/s out 46.170 MB/s igb2 in 42.806 MB/s out 45.773 MB/s igb1 in 43.495 MB/s out 45.489 MB/s igb0 in 43.208 MB/s out 46.079 MB/s 

Es gibt einige Abweichungen an den Ports. Dies ist auf die Richtlinienbeschränkungen für die Pfadauswahl zurückzuführen - die Anzahl der Operationen oder Bytes, nach denen auf einen anderen Port gewechselt wird. Standardmäßig 1000 IOPS, dh wenn der Datenaustausch innerhalb von 999 Vorgängen erfolgt, wird er über einen Netzwerkport übertragen. Sie können den entsprechenden Wert ändern, vergleichen und auswählen. Sie können nicht ändern, Standard ist für die meisten Aufgaben ausreichend.

Wir messen, testen, arbeiten. Die Ergebnisse sind den Funktionen eines einzelnen Laufwerks deutlich überlegen, sodass unsere virtuellen Maschinen jetzt möglicherweise nicht mehr auf E / A-Vorgänge beschränkt sind. Die resultierenden Geschwindigkeiten und Fehlertoleranzen des Arrays hängen von der Hardware und der Konfiguration des Volumes ab.

Source: https://habr.com/ru/post/de423513/


All Articles