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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
php中取得URL的根域名的代码
Mar 23 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
常用PHP框架功能对照表
Oct 23 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
Mar 01 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中AES加密解密的例子小结
2014/02/18 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python映射拆分操作符用法实例
2015/05/19 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
python实现图像拼接功能
2020/03/23 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
上课打牌的检讨书
2014/02/15 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
毕业横幅标语
2014/10/08 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
国庆节主题班会
2015/08/15 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis
使用JS实现简易计算器
2021/06/14 Javascript
PyTorch device与cuda.device用法
2022/04/03 Python
部分武汉产收音机展览
2022/04/07 无线电