作/译者:叶金荣(Email:

),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。

前言,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

用NFS来存储session的缺点是,session过期后不能自动清除,必须自己设定回收机制,我们可以利用crontab来定期回收,用用以下shell命令即可:

find /tmp/php_sess -mmin +30 | xargs rm -fr

意思是,删除30分钟以前的session文件,具体的时间请大家自己重新设置吧。

最后,在这两个主机上对 php.ini 增加/修改上面提到的内容,然后重启apache即可。顺祝大家新年好运!

本文出自 “老叶茶馆” 博客,转载请与作者联系!

php java session共享_PHP实现多服务器session共享之NFS共享相关推荐

  1. linux如何挂载nfs共享目录,在Linux中,如何挂载NFS共享

    网络文件系统( NFS )是一种分布式文件系统协议,允许你通过网络共享远程目录,使用NFS,可以在系统上挂载远程目录,并像使用本地文件一样使用远程文件. 在Linux和UNIX操作系统上,可以使用mo ...

  2. linux nfs acl 特定ip,技术|RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享...

    在上一篇文章(RHCSA 系列(六))中,我们解释了如何使用 parted 和 ssm 来设置和配置本地系统存储. RHCSA 系列: 配置 ACL 及挂载 NFS/Samba 共享 – Part 7 ...

  3. Linux YUM扩展NFS共享存储服务(配置图解)

    NFS共享存储服务 一.YUM 1.YUM (Yellow dog Updater Modified) 2.软件仓库的提供方法 3.RPM软件包的来源 4.构建CentOS 7 软件仓库 5.在软件仓 ...

  4. 如何使用NFS发布共享资源,以及如何访问NFS共享资源

    文章目录 1.NFS共享存储服务的介绍 2.使用NFS发布共享资源 2.1 NFS应用场景 2.2 NFS网络文件系统 2.3 安装nfs-utils.rpcbind软件包 2.4 设置共享目录 2. ...

  5. win10连接linux nfs,WIN10旗舰版怎么挂载NFS共享目录?方法分享

    win10系统的NFS共享目录可以让Linux和Windows之间的文件共享成为可能, NFS是Unix中广泛使用的文件共享协议,在Linux下得到了传承,使用简单,读写性能强大.过去Windows与 ...

  6. 部署YUM仓库及NFS共享服务(咕咕咕)

    文章目录 YUM YUM概述 准备安装源 访问YUM仓库 NFS NFS共享存储服务 NFS配置文件 在文件服务器使用NFS发布共享资源 在客户机中访问NFS共享资源 YUM YUM概述 基于RPM包 ...

  7. Linux NFS共享存储

    Linux NFS共享存储 一.NFS共享存储服务 概述 NFS是一种基于TCP/IP传输的网络文件系统协议.通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源. 优缺点 对于 ...

  8. php java session共享_php 函数session_id()思考。实现同服务器下session共享

    session_id() session_id() 存取目前 session 代号. 语法: string session_id(string [id]); 本函数可取得或者重新配置目前存放 Sess ...

  9. php java 共享session_PHP 实现多服务器共享 SESSION 数据

    一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使 ...

最新文章

  1. 计算机的五大主要应用领域是电大,电大计算机应用基础考答案
  2. matlab GUI figure置右上角
  3. hdu 4831(线段树---待解决)
  4. 学习心得体会、备忘录整理
  5. .NET Core很酷,你不得不知
  6. 用指针编写程序将输入的字符串倒序输出
  7. WEB页面性能指标与建议
  8. html中异步上传文件实现示例,HTML_html中异步上传文件实现示例,复制代码代码如下: form actio - phpStudy...
  9. GdiPlus[16]: IGPLinearGradientBrush 之 SetBlendBellShape、SetBlendTriangularShape
  10. ZK框架笔记3、窗体组件
  11. 【转】Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
  12. 发现新的预言梦种类:预言梦投射
  13. 计算机蓝屏分析报告,如何获取电脑蓝屏后的错误报告DMP文件
  14. 基于Matlab的车型识别(GUI界面)
  15. Docotic.Pdf New Crack by Crackdung
  16. CBDB中国历代人物历史可视化系统
  17. UWB电厂人员定位系统优势有哪些?
  18. ZXR10 1809 路由器 1800开启WEB配置界面调试方法
  19. ThinkPHP 微信支付及退款
  20. Guessing the Greatest (hard version)-(交互+二分+思维)

热门文章

  1. 在Firefox中通过AJAX跨域访问Web资源
  2. java.lang.Class.isPrimitive()用法解析
  3. maven 从入门到实战
  4. ReactJS入门学习一
  5. iphone按钮圆角的问题
  6. 今日之“烧饼油条”!
  7. ap sat_新手必读:7个问题分清SAT、AP、托福考试
  8. 【毕业答辩】毕业论文答辩有技巧!
  9. android api文档_【粉丝投稿】无需额外注解的 SpringBoot API文档生成工具
  10. c lambda表达式 select 改变字段名称_C博客作业01--分支、顺序结构 - 吖黑大帅