PHP实现多服务器session共享之NFS共享
生活随笔
收集整理的這篇文章主要介紹了
PHP实现多服务器session共享之NFS共享
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
作/譯者:葉金榮(Email: ),來源:http://imysql.cn,轉載請注明作/譯者和出處,并且不能用于商業(yè)用途,違者必究。 前言,Nio大俠提出了session多服務器共享的問題,原文請見PHP 實現(xiàn)多服務器共享 SESSION 數(shù)據(jù)。其中,有一種方法就是利用NFS來共享session,如果session量比較大并且所有的session文件都在同一個子目錄下的話,那么可能會由此帶來很嚴重的負載問題,甚至導致網(wǎng)站無法使用。本文就是對這個方案做一下詳細的解說。
首先,修改 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,其內(nèi)容如下:#! /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 設置為可執(zhí)行之后,運行以下命令來創(chuàng)建哈希目錄:shell>#cd /usr/local/server/php/include/php/ext/session/ shell>#./mod_files.sh /tmp/php_sess 2 16 現(xiàn)在,就開始設置 NFS 共享了。假定有3臺主機,ip分別為192.168.0.1(主機名svr1)、192.168.0.2(主機名svr2)、192.168.0.3(主機名svr3),現(xiàn)在讓192.168.0.1來提供NFS共享服務,配置 /etc/exports,加入如下內(nèi)容:/tmp/php_sess/ svr*(rw,no_root_squash) 然后重啟 nfs 服務,即可對另外兩臺主機提供NFS共享了。
在 svr2、svr3 上執(zhí)行以下命令來掛在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 增加/修改上面提到的內(nèi)容,然后重啟apache即可。順祝大家新年好運! 本文出自 “MySQL中文網(wǎng)”博客 http://www.imysql.cn/
首先,修改 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,其內(nèi)容如下:#! /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 設置為可執(zhí)行之后,運行以下命令來創(chuàng)建哈希目錄:shell>#cd /usr/local/server/php/include/php/ext/session/ shell>#./mod_files.sh /tmp/php_sess 2 16 現(xiàn)在,就開始設置 NFS 共享了。假定有3臺主機,ip分別為192.168.0.1(主機名svr1)、192.168.0.2(主機名svr2)、192.168.0.3(主機名svr3),現(xiàn)在讓192.168.0.1來提供NFS共享服務,配置 /etc/exports,加入如下內(nèi)容:/tmp/php_sess/ svr*(rw,no_root_squash) 然后重啟 nfs 服務,即可對另外兩臺主機提供NFS共享了。
在 svr2、svr3 上執(zhí)行以下命令來掛在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 增加/修改上面提到的內(nèi)容,然后重啟apache即可。順祝大家新年好運! 本文出自 “MySQL中文網(wǎng)”博客 http://www.imysql.cn/
轉載于:https://blog.51cto.com/imysql/310456
總結
以上是生活随笔為你收集整理的PHP实现多服务器session共享之NFS共享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iframe框架大小自适应
- 下一篇: iis6上安装PHP5.3.2及连接到S