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 在线打包_支持子目录
Jun 28 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
PHP读取xml方法介绍
Jan 12 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
php计算当前程序执行时间示例
Apr 24 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
关于PHP开发的9条建议
Jul 27 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 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与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
php简单获取目录列表的方法
2015/03/24 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
document.write的几点使用心得
2014/05/14 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
vue实现简单加法计算器
2020/10/22 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
Django实现快速分页的方法实例
2017/10/22 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
如何验证python安装成功
2020/07/06 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
就业协议书怎么填
2014/04/11 职场文书
期末学生评语大全
2014/04/24 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
年会主持人开场白台词
2015/05/29 职场文书
呐喊读书笔记
2015/06/30 职场文书
培训感想范文
2015/08/07 职场文书