PHP实现多服务器session共享之NFS共享的方法


Posted in PHP onMarch 16, 2007

PHP实现多服务器session共享之NFS共享 
前言,Nio大侠提出了session多服务器共享的问题,原文请见PHP 实现多服务器共享 SESSION 数据。

其中,有一种方法就是利用NFS来共享session,如果session量比较大并且所有的session文件都在同一个子目录下的话,那么可能会由此带来很严重的负载问题,甚至导致网站无法使用。本文就是对这个方案做一下详细的解说。
首先,修改 php.ini的 session.save_path 选项,大致如下:

session.save_path = "2;/tmp/php_sess"

意为把session存放在 "/tmp/php_sess" 目录下,并且分成 2 级子目录,每级子目录又分别有 16 个子目录。
接下来,假设php的主目录为 /usr/local/server/php/,则新建一个文件 /usr/local/server/php/include/php/ext/session/mod_files.sh,其内容如下:

#! /bin/sh
# NAME
#      mod_files.sh  - Update of the php-source/ext/session/mod_files.sh
#
# SYNOPSIS
#      mod_files.sh basedir depth [numberofsubdirs]
#
# DESCRIPTION
#      this script creates the directories tree used by php to store the session files
#      (see php.ini - 'session.save_path' option)
#
#      Example: if you want php to store the session files in a directory tree
#      of 3 levels of depth containing 32 directories in each directory,
#      first, put the setting bellow in the php.ini file:
#
#      session.save_path = "3;/tmp/session"
#
#      Now create the basedir directory: 'mkdir /tmp/session'
#
#      Then, call this scrip with the following arguments:
#
#      ./mod_files.sh ./mod_files.sh /tmp/session 3 32

if test "$2" = ""; then
       echo "usage: $0 basedir depth [numberofsubdirs]"
       echo "numberofsubdirs: if unset, defaults to 16. if 32, 32 subdirs, if 64, 64 subdirs."
       exit 1
fi

if test "$2" = "0"; then
       exit 0
fi

hash_chars="0 1 2 3 4 5 6 7 8 9 a b c d e f"
if [ ! -z $3 ] ; then
if test "$3" -a "$3" -eq "32"; then
  hash_chars="$hash_chars g h i j k l m n o p q r s t u v"
  if test "$3" -eq "64"; then
   hash_chars="$hash_chars w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - ,"
  fi
fi
fi

for i in $hash_chars; do
       newpath="$1/$i"
       mkdir $newpath || exit 1
       sh $0 $newpath `expr $2 - 1` $3
done

设置为可执行之后,运行以下命令来创建哈希目录:

shell>#cd /usr/local/server/php/include/php/ext/session/
shell>#./mod_files.sh /tmp/php_sess 2 16

现在,就开始设置 NFS 共享了。假定有3台主机,ip分别为192.168.0.1(主机名svr1)、192.168.0.2(主机名svr2)、192.168.0.3(主机名svr3),现在让192.168.0.1来提供NFS共享服务,配置 /etc/exports,加入如下内容:

/tmp/php_sess/ svr*(rw,no_root_squash)

然后重启 nfs 服务,即可对另外两台主机提供NFS共享了。
在 svr2、svr3 上执行以下命令来挂在NFS:

shell>#mkdir /tmp/php_sess
shell>#mount svr1:/tmp/php_sess /tmp/php_sess

最后,在这两个主机上对 php.ini 增加/修改上面提到的内容,然后重启apache即可。 

PHP 相关文章推荐
php和js交互一例-PHP教程,PHP应用
Jan 03 PHP
php防盗链的常用方法小结
Jul 02 PHP
php中取得URL的根域名的代码
Mar 23 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 PHP
初识laravel5
Mar 02 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 #PHP
不错的一篇面向对象的PHP开发模式(简写版)
Mar 15 #PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 #PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 #PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 #PHP
一个简单的PHP&MYSQL留言板源码
Jul 19 #PHP
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 #PHP
You might like
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
JavaScript中0和""比较引发的问题
2016/05/26 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
银行会计业务的个人自我评价
2013/11/02 职场文书
法学院方阵解说词
2014/01/29 职场文书
公司应聘求职信
2014/06/21 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
合作意向书范本
2019/04/17 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python