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 24 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
使用php测试硬盘写入速度示例
Jan 27 PHP
php阻止页面后退的方法分享
Feb 17 PHP
PHP代码优化的53个细节
Mar 03 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
从wamp到xampp的升级之路
Apr 08 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
PHP实现简易用户登录系统
Jul 10 PHP
php+js实现点赞功能的示例详解
Aug 07 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
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
python中的字典使用分享
2016/07/31 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
python使用opencv读取图片的实例
2017/08/17 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Python秒算24点实现及原理详解
2019/07/29 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
某公司面试题
2012/03/05 面试题
物流专业毕业生推荐信范文
2013/11/18 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
机关单位动员会主持词
2014/03/20 职场文书
初中英语课后反思
2014/04/25 职场文书
校园活动策划方案
2014/06/13 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
详解MySQL集群搭建
2021/05/26 MySQL