Drbd sock sendmsg time expired

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.

Problem

Unter sehr hoher Last (u.a. auch beim VE Checkpointing) kann es beim Thomas Krenn 1HE Cluster zu einem Aussetzen von DRBD kommen. Der Grund dafür ist, dass das Versenden von Datenpaketen am node1 wegen Speichermangel blockiert werden kann. Dies passiert unter hohem Memory-Pressure auf der Seite des aktiven Knotens. Es geht um ein grundsätzliches Linux Problem, Netzwerk-IO im Block-IO Pfad.

Die Fehlermeldung kann wie folgt aussehen, wobei der Wert "ko" laufend heruntergezählt wird:

Apr 27 15:46:45 node2 kernel: drbd0: [kjournald/10662] sock_sendmsg time expired, ko = 4294967295
Apr 27 15:46:48 node2 kernel: drbd0: [kjournald/10662] sock_sendmsg time expired, ko = 4294967294
Apr 27 15:46:51 node2 kernel: drbd0: [kjournald/10662] sock_sendmsg time expired, ko = 4294967293
Apr 27 15:46:54 node2 kernel: drbd0: [kjournald/10662] sock_sendmsg time expired, ko = 4294967292
Apr 27 15:46:57 node2 kernel: drbd0: [kjournald/10662] sock_sendmsg time expired, ko = 4294967291

Der Wert "ko" ist der KO Counter von DRBD, nach dessen Ablauf die DRBD Verbindung zum zweiten Knoten getrennt wird. Per Default ist der "ko-count" Wert in drbd.conf nicht gesetzt, d.h. es erfolgt keine automatische Trennung der DRBD Verbindung.

Lösung

Das Problem tritt vor allem beim Einsatz von DRBD 0.7.x auf. Beim Einsatz von DRBD 8.x ist das Problem sehr unwahrscheinlich und es ist uns kein Fall bekannt.

Folgende Optimierungen werden empfohlen:

  • Linux I/O Scheduler auf "deadline" setzen. Dafür muss der Kernel Parameter "elevator=deadline" in der Datei grub.conf/menu.lst ergänzt werden.
  • Sysctl Tuning. Folgende Zeilen in /etc/sysctl.conf ergänzen:
# increase "minimum" (and default) tcp buffer
# to increase the chance to make progress in IO via tcp,
# even under memory pressure.
net.ipv4.tcp_rmem = 131072  131072  10485760
net.ipv4.tcp_wmem = 131072  131072  10485760

# reduce watermark levels to start background (and foreground)
# writeback early. reduces the chance of resource starvation.
vm.dirty_ratio = 10
vm.dirty_background_ratio = 4
  • Neustart beider Knoten damit IO Scheduler und sysctl Anpassungen aktiviert werden.

Wenn der Fehler nur selten auftritt, kann ein Setzen des Werts "ko-count" in drbd.conf helfen. In diesem Fall wird die DRBD Verbindung getrennt und man muss die Verbindung manuell wiederherstellen, dafür kommt es zu keinem Hängen des Systems.

Wenn diese Optimierungen alle nicht helfen, muss versucht werden die Last am 1HE Cluster zu reduzieren und in letzter Konsequenz auf ein System mit einer DRBD Version > 0.7.x umgestiegen werden.



Foto Christoph Mitasch.jpg

Autor: Christoph Mitasch

Christoph Mitasch arbeitet in der Abteilung Web Operations & Knowledge Transfer bei Thomas-Krenn. Er ist für die Betreuung und Weiterentwicklung der Webshop Infrastruktur zuständig. Seit einem Studienprojekt zum Thema Hochverfügbarkeit und Daten Replikation unter Linux beschäftigt er sich intensiv mit diesem Themenbereich. Nach einem Praktikum bei IBM Linz schloss er sein Diplomstudium „Computer- und Mediensicherheit“ an der FH Hagenberg ab. Er wohnt in der Nähe von Linz und ist neben der Arbeit ein begeisterter Marathon-Läufer und Jongleur, wo er mehrere Weltrekorde in der Team-Jonglage hält.


Das könnte Sie auch interessieren

DRBD Statusinformationen im Detail
Netzwerkkarte beim Thomas Krenn HA Linux Cluster nachrüsten
Zeitsprünge Linux NTP