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项目中比较通用的php自建函数的详解
Jun 06 PHP
PHP循环结构实例讲解
Feb 10 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
php获取当月最后一天函数分享
Feb 02 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
浅谈php处理后端&接口访问超时的解决方法
Oct 29 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
PHP新手指南
Apr 01 PHP
thinkphp 获取控制器及控制器方法
Apr 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
实现获取http内容的php函数分享
2014/02/16 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Python的垃圾回收机制深入分析
2014/07/16 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
SQL中where和having的区别
2012/06/17 面试题
广告语设计及教案
2014/03/21 职场文书
企业文化演讲稿
2014/05/20 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
海底两万里读书笔记
2015/06/26 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
nginx 配置指令之location使用详解
2022/05/25 Servers
使用scrapy实现增量式爬取方式
2022/06/21 Python