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开发中四种查询返回结果分析
Jan 02 PHP
PHP基础学习小结
Apr 17 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
php超快高效率统计大文件行数
Jul 05 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
php数组指针操作详解
Feb 14 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP标准库(PHP SPL)详解
Mar 16 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 团购折扣计算公式
2011/11/24 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
PHP的全局错误处理详解
2016/04/25 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
python中set()函数简介及实例解析
2018/01/09 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
基于python实现地址和经纬度转换
2020/05/19 Python
如何通过python检查文件是否被占用
2020/12/18 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
迎新晚会主持词开场白
2015/05/28 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python