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 radio 单选框获取与保持值的实现代码
May 15 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
PHP微框架Dispatch简介
Jun 12 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
百度实时推送api接口应用示例
Oct 21 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
laravel-admin的多级联动方法
Sep 30 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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
天津市收音机工业发展史
2021/03/04 无线电
解析isset与is_null的区别
2013/08/09 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
php常量详细解析
2015/10/27 PHP
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
python实现各进制转换的总结大全
2017/06/18 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
公司周年庆典邀请函
2014/01/12 职场文书
国企干部对照检查材料
2014/08/22 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
2015年考研复习计划
2015/01/19 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
详解如何使用Nginx解决跨域问题
2022/05/06 Servers