PHP實(shí)現(xiàn)多服務(wù)器session共享之NFS共享的方法
更新時(shí)間:2007年03月16日 00:00:00 作者:
PHP實(shí)現(xiàn)多服務(wù)器session共享之NFS共享
前言,Nio大俠提出了session多服務(wù)器共享的問(wèn)題,原文請(qǐng)見(jiàn)PHP 實(shí)現(xiàn)多服務(wù)器共享 SESSION 數(shù)據(jù)。
其中,有一種方法就是利用NFS來(lái)共享session,如果session量比較大并且所有的session文件都在同一個(gè)子目錄下的話,那么可能會(huì)由此帶來(lái)很嚴(yán)重的負(fù)載問(wèn)題,甚至導(dǎo)致網(wǎng)站無(wú)法使用。本文就是對(duì)這個(gè)方案做一下詳細(xì)的解說(shuō)。
首先,修改 php.ini的 session.save_path 選項(xiàng),大致如下:
session.save_path = "2;/tmp/php_sess"
意為把session存放在 "/tmp/php_sess" 目錄下,并且分成 2 級(jí)子目錄,每級(jí)子目錄又分別有 16 個(gè)子目錄。
接下來(lái),假設(shè)php的主目錄為 /usr/local/server/php/,則新建一個(gè)文件 /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" = ""; 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
設(shè)置為可執(zhí)行之后,運(yùn)行以下命令來(lái)創(chuàng)建哈希目錄:
shell>#cd /usr/local/server/php/include/php/ext/session/
shell>#./mod_files.sh /tmp/php_sess 2 16
現(xiàn)在,就開始設(shè)置 NFS 共享了。假定有3臺(tái)主機(jī),ip分別為192.168.0.1(主機(jī)名svr1)、192.168.0.2(主機(jī)名svr2)、192.168.0.3(主機(jī)名svr3),現(xiàn)在讓192.168.0.1來(lái)提供NFS共享服務(wù),配置 /etc/exports,加入如下內(nèi)容:
/tmp/php_sess/ svr*(rw,no_root_squash)
然后重啟 nfs 服務(wù),即可對(duì)另外兩臺(tái)主機(jī)提供NFS共享了。
在 svr2、svr3 上執(zhí)行以下命令來(lái)掛在NFS:
shell>#mkdir /tmp/php_sess
shell>#mount svr1:/tmp/php_sess /tmp/php_sess
最后,在這兩個(gè)主機(jī)上對(duì) php.ini 增加/修改上面提到的內(nèi)容,然后重啟apache即可。
前言,Nio大俠提出了session多服務(wù)器共享的問(wèn)題,原文請(qǐng)見(jiàn)PHP 實(shí)現(xiàn)多服務(wù)器共享 SESSION 數(shù)據(jù)。
其中,有一種方法就是利用NFS來(lái)共享session,如果session量比較大并且所有的session文件都在同一個(gè)子目錄下的話,那么可能會(huì)由此帶來(lái)很嚴(yán)重的負(fù)載問(wèn)題,甚至導(dǎo)致網(wǎng)站無(wú)法使用。本文就是對(duì)這個(gè)方案做一下詳細(xì)的解說(shuō)。
首先,修改 php.ini的 session.save_path 選項(xiàng),大致如下:
session.save_path = "2;/tmp/php_sess"
意為把session存放在 "/tmp/php_sess" 目錄下,并且分成 2 級(jí)子目錄,每級(jí)子目錄又分別有 16 個(gè)子目錄。
接下來(lái),假設(shè)php的主目錄為 /usr/local/server/php/,則新建一個(gè)文件 /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" = ""; 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
設(shè)置為可執(zhí)行之后,運(yùn)行以下命令來(lái)創(chuàng)建哈希目錄:
shell>#cd /usr/local/server/php/include/php/ext/session/
shell>#./mod_files.sh /tmp/php_sess 2 16
現(xiàn)在,就開始設(shè)置 NFS 共享了。假定有3臺(tái)主機(jī),ip分別為192.168.0.1(主機(jī)名svr1)、192.168.0.2(主機(jī)名svr2)、192.168.0.3(主機(jī)名svr3),現(xiàn)在讓192.168.0.1來(lái)提供NFS共享服務(wù),配置 /etc/exports,加入如下內(nèi)容:
/tmp/php_sess/ svr*(rw,no_root_squash)
然后重啟 nfs 服務(wù),即可對(duì)另外兩臺(tái)主機(jī)提供NFS共享了。
在 svr2、svr3 上執(zhí)行以下命令來(lái)掛在NFS:
shell>#mkdir /tmp/php_sess
shell>#mount svr1:/tmp/php_sess /tmp/php_sess
最后,在這兩個(gè)主機(jī)上對(duì) php.ini 增加/修改上面提到的內(nèi)容,然后重啟apache即可。
您可能感興趣的文章:
- PHP實(shí)現(xiàn)負(fù)載均衡下的session共用功能
- PHP通過(guò)session id 實(shí)現(xiàn)session共享和登錄驗(yàn)證的代碼
- 用PHP實(shí)現(xiàn)多服務(wù)器共享SESSION數(shù)據(jù)的方法
- PHP 實(shí)現(xiàn)多服務(wù)器共享 SESSION 數(shù)據(jù)
- php中http與https跨域共享session的解決方法
- thinkPHP多域名情況下使用memcache方式共享session數(shù)據(jù)的實(shí)現(xiàn)方法
- PHP簡(jiǎn)單實(shí)現(xiàn)HTTP和HTTPS跨域共享session解決辦法
- php實(shí)現(xiàn)的redis緩存類定義與使用方法示例
- php操作redis緩存方法分享
- PHP實(shí)現(xiàn)負(fù)載均衡session共享redis緩存操作示例
相關(guān)文章
PHP管理依賴(dependency)關(guān)系工具 Composer 安裝與使用
Composer 是PHP中用來(lái)管理依賴(dependency)關(guān)系的工具。你可以在自己的項(xiàng)目中聲明所依賴的外部工具庫(kù)(libraries),Composer會(huì)幫你安裝這些依賴的庫(kù)文件。2014-08-08使用PHP實(shí)現(xiàn)生成HTML靜態(tài)頁(yè)面
在PHP網(wǎng)站開發(fā)中為了網(wǎng)站推廣和SEO等需要,需要對(duì)網(wǎng)站進(jìn)行全站或局部靜態(tài)化處理,PHP生成靜態(tài)HTML頁(yè)面有多種方法,比如利用PHP模板、緩存等實(shí)現(xiàn)頁(yè)面靜態(tài)化,今天就以PHP實(shí)例教程形式討論P(yáng)HP生成靜態(tài)頁(yè)面的方法。2015-11-11php 獲取遠(yuǎn)程網(wǎng)頁(yè)內(nèi)容的函數(shù)
獲取遠(yuǎn)程網(wǎng)頁(yè)內(nèi)容的php函數(shù)2009-09-09編譯php 5.2.14+fpm+memcached(具體操作詳解)
本篇文章是對(duì)編譯php5.2.14+fpm+memcached的具體操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06