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中对2个数组相加的函数
Jun 24 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
PHP常用的小程序代码段
Nov 14 PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
php文件上传类的分享
Jul 06 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
PHP simplexml_load_file()函数讲解
Feb 03 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 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编程实现获取excel文档内容的代码实例
2011/06/28 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
详解vue 实例方法和数据
2017/10/23 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
js消除图片小游戏代码
2019/12/11 Javascript
Python解析树及树的遍历
2016/02/03 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python 拼接文件路径的方法
2018/10/23 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
工商学院毕业生个人自我评价
2013/09/19 职场文书
实习教师自我鉴定
2013/09/27 职场文书
教师师德反思材料
2014/02/15 职场文书
民政局个人整改措施
2014/09/24 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers