原貼位址:[url]http://imysql.cn/?q=node/202[/url]
收藏.
周四, 2007/01/04 - 18:13 — yejr
作/譯者:葉金榮(Email:

),來源:[url]http://imysql.cn[/url],轉載請注明作/譯者和出處,并且不能用于商業用途,違者必究。
前言,Nio大俠提出了session多伺服器共享的問題,原文請見PHP 實作多伺服器共享 SESSION 資料。其中,有一種方法就是利用NFS來共享session,如果session量比較大并且所有的session檔案都在同一個子目錄下的話,那麼可能會由此帶來很嚴重的負載問題,甚至導緻網站無法使用。本文就是對這個方案做一下詳細的解說。
首先,修改 php.ini的 <code>session.save_path</code> 選項,大緻如下:
意為把session存放在 <code>"/tmp/php_sess"</code> 目錄下,并且分成 2 級子目錄,每級子目錄又分别有 16 個子目錄。
接下來,假設php的主目錄為 <code>/usr/local/server/php/</code>,則建立一個檔案 <code>/usr/local/server/php/include/php/ext/session/mod_files.sh</code>,其内容如下:
設定為可執行之後,運作以下指令來建立哈希目錄:
現在,就開始設定 NFS 共享了。假定有3台主機,ip分别為192.168.0.1(主機名svr1)、192.168.0.2(主機名svr2)、192.168.0.3(主機名svr3),現在讓192.168.0.1來提供NFS共享服務,配置 <code>/etc/exports</code>,加入如下内容:
然後重新開機 nfs 服務,即可對另外兩台主機提供NFS共享了。
在 svr2、svr3 上執行以下指令來挂在NFS:
用NFS來存儲session的缺點是,session過期後不能自動清除,必須自己設定回收機制,我們可以利用crontab來定期回收,用用以下shell指令即可:
意思是,删除30分鐘以前的session檔案,具體的時間請大家自己重新設定吧。
最後,在這兩個主機上對 php.ini 增加/修改上面提到的内容,然後重新開機apache即可。順祝大家新年好運!