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部分常见问题总结
Oct 09 PHP
编写漂亮的代码 - 将后台程序与前端程序分开
Apr 23 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
浅谈php提交form表单
Jul 01 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python开发之list操作实例分析
2016/02/22 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
浅析Python __name__ 是什么
2020/07/07 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
python中pop()函数的语法与实例
2020/12/01 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
女性时尚在线:IVRose
2019/02/23 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
2014年教师节演讲稿
2014/09/03 职场文书
小学中队活动总结
2015/05/11 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
Python读写yaml文件
2022/03/20 Python
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android