作/译者:叶金荣(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" = ""; thenecho "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"; thenexit 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"; thenhash_chars="$hash_chars g h i j k l m n o p q r s t u v"if test "$3" -eq "64"; thenhash_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; donewpath="$1/$i"mkdir $newpath || exit 1sh $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即可。顺祝大家新年好运!
本文出自 “MySQL中文网”博客 http://www.imysql.cn/

转载于:https://blog.51cto.com/imysql/310456

PHP实现多服务器session共享之NFS共享相关推荐

  1. php java session共享_PHP实现多服务器session共享之NFS共享

    作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 前言,Nio大侠提出了session多服务器共享的问题,原文请见 ...

  2. linux目录共享配置文件,NFS共享目录配置

    一.查看是否安装NFS(portmap是用于RPC传输的) # rpm -q nfs-utils portmap nfs-utils-1.0.9-47.el5_5 portmap-4.0-65.2.2 ...

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

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

  4. session共享mysql_多服务器session共享之mysql共享

    一.PHP SESSION 的工作原理 在解决问题之前,先来了解一下 PHP SESSION 的工作原理.在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() ...

  5. web服务器(LAMP)通过DNS轮询功能和nfs共享实现负载均衡

    web服务器(LAMP)通过DNS轮询功能和nfs共享实现负载均衡,部署discuz论坛 拓扑思路: 服务器1:mariadb+nfs:172.20.120.40 服务器2:apache+php-fp ...

  6. 服务器简历共享文件,通过 NFS 实现服务器目录共享

    项目需求 在一些项目开发中,往往有这种需求,就是项目的一些静态资源都是直接存放在项目服务外的目录中.比如 APP 程序包的上传和下载,一般后台服务上传包,服务直接把包上传到当前系统资源目录,但多个上传 ...

  7. php服务器session共享,PHP实现多WEB服务器共享SESSION的方法(2)

    三.多服务器共享SESSION 的主要障碍及解决办法 森马服饰通过了解 SESSION 的工作原理,我们可以发现,在默认情况下,各个服务器会各自分别对同一个客户端产生SESSION ID,如对于同一个 ...

  8. FTP服务器、部署YUM仓库与NFS共享服务

    FTP协议 概述 搭建与配置 部署YUM仓库服务 概述 配置本地 yum 源仓库 安装yum远程源(ftp模式) FNS共享存储服务 NFS概念 NFS使用场景 NFS服务 NFS配置安装 FTP协议 ...

  9. 麒麟服务器系统搭建nfs共享

    麒麟服务器系统搭建nfs共享 1. NFS介绍 NFS(Network File System,网络文件存储系统)最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许 ...

最新文章

  1. 北京大学崔斌教授组招收图机器学习、AutoML等方向科研实习生
  2. zabbix聚合图形创建脚本
  3. #开发catia_CATIA工程制图二次开发之15:从平面创建剖面视图
  4. U盘安装BackTrack5,提示Could not find kernel image: linux
  5. spring定时注解方式定时写到xml里面融合
  6. Maven 打成 Webjar的方法
  7. mybatis常用方法总结
  8. 关于Chrome字体模糊解决方案
  9. 【Day06】请画出 Css 盒模型,基于盒模型的原理,说明相对定位、绝对定位、浮动实现样式是如何实现的?
  10. 口罩日产量破1亿背后:近3000家企业疯狂增产转产
  11. atitit.架构设计---方法调用结果使用异常还是返回值
  12. c# 后台传到前台乱码_ASP.NET关于前台脚本传递中文参数,后台获取乱码问题(乱码为方框,黑色方框等。。)...
  13. ajax传递timestamp,解决ajax请求自动增加时间戳问题
  14. java常用类、最常用的包
  15. 苹果屏幕旋转怎么设置_iPhone12屏幕供应商是谁 苹果12屏幕怎么查看是哪家
  16. 清科2017医美行业研究报告:消费者搅动产业变局
  17. QCC3040---Media Player module
  18. 怎么用计算机圣诞节快乐,【计算机·图文】圣诞节快乐—圣诞节故事
  19. 祝你生日快乐21音符简谱c语言代码,C语言程序设计:生日快乐歌.doc
  20. freeipa 客户端 Kerberos认证 SSSD关系

热门文章

  1. css3小球坠落,CSS3 圆球体内的小球碰撞运动
  2. adb指令禁用软件_三星等安卓手机续航差?禁用部分系统组件后提升明显
  3. easyexcel注解样式无效_【Java神器】用@ResponseExcel注解将Java List直接转换为Excel文件。不好意思,今晚又可以早点下班了!...
  4. 请写出至少五个块级元素_html 行级元素和块级元素标签列表分别有哪些
  5. 计算机专业博士在体制内做啥工作,体制内裸辞,三十多岁大龄考博,我收获了什么?...
  6. tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总
  7. catv系统主要有哪三部分组成_光纤放大器在DWDM传输系统中的应用
  8. .NET Core 以及与 .NET Framework的关系
  9. Google的三篇大数据思想论文
  10. python字典视图