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 相关文章推荐
新浪新闻小偷
Oct 09 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
PHP判断一个gif图片是否为动态图片的方法
Nov 19 PHP
PHP如何使用Memcached
Apr 05 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
Laravel实现autoload方法详解
May 07 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
PHP dirname功能及原理实例解析
Oct 28 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中redis的用法深入解析
2014/02/20 PHP
PHP多进程编程实例
2014/10/15 PHP
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
为你总结一些php信息函数
2015/10/21 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
javascript date格式化示例
2013/09/25 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
团员个人的自我评价
2013/12/02 职场文书
餐饮营销方案
2014/02/23 职场文书
校运会口号
2014/06/18 职场文书
聘用意向书
2014/07/29 职场文书
小学庆六一活动总结
2014/08/28 职场文书
生日祝酒词大全
2015/08/10 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书