PHP實現多伺服器session共用之NFS共用的方法

來源:互聯網
上載者:User

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即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.