[]利用memcached在多臺(tái)服務(wù)器之間共享PHP的session數(shù)據(jù)
最近我的幾篇文章都是是最近項(xiàng)目的一點(diǎn)心得^^

這個(gè)項(xiàng)目一開始就設(shè)計(jì)的“很大”,考慮了很多負(fù)載均衡方面的東西,比如采用nginx將php的請(qǐng)求分?jǐn)偟饺舾蓚€(gè)運(yùn)行php fastcgi的獨(dú)立服務(wù)器中。這樣的設(shè)計(jì)除了在每個(gè)php fastcgi服務(wù)器中要保存一份程序的拷貝以外, 還有一個(gè)亟待解決的問題。由于php fastcgi進(jìn)程分別運(yùn)行在不同的服務(wù)器上,默認(rèn)的,php的session數(shù)據(jù)是在各個(gè)服務(wù)器上分別存放的,這樣的話,如果在某一次php請(qǐng)求過 后,nginx將php請(qǐng)求發(fā)送到了另外集群中的另外一臺(tái)php fastcgi服務(wù)器,那么就會(huì)導(dǎo)致session的丟失。經(jīng)過一系列考慮,項(xiàng)目組決定采用一臺(tái)獨(dú)立memcached服務(wù)器來存儲(chǔ)整個(gè)項(xiàng)目的php session數(shù)據(jù),再通過改寫php的session處理函數(shù)來對(duì)memcached服務(wù)器進(jìn)行數(shù)據(jù)讀寫,然后解決各個(gè)php fastcgi中session不同步的問題。
項(xiàng)目背景基本上就是上面說的那些,下面大概說說相關(guān)的網(wǎng)絡(luò)環(huán)境,然后進(jìn)入具體的配置、實(shí)現(xiàn)過程:
1、nginx服務(wù)器一臺(tái),IP地址:172.16.236.208
2、php fastcgi服務(wù)器兩臺(tái),IP分別為:172.16.236.210,172.16.236.211
3、memcached服務(wù)器一臺(tái),IP為:172.16.236.220
為了簡(jiǎn)化操作過程,上面的環(huán)境僅僅是達(dá)到項(xiàng)目需求的假設(shè),實(shí)際項(xiàng)目中還有許多額外的處理。
首先,修改nginx虛擬主機(jī)配置,將php的請(qǐng)求分發(fā)到各個(gè)php fastcgi服務(wù)器去,
大致的配置過程可以參加我之前的文章:使用nginx配置多個(gè)php fastcgi負(fù)載均衡
第二步,為php fastcgi服務(wù)器安裝php-memcache擴(kuò)展,參見:memcached、php-memcache安裝筆記
啰嗦一句,這一步其實(shí)只需在一臺(tái)服務(wù)器上進(jìn)行,其他php fastcgi的配置其實(shí)可以偷懶,就是將之前編譯好的memcache.so拷貝到需要配置的服務(wù)器中,然后修改php.ini可以加載這個(gè)擴(kuò)展即可。
第三步,修改項(xiàng)目php源代碼,使php的session存取使用memcached。
之前沒有認(rèn)真去讀php的手冊(cè),先是自己寫session的handler,然后又碰到一些奇怪的問題。最后在php官方的memcache說明中找到了最簡(jiǎn)單的辦法,其實(shí)只要在調(diào)用session_start()之前執(zhí)行如下代碼:
$host = '172.16.236.220' ;
$port = '11211' ;
$session_save_path = "tcp://$host:$port?persistent=1&weight=2&timeout=2&retry_interval=10, ,tcp://$host:$port ";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
其中$host是memcached服務(wù)器的ip地址,$port是memcached監(jiān)聽的端口。
執(zhí)行了如下代碼以后,所有php fastcgi服務(wù)器的session操作都同步到了memcached服務(wù)器,而對(duì)于項(xiàng)目的php代碼來說,以前該怎么用還是怎么用,完全可以不用像這篇博客開頭那樣,以為要改寫php的session處理函數(shù)了。
再次感嘆一下,php官方的說明文檔真是無比強(qiáng)大…以后真不應(yīng)該這么自信,還是應(yīng)該先去官方仔細(xì)找找~
Memcached PHP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。