Flock schlägt auf Shared NFS für exklusive Blockierungssperren von 2 verschiedenen Maschinen fehl

1
Sybille Peters 2020-02-05 01:40.

Ich verwende PHP flock () (das die Systemflock verwendet) auf Systemen mit gemeinsam genutztem Dateisystem über NFS.

Flock () schlägt fehl, wenn ich die Sperre EXCLUSIVE BLOCKING verwende, um auf dieselbe (gemeinsam genutzte) Datei auf 2 Servern zuzugreifen. Natürlich sollte nur ein Prozess in der Lage sein, die (exklusive) Sperre zu erhalten, aber der andere sollte in diesem Fall blockieren. Ich sehe jedoch, dass der Aufruf von flock () sofort mit einem Fehler zurückkehrt.

Wenn ich auf einem Server dasselbe mache (2 Programme starten, um die EXKLUSIVE, BLOCKIERENDE Sperre zu erhalten), funktioniert es.

Die Frage ist: Sollte das funktionieren? Wird die Dateisperrung über NFS im Allgemeinen nicht empfohlen? (Die Informationen, die gegeben wurden, dass es überhaupt nicht funktioniert, beziehen sich oft auf veraltete Informationen). Wenn dies funktionieren sollte, was kann ich tun, um dies zu debuggen oder zu lösen?

Versuchsaufbau

(Ich habe ein PHP-Skript verwendet , aber ein einfacheres Test-Setup kann über die Befehlszeilen-Herde durchgeführt werden.)

System 1:

flock -x lock.txt sleep 10

Ergebnis: Sperre wird erworben

System 2 (während System 1 die Sperre erworben hat):

flock -x lock.txt sleep 10

Dies kehrt sofort mit zurück

flock: lock.txt: Keine Sperren verfügbar

Diagnose

strace flock -x lock.txt sleep 10

flock(3, LOCK_EX)                       = -1 ENOLCK (No locks available)

Hinzufügen von Debugging-Informationen mit rpcdebug -m nfs all(auf dem Client)

Dies ist das Protokoll für den fehlgeschlagenen Herdenversuch.

/ var / log / messages

Feb  4 10:24:51 myclient kernel: NFS: initiated commit call
Feb  4 10:24:51 myclient kernel: NFS:  6791 nfs_commit_done (status 0)
Feb  4 10:24:51 myclient kernel: NFS: nfs_update_inode(0:40/916722366 fh_crc=0xa8927c2a ct=1 info=0x27e7f)
Feb  4 10:24:51 myclient kernel: NFS:       commit (0:40/916722366 [email protected]) OK
Feb  4 10:24:59 myclient kernel: NFS: permission(0:41/872433655), mask=0x81, res=-10
Feb  4 10:24:59 myclient kernel: NFS call  access
Feb  4 10:24:59 myclient kernel: NFS: nfs_update_inode(0:41/872433655 fh_crc=0x9e46fe1a ct=2 info=0x27e7f)
Feb  4 10:24:59 myclient kernel: NFS reply access: 0
Feb  4 10:24:59 myclient kernel: NFS: permission(0:41/872433655), mask=0x1, res=0
Feb  4 10:24:59 myclient kernel: NFS: nfs_lookup_revalidate(/lock.txt) is valid
Feb  4 10:24:59 myclient kernel: NFS: permission(0:41/915542237), mask=0x10, res=0
Feb  4 10:24:59 myclient kernel: NFS: dentry_delete(/lock.txt, 40808cc)
Feb  4 10:24:59 myclient kernel: NFS: permission(0:41/872433655), mask=0x81, res=0
Feb  4 10:24:59 myclient kernel: NFS: nfs_lookup_revalidate(/lock.txt) is valid
Feb  4 10:24:59 myclient kernel: NFS: revalidating (0:41/915542237)
Feb  4 10:24:59 myclient kernel: NFS call  getattr
Feb  4 10:24:59 myclient kernel: NFS reply getattr: 0
Feb  4 10:24:59 myclient kernel: NFS: nfs_update_inode(0:41/915542237 fh_crc=0x35293470 ct=1 info=0x27e7f)
Feb  4 10:24:59 myclient kernel: NFS: nfs3_forget_cached_acls(0:41/915542237)
Feb  4 10:24:59 myclient kernel: NFS: (0:41/915542237) revalidation complete
Feb  4 10:24:59 myclient kernel: NFS: dentry_delete(/lock.txt, 40808cc)
Feb  4 10:24:59 myclient kernel: NFS: nfs_weak_revalidate: inode 872433655 is valid
Feb  4 10:24:59 myclient kernel: NFS: permission(0:41/872433655), mask=0x81, res=0
Feb  4 10:24:59 myclient kernel: NFS: revalidating (0:41/915542237)
Feb  4 10:24:59 myclient kernel: NFS call  getattr
Feb  4 10:24:59 myclient kernel: NFS reply getattr: 0
Feb  4 10:24:59 myclient kernel: NFS: nfs_update_inode(0:41/915542237 fh_crc=0x35293470 ct=1 info=0x27e7f)
Feb  4 10:24:59 myclient kernel: NFS: (0:41/915542237) revalidation complete
Feb  4 10:24:59 myclient kernel: NFS: nfs_lookup_revalidate(/lock.txt) is valid
Feb  4 10:24:59 myclient kernel: NFS call  access
Feb  4 10:24:59 myclient kernel: NFS: nfs_update_inode(0:41/915542237 fh_crc=0x35293470 ct=1 info=0x27e7f)
Feb  4 10:24:59 myclient kernel: NFS reply access: 0
Feb  4 10:24:59 myclient kernel: NFS: permission(0:41/915542237), mask=0x24, res=0
Feb  4 10:24:59 myclient kernel: NFS: open file(/lock.txt)
Feb  4 10:24:59 myclient kernel: NFS: llseek file(/lock.txt, 0, 1)
Feb  4 10:24:59 myclient kernel: NFS: flock(/lock.txt, t=1, fl=82)
Feb  4 10:24:59 myclient kernel: NFS: flush(/lock.txt)
Feb  4 10:24:59 myclient kernel: NFS: release(/lock.txt)
Feb  4 10:24:59 myclient kernel: NFS: dentry_delete(/lock.txt, 40808cc)

System

RHEL

uname -r
3.10.0-1062.9.1.el7.x86_64



nfsstat –s


Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
0          0          0          0          0       

Client rpc stats:
calls      retrans    authrefrsh
588092     0          588092  

Client nfs v3:
null         getattr      setattr      lookup       access       readlink     
0         0% 350667   59% 0         0% 1714      0% 231693   39% 5         0% 
read         write        create       mkdir        symlink      mknod        
748       0% 2243      0% 0         0% 3         0% 0         0% 0         0% 
remove       rmdir        rename       link         readdir      readdirplus  
0         0% 0         0% 0         0% 0         0% 0         0% 110       0% 
fsstat       fsinfo       pathconf     commit       
0         0% 10        0% 5         0% 889       0% 

Mount-Optionen:

rw, nosuid, noexec, noatime, nodiratime, context = system_u: object_r: httpd_sys_rw_content_t: s0, vers = 3, rsize = 131072, wsize = 131072, namlen = 255, hard, proto = tcp, timeo = 600, retrans = 2, sec = sys, mountaddr = someip, mountvers = 3, mountport = 300, mountproto = udp, local_lock = none, addr = someip


Ich habe nach diesem Thema gesucht. Einige Treffer sind ziemlich alt , wurden nicht beantwortet oder beziehen sich auf ältere Versionen von flock unter Linux, die das gemeinsame Sperren noch nicht unterstützen.

Zum Beispiel gibt Mann 2 Herde auf meinem System die folgenden Informationen:

In Linux-Kerneln bis 2.6.11 sperrt flock () keine Dateien über NFS (dh der Umfang der Sperren war auf das lokale System beschränkt). Stattdessen könnte man die Sperre des Bytebereichs fcntl (2) verwenden, die über NFS funktioniert, wenn eine ausreichend aktuelle Linux-Version und ein Server vorhanden sind, der das Sperren unterstützt. Seit Linux 2.6.12 unterstützen NFS-Clients flock () -Sperren, indem sie sie als Bytebereichssperren für die gesamte Datei emulieren. Dies bedeutet, dass die Sperren fcntl (2) und flock () über NFS miteinander interagieren. Seit Linux 2.6.37 unterstützt der Kernel einen Kompatibilitätsmodus, mit dem flock () -Sperren (und auch fcntl (2) Byte-Region-Sperren) als lokal behandelt werden können. Siehe die Diskussion der Option local_lock in nfs (5).

1 answers

0
Juraj Martinka 2020-02-05 22:34.

Es gibt bereits viele Ressourcen, die sich mit diesem Problem befassen. Zusammenfassend kann gesagt werden, dass Sie flockNFS aus den in der Manpage angegebenen Gründen nicht direkt verwenden können.

Bitte beachten Sie diese Links:

  • https://stackoverflow.com/questions/218451/locking-nfs-files-in-php
  • Dateisperren auf einem NFS?
    • https://www.php.net/manual/en/function.flock.php#82521

Related questions

MORE COOL STUFF

Cate Blanchett schlief nach 3 gemeinsamen Tagen mit ihrem Ehemann und ist 25 Jahre später immer noch mit ihm verheiratet

Cate Blanchett schlief nach 3 gemeinsamen Tagen mit ihrem Ehemann und ist 25 Jahre später immer noch mit ihm verheiratet

Cate Blanchett widersetzte sich typischen Dating-Ratschlägen, als sie ihren Ehemann traf.

Warum Michael Sheen ein gemeinnütziger Schauspieler ist

Warum Michael Sheen ein gemeinnütziger Schauspieler ist

Michael Sheen ist ein gemeinnütziger Schauspieler, aber was genau bedeutet das?

Hallmark-Star Colin Egglesfield sorgt für spannende Fan-Begegnungen bei RomaDrama Live! [Exklusiv]

Hallmark-Star Colin Egglesfield sorgt für spannende Fan-Begegnungen bei RomaDrama Live! [Exklusiv]

Hallmark-Star Colin Egglesfield sprach über spannende Fan-Begegnungen bei RomaDrama Live! plus sein INSPIRE-Programm auf der Convention.

Warum Sie „Northern Exposure“ nicht online streamen können

Warum Sie „Northern Exposure“ nicht online streamen können

Sie müssen einen Blu-ray- oder DVD-Player abstauben, um zu sehen, warum Northern Exposure zu einer der beliebtesten Shows der 90er Jahre wurde.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

Werfen Sie diese Pappröhren nicht weg! 10 Möglichkeiten, sie wiederzuverwenden

Werfen Sie diese Pappröhren nicht weg! 10 Möglichkeiten, sie wiederzuverwenden

Werfen Sie Ihr Papierhandtuch, Toilettenpapier und Geschenkpapierrollen nicht in den Müll. Geben Sie ihnen stattdessen mit einem dieser 10 Hacks ein zweites Leben.

Schlafen Fische?

Schlafen Fische?

Es ist schwer vorstellbar, dass Nemo im Great Barrier Reef ein paar Zs fängt. Aber Fische brauchen Ruhe. Schlafen sie so wie wir?

Spenden Sie Ihr Haar, um unser Wasser sauber zu halten

Spenden Sie Ihr Haar, um unser Wasser sauber zu halten

Haarteile aus Salons und persönliche Spenden können als Matten wiederverwendet werden, die Ölverschmutzungen aufsaugen und zum Schutz der Umwelt beitragen.

Alles, was Sie über das Driften in Mario Kart 8 Deluxe nicht wussten

Alles, was Sie über das Driften in Mario Kart 8 Deluxe nicht wussten

Jedes Mal, wenn Sie in Mario Kart einen Drift ausführen, laden Sie einen Geschwindigkeitsschub auf, der beim Verlassen des Drifts ausgelöst wird. Aber es passiert noch viel mehr unter der Haube, wenn es um diesen Geschwindigkeitsschub geht: wie schnell er aufgeladen wird, wie lange er dauert und ob er sich tatsächlich um Sekunden Ihrer letzten Zeit rasiert oder nicht.

Gerichtsbestimmungen Die FCC muss Aufzeichnungen veröffentlichen, die betrügerische Kommentare zur Netzneutralität erklären könnten

Gerichtsbestimmungen Die FCC muss Aufzeichnungen veröffentlichen, die betrügerische Kommentare zur Netzneutralität erklären könnten

FCC-Vorsitzender Ajit Pai. Ein Bundesrichter entschied letzte Woche, dass die von den Republikanern kontrollierte Federal Communications Commission (derzeit unter Vorsitz von Donald Trump-Beauftragten Ajit Pai) Aufzeichnungen über Millionen betrügerischer öffentlicher Kommentare veröffentlichen muss, bevor die Agentur im vergangenen Jahr die Richtlinien zur Netzneutralität aufhob, berichtete Ars Technica.

Schlafen Sie nicht auf Heathcliff, der anderen orangefarbenen Katze im Internet

Schlafen Sie nicht auf Heathcliff, der anderen orangefarbenen Katze im Internet

Garfield, die lasagne-liebende Comic-Katze, die Montags hasst, ist im Zeitalter des Internets merkwürdig relevant geblieben. Die existenzielle Verzweiflung des Ablegers Garfield Without Garfield oder vielleicht die seltsame Flut ernsthafter Nachforschungen über die Feinheiten von Garfields Existenz.

Jimmy Jackson aus Waterbury, Conn., "Das auch packen" und Clapback-fähig zu sein, ist das schwärzeste, was ich je in dieser Woche gesehen habe

Jimmy Jackson aus Waterbury, Conn., "Das auch packen" und Clapback-fähig zu sein, ist das schwärzeste, was ich je in dieser Woche gesehen habe

WTNH-TV-Screenshot Haben Sie jemals mit dem Teufel im blassen Mondlicht getanzt? Wahrscheinlich nicht. Und du wolltest es wahrscheinlich nie.

Tudor Dixon gewinnt Michigan GOP Primary und trifft nun auf die amtierende Demokratin Gretchen Whitmer

Tudor Dixon gewinnt Michigan GOP Primary und trifft nun auf die amtierende Demokratin Gretchen Whitmer

Tudor Dixon hat am Dienstag die Vorwahlen von Michigan zum Gouverneur gewonnen, nachdem er eine späte Bestätigung des ehemaligen Präsidenten Donald Trump erhalten hatte

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr. Von Hollywood bis New York und überall dazwischen, sehen Sie, was Ihre Lieblingsstars vorhaben!

17-Jähriger erstochen, während 4 weitere bei einem Messerangriff am Wisconsin River verwundet wurden

17-Jähriger erstochen, während 4 weitere bei einem Messerangriff am Wisconsin River verwundet wurden

Die Ermittler prüfen, ob sich die Gruppe und der Verdächtige vor dem Angriff kannten

Wie ich schreibe

Wie ich schreibe

Für mich dreht sich alles um diese erste Linie und wohin sie dich führt. Einige Autoren werden von der Handlung, der feinen Anordnung von Schachfiguren, angetrieben, während andere von einer Figur und der Fähigkeit, mit einem neuen fiktiven Freund auf eine Reise zu gehen, angezogen werden.

Start- und Landebahnen

Start- und Landebahnen

Spätsommer und Herbst sind nostalgische Jahreszeiten. Straßenlaternen werfen ihr Licht über regennasse Straßen, und die Blätter unter den Füßen – gedämpft rot-orange im Schatten der Dämmerung – erinnern an vergangene Tage.

Stellen Sie sich vor, Sie erstellen eine Inhaltsstrategie, die tatsächlich KONVERTIERT. Es ist möglich.

Stellen Sie sich vor, Sie erstellen eine Inhaltsstrategie, die tatsächlich KONVERTIERT. Es ist möglich.

Im Jahr 2021 ermutige ich Sie, alles zu überdenken, was Sie über die Kunden, die Sie bedienen, und die Geschichten, die Sie ihnen erzählen, wissen. Zurücktreten.

Ein Mammutverlust öffnete mein Herz für die Liebe

Ein Mammutverlust öffnete mein Herz für die Liebe

Am Tag des 9. Geburtstags von Felix The Cat erinnere ich mich an einen der größten Verluste meines Erwachsenenlebens – meine Sophie im Jahr 2013. Ich habe diesen Essay geschrieben und ihn kurz im Jahr 2013 auf dieser Plattform geteilt.

Language