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 相关文章推荐
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
PHP远程采集图片详细教程
Jul 01 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 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函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
利用python将图片转换成excel文档格式
2017/12/30 Python
python flask中静态文件的管理方法
2018/03/20 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
python实现双色球随机选号
2020/01/01 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
python实现KNN近邻算法
2020/12/30 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
分厂厂长岗位职责
2013/12/29 职场文书
民生工程实施方案
2014/03/22 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
篮球比赛口号
2014/06/10 职场文书
要账委托书范本
2014/09/15 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
创业计划书之便利店
2019/09/05 职场文书
SQL Server内存机制浅探
2022/04/06 SQL Server