[PHP/NFS] Sessie probleem

Pagina: 1
Acties:

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:16

Snow_King

Konijn is stoer!

Topicstarter
Beste Tweakers,

Ik heb hier een cluster draaien met 10 webservers en 1 centrale server waar alle sessies worden opgeslagen.

Via NFS hebben alle webservers /tmp gemount en PHP slaat zijn sessions daar op.

Nu heb ik het probleem dat als je een pagina hebt die zeer session intensief is (veel lezen/schrijven) dan springen waardes soms terug.

Nu denk ik dat het volgende gebeurd:
Webservers krijgt sessie verandering door, vanwege drukte wacht hij even met het daadwerkelijk wegschrijven. Client gaat naar andere webservers, maar de "oude" webserver heeft de bewerking nog niet doorgevoerd.

/tmp is ext3 en gemount met de volgende opties: rw,nosuid,noexec

Zijn er speciale NFS/mount settings die aangeven dat schrijven naar die partitie een zeer hoge prioriteit heeft of dat cachen uit gaat? (in hoeverre NFS cached)

Iemand een idee wat dit kan zijn?

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Misschien heb je wat aan de pagina 'NFS for clusters' onder de paragraaf 'acregmin, acregmax, acdirmin, acdirmax, noac, cto'.

Verwijderd

De filesystems exporteren/mounten met de sync optie? Heb je rpc.lockd / rpc.statd draaien?

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:16

Snow_King

Konijn is stoer!

Topicstarter
Ik heb rpc.statd wel draaien.

Ik heb nu de sync optie toegevoegd op de NFS server als mount optie en deze opnieuw gemount.

Lijkt nu een stuk beter te gaan.

Verwijderd

rpc.lockd is ook interesant. Dan kunnen je apache processen een filelock krijgen op de session files.

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:16

Snow_King

Konijn is stoer!

Topicstarter
Verwijderd schreef op vrijdag 26 augustus 2005 @ 17:04:
rpc.lockd is ook interesant. Dan kunnen je apache processen een filelock krijgen op de session files.
Dat moet juist niet lijkt me? Het wisselt namelijk constant van webserver naar webserver.

Net de volgende mount opties probeerd, problem remaines: rw,hard,intr,nosuid,noexec,sync,noac,noatime

Ik heb ook op alle servers de tijd synchroon gezet, mocht niet baten.

[ Voor 23% gewijzigd door Snow_King op 26-08-2005 19:28 ]


  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Hoe worden de clients naar die 10 webservers gestuurd?
Als je een loadbalancer gebruikt kan je er voor zorgen dat een client-ip gedurende de hele sessie op dezelfde webserver blijft. Dan ondervang je dat probleem met niet snel genoeg bijgewerkte nfs servers.

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:16

Snow_King

Konijn is stoer!

Topicstarter
Ik maak gebruik van LVS (Linux Virtual Server) met DirectRouting en de WLC schedule.

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:16

Snow_King

Konijn is stoer!

Topicstarter
Ik geef toch nog een trap.

Ik heb het probleem nog steeds.

Ik ben al bezig geweest met auto_append_file in php.ini om zo een php script te laden die alle sessies naar een MySQL database schrijft.

Dit werkt echt niet goed.

Nu denk ik er over een ander filesystem dan NFS te pakken hiervoor, iemand een suggestie? Of heeft iemand een oplossing om de sessie als sysadmin naar de mysql database te forceren, ZONDER dat er in scripts aanpassingen moeten komen?

  • Teckna
  • Registratie: Mei 2002
  • Laatst online: 14-03 11:46
Ik heb net zelf zend clustering getest:
http://zend.com/store/pro...m/in-depth.php#Clustering

en moet zeggen dat ik er onder de indruk van was, enig nadeel is dat er een prijskaartje aan zit.

Verwijderd

Ben er al weer een tijdje uit, maar volgens mij kun je met LVS toch 'persistent' opgeven voor een connectie zodat ie op de zelfde webserver blijft?
Uit m'n hoofd dacht ik dat je dat in ldirectord.cf kon opgeven
code:
1
persistent=3600

Of zoiets ;)

  • Hans
  • Registratie: Juni 1999
  • Niet online
Je hebt hierbij zowel cache als locking problemen. PHP sessies op een NFS share storen is eigenlijk iets wat je niet wilt. je zou de mount optie 'noac' kunnen gebruiken om alle caching uit te schakelen, maar dan kan het nog zo zijn dat door het ontbreken van een fatsoenlijk locking mechanisme de sessies out of sync of zelfs corrupt raken. Daarnaast kan het juist wel toepassen van locking weer resulteren in onnodige delays, deadlocks, en allerlei ellende.

Het lijkt me een strakker plan om een andere save handler te gebruiken voor je sessies (bijv in een SQL server) of eens te kijken naar de mogelijkheden van memcached of ShareDance.

HTH :)

  • MisterICE
  • Registratie: April 2004
  • Laatst online: 12-09-2025
Snow_King schreef op zondag 18 september 2005 @ 20:29:
Ik geef toch nog een trap.

Ik heb het probleem nog steeds.

Ik ben al bezig geweest met auto_append_file in php.ini om zo een php script te laden die alle sessies naar een MySQL database schrijft.

Dit werkt echt niet goed.
Waarom niet? ik neem aan dat je iets met transactions hebt geprobeerd ?

  • Hans
  • Registratie: Juni 1999
  • Niet online
Oh daar heb ik overheen gelezen, dat je al bezig was met session data in MySQL. Je kan dit doen door een custom save handler te schrijven voor je sessie data, en de functie session_set_save_handler. Hiervoor hoef je maar een aantal functies toe te voegen aan je scripts.

Zie voor voorbeelden bijv. http://www.howtodothings.com/ViewArticle.aspx?Article=338

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:16

Snow_King

Konijn is stoer!

Topicstarter
Het probleem is, ik lever hosting. Ik kan dus niet al mijn klanten verplichten dit aan hun scripts toe te voegen.

Ik zit dus zelf te kijken naar auto_append_file van PHP.

Dat het met via save_handler kon wist ik, nu alleen nog een manier vinden om het als sysadmin te forceren zonder script aanpassingen.

  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op maandag 19 september 2005 @ 14:10:
Ben er al weer een tijdje uit, maar volgens mij kun je met LVS toch 'persistent' opgeven voor een connectie zodat ie op de zelfde webserver blijft?
Uit m'n hoofd dacht ik dat je dat in ldirectord.cf kon opgeven
code:
1
persistent=3600

Of zoiets ;)
Op internet vind ik:
The persistent option is required to keep users going to the web server when the log in. That is needed to preserve session information.
En dat zou dan precies zijn waar ik hierboven al naar verwees. Dan ben je in 1 klap van je sessie probleem af.

edit:
Zie ook: http://www.linuxvirtualserver.org/docs/persistence.html
Er is heel veel over te vinden, dus je moet er nu wel uitkomen denk ik.

[ Voor 27% gewijzigd door Coen Rosdorff op 20-09-2005 02:47 ]


  • Snow_King
  • Registratie: April 2001
  • Laatst online: 06:16

Snow_King

Konijn is stoer!

Topicstarter
Dat heb ik nu inderdaad gedaan. Je geeft dat tegenwoordig mee met ipvsadm.

ipvsadm -p 300

Eens kijken of dat goed werkt.
Pagina: 1