原贴地址:[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即可。顺祝大家新年好运!