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实现长连接的方法与注意事项的问题
May 10 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
php编写简单的文章发布程序
Jun 18 PHP
php实现简单的MVC框架实例
Sep 23 PHP
初识ThinkPHP控制器
Apr 07 PHP
php数组函数array_walk用法示例
May 26 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
PHP自定义多进制的方法
Nov 03 PHP
php脚本守护进程原理与实现方法详解
Jul 20 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
解析coreseek for sphinx的使用
2013/06/21 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
Vue中props的使用详解
2018/06/15 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
python获取当前计算机cpu数量的方法
2015/04/18 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
自我鉴定注意事项
2014/01/19 职场文书
中学生获奖感言
2014/02/04 职场文书
秋冬农业生产标语
2014/10/09 职场文书
预备党员党支部意见
2015/06/02 职场文书
情况说明书格式及范文
2019/06/24 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android