Linux за българи: Форуми

Linux секция за напреднали => Начини за увеличаване на бързодействието => Темата е започната от: ovrpwrd в Nov 12, 2008, 11:32



Титла: apache ha cluster и php sessions
Публикувано от: ovrpwrd в Nov 12, 2008, 11:32
Здравейте,

 От известно време си играя с ha клъстеринг в домашни условия. Имам 2 апача в клъстер с ldirectord и т.н. но не намирам решение за php сесиите.
 Реално проблема е че когато се логна в някой от сайтовете на клъстера, когато конекцията се пренасочи към другия апач сесията се разпада.
 Несъм програмист и не разбирам php нито начина по който работят сесиите. Затова се надявам някой тук да ми помогне. Нужна ми е просто насока, някакво howto или статия по темата. Разрових се из google но не открих нищо подходящо. А ако някой има повече време може и да поясни стъпка по стъпка решение :)

Благодаря Ви!


Титла: Re: apache ha cluster и php sessions
Публикувано от: VladSun в Nov 12, 2008, 12:00
До колкото ми е известно, има два (стандартни) начина за пазене на PHP сесиите - във файлове или в ДБ. Т.е. имаш варианти да направиш общ storage на файловете за сесии или обща ДБ за двата сървера.

gat3way, кво ще кажеш ти по въпроса ;) ?


Титла: Re: apache ha cluster и php sessions
Публикувано от: ovrpwrd в Nov 12, 2008, 12:07
До колкото ми е известно, има два (стандартни) начина за пазене на PHP сесиите - във файлове или в ДБ. Т.е. имаш варианти да направиш общ storage на файловете за сесии или обща ДБ за двата сървера.

gat3way, кво ще кажеш ти по въпроса ;) ?

Да обмислих варианта да пазя сесиите в ДБ, но тогава трябва да преконфигурирам всички приложения да използват ДБ като session storage което е немислимо ако имам огромен брой приложения/сайтове.
Опитах другия вариант с общ session.save_path, монтирах единия на другия, но пак се губят сесиите. Сега разглеждам drbd, може да се окаже някакво решение.

Благодаря, все още търся решение на проблема и всяка идея би била полезна!


Титла: Re: apache ha cluster и php sessions
Публикувано от: gat3way в Nov 12, 2008, 12:49
Трябва ти shared storage някакъв. Това може да бъде NFS сървър (кофти вариант, single point of failure). Най-икономичният вариант е drbd, но ако трябва да го направиш като хората, за да е сигурно и за да не товариш външния интерфейс, ще е добре на 2-те апач машини да имаш по втори интерфейс, който да ползваш за drbd трафик.

Гадното на drbd е че не можеш да синхронизираш повече от 2 машини. Те 2 са достатъчни за целите на failover де.

А, да, сам по себе си drbd не ти решава проблема, защото не ти трябва просто споделено блоково устройство, а споделена файлова система. За целта ти трябва клъстерна файлова система, защото иначе се сещаш какво става когато две машини я монтират едновременно и почнат да мажат отгоре (особено по журнала) без да имат идея за съседа си който прави същото....ще съсипеш файловата система одма :)

ocfs2 и gfs са добри варианти.


Титла: Re: apache ha cluster и php sessions
Публикувано от: ovrpwrd в Nov 12, 2008, 12:58
Трябва ти shared storage някакъв. Това може да бъде NFS сървър (кофти вариант, single point of failure). Най-икономичният вариант е drbd, но ако трябва да го направиш като хората, за да е сигурно и за да не товариш външния интерфейс, ще е добре на 2-те апач машини да имаш по втори интерфейс, който да ползваш за drbd трафик.

Гадното на drbd е че не можеш да синхронизираш повече от 2 машини. Те 2 са достатъчни за целите на failover де.

А, да, сам по себе си drbd не ти решава проблема, защото не ти трябва просто споделено блоково устройство, а споделена файлова система. За целта ти трябва клъстерна файлова система, защото иначе се сещаш какво става когато две машини я монтират едновременно и почнат да мажат отгоре (особено по журнала) без да имат идея за съседа си който прави същото....ще съсипеш файловата система одма :)

ocfs2 и gfs са добри варианти.

До момента изпробвах следното:

монтирам с NFS session.save_path (/tmp) от единия сървър на другия.

Ефект:

правя сесия на единия апач, създава файл например sess_420998c1bf3999c530fdb43b688ad5567db135dd в тази директория(/tmp), но другия апач се прави че не е видял файла и сесията се разпада. Не е ли нормално другото php да види този файл и да продължи сесията?


Титла: Re: apache ha cluster и php sessions
Публикувано от: gat3way в Nov 12, 2008, 13:00
Хм, странно. Не би трябвало де. Дали позволенията са като хората?


Титла: Re: apache ha cluster и php sessions
Публикувано от: ovrpwrd в Nov 12, 2008, 13:11
Абсолютно, наред са. Вероятно пише нещо другаде.


Титла: Re: apache ha cluster и php sessions
Публикувано от: gat3way в Nov 12, 2008, 13:15
Не, не, не би трябвало да има проблем. Сигурен ли си че на двете машини apache user-a с който върви уебсървъра (www-data в дебиан, apache в редхат) имат един и същ uid?!?


Титла: Re: apache ha cluster и php sessions
Публикувано от: bnight в Nov 12, 2008, 13:23
Така доста съм си играл с HA като съм достигал до напълно работещ сървър. Въпроса е че при NFS има едни Lock който ти пречат за това със сесиите. Та това е основният проблем.


Титла: Re: apache ha cluster и php sessions
Публикувано от: gat3way в Nov 12, 2008, 13:43
NFS сървъра явно се намира на една от двете машини предполагам, щом стават подобни драми с локинг-а. Е те това не е много разумна идея като цяло, отпадането на едната машина води до отпадане на функционалността и на другата - щото няма да чете и пише в mountpoint-a.


Титла: Re: apache ha cluster и php sessions
Публикувано от: gat3way в Nov 12, 2008, 15:18
...


Титла: Re: apache ha cluster и php sessions
Публикувано от: ovrpwrd в Nov 13, 2008, 11:08
NFS сървъра явно се намира на една от двете машини предполагам, щом стават подобни драми с локинг-а. Е те това не е много разумна идея като цяло, отпадането на едната машина води до отпадане на функционалността и на другата - щото няма да чете и пише в mountpoint-a.

Здравейте отново,

Да просто бях монтирал session.save_path на едното php като NFS на другото, просто за теста, но несе получи не заради nfs lock мисля, вероятен проблем с позволениятя(nfsnobody/nobody) не успях да го изясня тъй като прецених че NFS сторидж за сесиите не е надежден и го изключих като вариант.

Реших проблема използвайки memcached да пази сесиите(на трета машина). Остава да клъстеризирам и memcached демона за да не осъмна без сесии евентуално някой ден :) и така. Това е моето решение засега, все пак продължавам да търся сходни решения и евентуално развитие.